Dear all,
I am not sure whether the absolute absence of any comment at all on the work done -following my mail from 25 Jan- is due to a possible problem on the voql-teg list or simply just another issue.
In case there has been a problem, I am copying several of us so I can be sure this is arriving some people. I'd appreciate that you acknowledge receipt of this mail.
I will forward this mail to the whole VOQL community this week. Please make any comments you might have before Friday.
Thanks.
Cheers,
P.
Begin forwarded message:
> From: Pedro Osuna <Pedro.Osuna-at-sciops.esa.int>
> Date: 25 de enero de 2008 16:23:47 GMT+01:00
> To: VOQL-TEG <voql-teg-at-ivoa.net>
> Cc: Inaki Ortiz <Inaki.Ortiz-at-sciops.esa.int>
> Subject: Latest ADQL doc and proposal for evolutioin
>
> Dear all,
>
> there has been a great deal of work behind the scenes by Pat, Inaki,
> Jeff and Alex to try to define the Region, as we agreed some time
> ago, and during our last Cambridge meeting.
>
> The process has not ben easy at all, but I believe we are in a
> position to expose to the whole VOQL community a mature document
> that could be proposed for PR in the coming month.
>
> We are still lacking the text for the Region stuff within the
> document, which we agreed will be written by two native Enlgish
> speakers (Pat and Jeff) with support from Alex and Inaki if needed.
> Nevertheless, we do have a neat BNF (which is the most important
> thing) written by Inaki and Jeff, and this is what will form the
> basis for the ADQL.
>
> I would like you -voql-teg- to review the document and give your
> comments, and whether you are happy enough so it goes to the general
> VOQL community.
>
> I attach the latest document produced by Inaki and inline his
> description of the latest changes in the document. Please let us
> know your comments if any. I will call for a teleconf meeting once
> you have had time enough to read the document.
>
> I want to thank here Inaki, Pat, Jeff and Alex for their hard work
> ont he Region issue.
>
> Cheers,
> P.
>
>
> ----------------------------------------------------------------------------------------------------------------------------------------
>
> Please find attached the latest ADQL-BNF that I have compiled with
> recent inputs. The main changes are as follows:
> Region is no longer a boolean predicate but a function.
> Region construct is now able to accommodate a subset of OpenGIS-like
> definitions.
> Region is now considered as a system defined function.
> New coordinates construct to encapsulate latitude and longitude sets.
> Point construct changed to be like other geometry types.
> Coordsys explicitly defined to allow literals and column references.
> Geometry types built from single coord_sys to avoid redundancy.
> 1. Before
> Before we had the region defined as a boolean predicate containing
> either a contains or an intersects predicate.
>
> <predicate> ::=
> <comparison_predicate> | <between_predicate> |
> <in_predicate> | <like_predicate>
> | <null_predicate> | <exists_predicate> | <region_predicate>
>
> <region_predicate> ::= <contains_predicate> | <intersects_predicate>
>
> <contains_predicate> ::=
> [ NOT ]CONTAINS <left_paren> <region>
> <comma> <coordsys>
> <comma> <coord_lon>
> <comma> <coord_lat> <right_paren>
>
> <coord_sys_keyword> ::= ICRS | GAL
>
> <coord_sys_value> ::= <column_reference> | <user_defined_function>
>
> <coord_sys> ::= <coord_sys_keyword> | <coord_sys_value>
>
> <intersects_predicate> ::=
> INTERSECTS <left_paren> <region>
> <comma> <region> <right_paren>
>
> <region> ::= <region_expression> | <region_value>
>
> <region_expression> ::= <circle> | <rectangle> | <polygon>
>
> <circle> ::=
> CIRCLE <left_paren> <coord_sys>
> <comma> <coord_lon>
> <comma> <coord_lat>
> <comma> <radius> <right_paren>
> [...]
>
> <region_value> ::= <column_reference> | <user_defined_function>
>
> 2. After
> We now reuse the 'numeric value function' container and append to it
> a new placeholder for system defined functions. Initially this
> container includes all the region stuff plus, e.g., an explicit
> distance function (as per request).
> Hence, we have no more boolean predicates to define the geometrical
> functions, just SQL92 compatible functions that could be described
> following the OpenGIS syntax. We also include the point construct
> and make any region function (contains, intersects, ...) deal with a
> more abstract concept: the Geometry, which include for the time
> being point, circle, rectangle and polygon (and could be extended if
> necessary to any element of the OpenGIS Geometry class hierarchy).
> With this approach we would be now dealing with SQL-compatible
> functions (easy to implement) rather than boolean predicates. This
> could be done as follows:
>
> <numeric_value_function> ::=
> <trigonometric_function>
> | <math_function>
> | <user_defined_function>
> | <system_defined_function>
>
> <system_defined_function> ::= <distance_function> | <region_function>
> !! others could fit here
>
> <distance_function> ::=
> DISTANCE <left_paren> <point> <comma> <point> <right_paren>
>
> <region_function> ::= <contains_function> | <intersects_function>
> !! other functions could fit here: Equals, Disjoint, Touches,
> Crosses, Within, Overlaps, Relate
>
> <contains_function> ::=
> CONTAINS <left_paren> <geometry>
> <comma> <geometry> <right_paren>
>
> <intersects_function> ::=
> INTERSECTS <left_paren> <geometry>
> <comma> <geometry> <right_paren>
>
> <geometry> ::= <point> | <circle> | <rectangle> | <polygon>
>
> <point> ::=
> POINT <left_paren>
> <coord_sys> <comma> <coordinates>
> <right_paren>
>
> <coordinates> ::= <coord_lon> <comma> <coord_lat>
>
> <coord_sys> ::= <string_value_expression>
>
> <coord_lat> ::= <numeric_value_expression>
> !! generic latitude
>
> <coord_lon> ::= <numeric_value_expression>
> !! generic longitude
>
> <circle> ::=
> CIRCLE <left_paren>
> <coord_sys> <comma>
> <coordinates> <comma> <radius>
> <right_paren>
>
> <radius> ::= <numeric_value_expression>
>
> <rectangle> ::=
> RECTANGLE <left_paren>
> <coord_sys> <comma>
> <coordinates> <comma> <coordinates>
> <right_paren>
>
> <polygon> ::=
> POLYGON <left_paren>
> <coordsys> <comma>
> <coordinates> <comma> <coordinates> <comma> <coordinates>
> { <comma> <coordinates> } ?
> <right_paren>
>
> --
> Iņaki Ortiz de Landaluce
>
> European Space Agency (ESA)
> European Space Astronomy Centre (ESAC)
> Science Operations Department (SCI-O)
> Science Archives Engineering Unit (SCI-OE)
>
> E-mail: Inaki.Ortiz-at-sciops.esa.int
> Tel: +34 91 813 13 67 Fax: +34 91 813 13 22
>
> European Space Astronomy Centre (ESAC)
> 28691 Villanueva de la Caņada
> P.O. Box 78, Madrid, SPAIN
> * Region is no longer a boolean predicate but a function.
> * Region construct is now able to accommodate a subset of OpenGIS-
> like definitions.
> * Region is now considered as a system defined function.
> * New coordinates construct to encapsulate latitude and longitude
> sets.
> * Point construct changed to be like other geometry types.
> * Coordsys explicitly defined to allow literals and column
> references.
> * Geometry types built from single coord_sys to avoid redundancy.
> * UDF, REGION, GAL, ICRS taken out from ADQL reserved word list
> * POINT added to ADQL reserved word list
>
> <ADQL_language_character> ::=
> <simple_Latin_letter>
> | <digit>
> | <SQL_special_character>
>
> <ADQL_reserved_word> ::=
> ABS
> | ACOS
> | ASIN
> | ATAN
> | ATAN2
> | CEILING
> | CIRCLE
> | CONTAINS
> | COS
> | DEGREES
> | EXP
> | FLOOR
> | INTERSECTS
> | LOG
> | LOG10
> | MODE
> | PI
> | POINT
> | POLYGON
> | POWER
> | RADIANS
> | RECTANGLE
> | RAND
> | ROUND
> | SIN
> | SQRT
> | SQUARE
> | TAN
> | TOP
> | TRUNCATE
>
> <SQL_embedded_language_character> ::=
> <left_bracket>
> | <right_bracket>
>
> <SQL_reserved_word> ::=
> ABSOLUTE | ACTION | ADD | ALL | ALLOCATE | ALTER | AND | ANY | ARE
> | AS | ASC | ASSERTION | AT | AUTHORIZATION | AVG
> | BEGIN | BETWEEN | BIT | BIT_LENGTH | BOTH | BY
> | CASCADE | CASCADED | CASE | CAST | CATALOG | CHAR | CHARACTER
> | CHARACTER_LENGTH
> | CHAR_LENGTH | CHECK | CLOSE | COALESCE | COLLATE | COLLATION
> | COLUMN | COMMIT
> | CONNECT | CONNECTION | CONSTRAINT | CONSTRAINTS | CONTINUE
> | CONVERT | CORRESPONDING | COUNT
> | CREATE | CROSS | CURRENT | CURRENT_DATE | CURRENT_TIME
> | CURRENT_TIMESTAMP
> | CURRENT_USER | CURSOR
> | DATE | DAY | DEALLOCATE | DECIMAL | DECLARE | DEFAULT
> | DEFERRABLE | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR
> | DIAGNOSTICS
> | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
> | ELSE | END | END-EXEC | ESCAPE | EXCEPT | EXCEPTION | EXEC
> | EXECUTE
> | EXISTS | EXTERNAL | EXTRACT
> | FALSE | FETCH | FIRST | FLOAT | FOR | FOREIGN | FOUND | FROM | FULL
> | GET | GLOBAL | GO | GOTO | GRANT | GROUP
> | HAVING | HOUR
> | IDENTITY | IMMEDIATE | IN | INDICATOR | INITIALLY | INNER | INPUT
> | INSENSITIVE
> | INSERT | INT | INTEGER | INTERSECT | INTERVAL | INTO | IS
> | ISOLATION
> | JOIN
> | KEY
> | LANGUAGE | LAST | LEADING | LEFT | LEVEL | LIKE | LOCAL | LOWER
> | MATCH | MAX | MIN | MINUTE | MODULE | MONTH
> | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO | NOT | NULL
> | NULLIF | NUMERIC
> | OCTET_LENGTH | OF | ON | ONLY | OPEN | OPTION | OR | ORDER | OUTER
> | OUTPUT | OVERLAPS
> | PAD | PARTIAL | POSITION | PRECISION | PREPARE | PRESERVE | PRIMARY
> | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
> | READ | REAL | REFERENCES | RELATIVE | RESTRICT | REVOKE | RIGHT
> | ROLLBACK | ROWS
> | SCHEMA | SCROLL | SECOND | SECTION | SELECT | SESSION
> | SESSION_USER | SET
> | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE | SQLERROR
> | SQLSTATE | SUBSTRING | SUM | SYSTEM_USER
> | TABLE | TEMPORARY | THEN | TIME | TIMESTAMP | TIMEZONE_HOUR
> | TIMEZONE_MINUTE
> | TO | TRAILING | TRANSACTION | TRANSLATE | TRANSLATION | TRIM | TRUE
> | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE | USER | USING
> | VALUE | VALUES | VARCHAR | VARYING | VIEW
> | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
> | YEAR
> | ZONE
>
> <SQL_special_character> ::=
> <ampersand>
> | <asterisk>
> | <colon>
> | <comma>
> | <double_quote>
> | <equals_operator>
> | <greater_than_operator>
> | <left_paren>
> | <less_than_operator>
> | <minus_sign>
> | <percent>
> | <period>
> | <plus_sign>
> | <question_mark>
> | <quote>
> | <right_paren>
> | <semicolon>
> | <solidus>
> | <space>
> | <underscore>
> | <vertical_bar>
>
>
> <ampersand> ::= &
>
> <approximate_numeric_literal> ::= <mantissa> E <exponent>
>
> <as_clause> ::= [ AS ] <column_name>
>
> <asterisk> ::= *
>
> <between_predicate> ::=
> <value_expression> [ NOT ] BETWEEN <value_expression> AND
> <value_expression>
>
> <boolean_factor> ::= [ NOT ] <boolean_primary>
>
> <boolean_primary> ::=
> <predicate> | <left_paren> <search_condition> <right_paren>
>
> <boolean_term> ::= <boolean_factor> | <boolean_term> AND
> <boolean_factor>
>
> <catalog_name> ::= <identifier>
>
> <character_factor> ::= <character_primary>
>
> <character_primary> ::= <value_expression_primary> |
> <user_defined_function>
>
> <character_representation> ::= <nonquote_character> | <quote_symbol>
>
> <character_string_literal> ::=
> <quote> [ <character_representation>... ] <quote>
> [ {<separator>... <quote>
> [ <character_representation>... ]<quote>}... ]
>
> <character_value_expression> ::= <concatenation> | <character_factor>
>
> <circle> ::=
> CIRCLE <left_paren>
> <coord_sys> <comma>
> <coordinates> <comma> <radius>
> <right_paren>
>
> <colon> ::= :
>
> <column_name> ::= <identifier>
>
> <column_name_list> ::= <column_name> [ { <comma> <column_name> }... ]
>
> <column_reference> ::= [ <qualifier> <period> ] <column_name>
>
> <comma> ::= ,
>
> <comment> ::= <comment_introducer> [ <comment_character>... ]
> <newline>
>
> <comment_character> ::= <nonquote_character> | <quote>
>
> <comment_introducer> ::= <minus_sign><minus_sign> [<minus_sign>...]
>
> <comp_operator> ::=
> <equals_operator>
> | <not_equals_operator>
> | <less_than_operator>
> | <greater_than_operator>
> | <less_than_or_equals_operator>
> | <greater_than_or_equals_operator>
>
> <comparison_predicate> ::= <value_expression> <comp_operator>
> <value_expression>
>
> <concatenation> ::=
> <character_value_expression> <concatenation_operator>
> <character_factor>
>
> <concatenation_operator> ::= ||
>
> <contains_function> ::=
> CONTAINS <left_paren> <geometry>
> <comma> <geometry> <right_paren>
>
> <coordinates> ::= <coord_lon> <comma> <coord_lat>
>
> <coord_lat> ::= <numeric_value_expression>
> !! generic latitude
>
> <coord_lon> ::= <numeric_value_expression>
> !! generic longitude
>
> <coord_sys> ::= <string_value_expression>
>
> <correlation_name> ::= <identifier>
>
> <correlation_specification> ::= [ AS ] <correlation_name>
>
> <default_function_prefix> ::=
> !! The prefix is set by default to "udf_."
> !! It should be possible to change the default prefix to accommodate
> local preferences
>
> <delimited_identifier> ::= <double_quote>
> <delimited_identifier_body> <double_quote>
>
> <delimited_identifier_body> ::= <delimited_identifier_part>?
>
> <delimited_identifier_part> ::= <nondoublequote_character> |
> <doublequote_symbol>
>
> <delimiter_token> ::=
> <character_string_literal>
> | <delimited_identifier>
> | <ADQL_special_character>
> | <SQL_special_character>
> | <not_equals_operator>
> | <greater_than_or_equals_operator>
> | <less_than_or_equals_operator>
> | <concatenation_operator>
> | <double_period>
> | <left_bracket>
> | <right_bracket>
>
> <derived_column> ::= <value_expression> [ <as_clause> ]
>
> <derived_table> ::= <table_subquery>
>
> <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
>
> <distance_function> ::
> DISTANCE <left_paren> <point> <comma> <point> <right_paren>
>
> <double_period> ::= ..
>
> <double_quote> ::= "
>
> <double_quote_symbol> ::= <double_quote><double_quote>
>
> <equals_operator> ::= =
>
> <exact_numeric_literal> ::=
> <unsigned_integer> [ <period> [ <unsigned_integer> ] ]
> | <period> <unsigned_integer>
>
> <exists_predicate> ::= EXISTS <table_subquery>
>
> <exponent> ::= <signed_integer>
>
> <factor> ::= [ <sign> ] <numeric_primary>
>
> <from_clause> ::= FROM <table_reference> [ { <comma>
> <table_reference> }... ]
>
> <general_literal> ::= <character_string_literal>
>
> <general_set_function> ::=
> <set_function_type> <left_paren> [ <set_quantifier> ]
> <value_expression> <right_paren>
>
> <geometry> ::= <point> | <circle> | <rectangle> | <polygon>
>
> <greater_than_operator> ::= >
>
> <greater_than_or_equals_operator> ::= >=
>
> <group_by_clause> ::= GROUP BY <grouping_column_reference_list>
>
> <grouping_column_reference> ::= <column_reference>
>
> <grouping_column_reference_list> ::=
> <grouping_column_reference> [ { <comma>
> <grouping_column_reference> }... ]
>
> <having_clause> ::= HAVING <search_condition>
>
> <identifier> ::= <regular_identifier> | <delimited_identifier>
>
> <in_predicate> ::= <value_expression> [ NOT ] IN <in_predicate_value>
>
> <in_predicate_value> ::=
> <table_subquery> | <left_paren> <in_value_list> <right_paren>
>
> <in_value_list> ::=
> <value_expression> { <comma> <value_expression> } ...
>
> <intersects_function> ::=
> INTERSECTS <left_paren> <geometry>
> <comma> <geometry> <right_paren>
>
> <join_column_list> ::= <column_name_list>
>
> <join_condition> ::= ON <search_condition>
>
> <join_specification> ::= <join_condition> | <named_columns_join>
>
> <join_type> ::=
> INNER
> | <outer_join_type> [ OUTER ]
>
> <joined_table> ::=
> <qualified_join>
> | <left_paren> <joined_table> <right_paren>
>
> <keyword> ::= <SQL_reserved_word> | <ADQL_reserved_word>
>
> <left_bracket> ::= [
>
> <left_paren> ::= (
>
> <less_than_operator> ::= <
>
> <less_than_or_equals_operator> ::= <=
>
> <like_predicate> ::=
> <match_value> [ NOT ] LIKE <pattern>
>
> <mantissa> ::= <exact_numeric_literal>
>
> <match_value> ::= <character_value_expression>
>
> <math_function> ::=
> ABS <left_paren> <numeric_value_expression> <right_paren>
> | CEILING <left_paren> <numeric_value_expression> <right_paren>
> | DEGREES <left_paren> <numeric_value_expression> <right_paren>
> | EXP <left_paren> <numeric_value_expression> <right_paren>
> | FLOOR <left_paren> <numeric_value_expression> <right_paren>
> | LOG <left_paren> <numeric_value_expression> <right_paren>
> | PI <left_paren><right_paren>
> | POWER <left_paren> <numeric_value_expression> <comma>
> <unsigned_integer> <right_paren>
> | RADIANS <left_paren> <numeric_value_expression> <right_paren>
> | SQUARE <left_paren> <numeric_value_expression> <right_paren>
> | SQRT <left_paren> <numeric_value_expression> <right_paren>
> | LOG10 <left_paren> <numeric_value_expression> <right_paren>
> | RAND <left_paren> [ <numeric_value_expression> ] <right_paren>
> | ROUND <left_paren> <numeric_value_expression> <right_paren>
> | TRUNCATE <left_paren> <numeric_value_expression> <right_paren>
>
> <minus_sign> ::= -
>
> <named_columns_join> ::= USING <left_paren> <join_column_list>
> <right_paren>
>
> <newline> ::= !! implementation defined end of line indicator
>
> <nondelimiter_token> ::=
> <regular_identifier>
> | <keyword>
> | <unsigned_numeric_literal>
>
> <nondoublequote_character> ::= !! See syntax rules
>
> <nonquote_character> ::= !! One ASCII character
>
> <not_equals_operator> ::= <not_equals_operator1> |
> <not_equals_operator2>
>
> <not_equals_operator1> ::= <>
>
> <not_equals_operator2> ::= !=
>
> <null_predicate> ::= <column_reference> IS [ NOT ] NULL
>
> <numeric_primary> ::= <value_expression_primary> |
> <numeric_value_function>
>
> <numeric_value_expression> ::=
> <term>
> | <numeric_value_expression> <plus_sign> <term>
> | <numeric_value_expression> <minus_sign> <term>
>
> <numeric_value_function> ::=
> <trigonometric_function>
> | <math_function>
> | <user_defined_function>
> | <system_defined_function>
>
> <order_by_clause> ::= ORDER BY <sort_specification_list>
>
> <ordering_specification> ::= ASC | DESC
>
> <outer_join_type> ::= LEFT | RIGHT | FULL
>
> <pattern> ::= <character_value_expression>
>
> <percent> ::= %
>
> <period> ::= .
>
> <plus_sign> ::= +
>
> <polygon> ::=
> POLYGON <left_paren>
> <coordsys> <comma>
> <coordinates> <comma> <coordinates> <comma> <coordinates>
> { <comma> <coordinates> } ?
> <right_paren>
>
> <point> ::=
> POINT <left_paren>
> <coord_sys> <comma> <coordinates>
> <right_paren>
>
> <predicate> ::=
> <comparison_predicate>
> | <between_predicate>
> | <in_predicate>
> | <like_predicate>
> | <null_predicate>
> | <exists_predicate>
>
> <qualified_join> ::=
> <table_reference> [ NATURAL ] [ <join_type> ] JOIN
> <table_reference> [ <join_specification> ]
>
> <qualifier> ::= <table_name> | <correlation_name>
>
> <query_expression> ::=
> <query_specification>
> | <joined_table>
>
> <query_specification> ::=
> SELECT [ <set_quantifier> ] [ <set_limit> ] <select_list>
> <table_expression>
>
> <question_mark> ::= ?
>
> <quote> ::= '
>
> <quote_symbol> ::= <quote> <quote>
>
> <radius> ::= <numeric_value_expression>
>
> <rectangle> ::=
> RECTANGLE <left_paren>
> <coord_sys> <comma>
> <coordinates> <comma> <coordinates>
> <right_paren>
>
> <region_function> ::= <contains_function> | <intersects_function>
> !! other functions could fit here: Equals, Disjoint, Touches,
> Crosses, Within, Overlaps, Relate
>
> <regular_identifier> ::=
> <simple_Latin_letter>... [ { <underscore> | <simple_Latin_letter>
> | <digit> } ... ]
>
> <right_bracket> ::= ]
>
> <right_paren> ::= )
>
> <schema_name> ::= [ <catalog_name> <period> ]
> <unqualified_schema_name>
>
> <search_condition> ::=
> <boolean_term>
> | <search_condition> OR <boolean_term>
>
> <select_list> ::=
> <asterisk>
> | <select_sublist> [ { <comma> <select_sublist> }... ]
>
> <select_sublist> ::= <derived_column> | <qualifier> <period>
> <asterisk>
>
> <semicolon> ::= ;
>
> <separator> ::= { <comment> | <space> | <newline> }...
>
> <set_function_specification> ::=
> COUNT <left_paren> <asterisk> <right_paren>
> | <general_set_function>
>
> <set_function_type> ::= AVG | MAX | MIN | SUM | COUNT
>
> <set_limit> ::= TOP <unsigned_integer>
>
> <set_quantifier> ::= DISTINCT | ALL
>
> <sign> ::= <plus_sign> | <minus_sign>
>
> <signed_integer> ::= [ <sign> ] <unsigned_integer>
>
> <simple_Latin_letter> ::=
> <simple_Latin_upper_case_letter>
> | <simple_Latin_lower_case_letter>
>
> <simple_Latin_lower_case_letter> ::=
> a | b | c | d | e | f | g | h | i | j | k | l | m | n
> | o | p | q | r | s | t | u | v | w | x | y | z
>
> <simple_Latin_upper_case_letter> ::=
> A | B | C | D | E | F | G | H | I | J | K | L | M | N
> | O | P | Q | R | S | T | U | V | W | X | Y | Z
>
> <solidus> ::= /
>
> <sort_key> ::= <column_name> | <unsigned_integer>
>
> <sort_specification> ::= <sort_key> [ <ordering_specification> ]
>
> <sort_specification_list> ::= <sort_specification> [ { <comma>
> <sort_specification> }... ]
>
> <space> ::= !! space character here
>
> <string_value_expression> ::= <character_value_expression>
>
> <subquery> ::=
> <left_paren> <query_expression> <right_paren>
>
> <system_defined_function> ::= <distance_function> | <region_function>
> !! others could fit here
>
> <table_expression> ::=
> <from_clause>
> [ <where_clause> ]
> [ <group_by_clause> ]
> [ <having_clause> ]
> [ <order_by_clause> ]
>
> <table_name> ::= [ <schema_name> <period> ] <identifier>
>
> <table_reference> ::=
> <table_name> [ <correlation_specification> ]
> | <derived_table> <correlation specification>
> | <joined_table>
>
> <table_subquery> ::= <subquery>
>
> <term> ::=
> <factor>
> | <term> <asterisk> <factor>
> | <term> <solidus> <factor>
>
> <token> ::=
> <nondelimiter_token>
> | <delimiter_token>
>
> <trigonometric_function> ::=
> ACOS <left_paren> <numeric_value_expression> <right_paren>
> | ASIN <left_paren> <numeric_value_expression> <right_paren>
> | ATAN <left_paren> <numeric_value_expression> <right_paren>
> | ATAN2 <left_paren> <numeric_value_expression> <comma>
> <numeric_value_expression> <right_paren>
> | COS <left_paren> <numeric_value_expression> <right_paren>
> | COT <left_paren> <numeric_value_expression> <right_paren>
> | SIN <left_paren> <numeric_value_expression> <right_paren>
> | TAN <left_paren> <numeric_value_expression> <right_paren>
>
> <underscore> ::= _
>
> <unqualified_schema_name> ::= <identifier>
>
> <unsigned_integer> ::= <digit> ...
>
> <unsigned_literal> ::= <unsigned_numeric_literal> | <general_literal>
>
> <unsigned_numeric literal> ::=
> <exact_numeric_literal>
> | <approximate_numeric_literal>
>
> <unsigned_value_specification> ::= <unsigned_literal>
>
> <user_defined_function> ::=
> <user_defined_function_name>
> <left_paren>
> [ <user_defined_function_param> [ { <comma>
> <user_defined_function_param> } ?] ]
> <right_paren>
>
> <user_defined_function_name> ::=
> [ <default_function_prefix> ] <regular_identifier>
>
> <user_defined_function_param> ::=
> <numeric_value_expression> | <character_value_expression>
>
> <value_expression> ::=
> <numeric_value_expression>
> | <string_value_expression>
>
> <value_expression_primary> ::=
> <unsigned_value_specification>
> | <column_reference>
> | <set_function_specification>
> | <left_paren> <value_expression> <right_paren>
>
> <vertical_bar> ::= |
>
> <where_clause> ::= WHERE <search_condition>
>
> _________________________________________
> Pedro Osuna Alcalaya
>
> European Space Agency (ESA)
> European Space Astronomy Centre (ESAC)
> Science Operations Department (SCI-O)
> Science Archives and Computer Support Engineering Unit (SCI-OE)
> e-mail: Pedro.Osuna-at-esa.int
> Tel + 34 91 813 13 14 Fax: +34 91 813 11 72
> _________________________________________
> European Space Astronomy Centre (ESAC)
> P.O. Box 78
> E-28691 Villanueva de la Caņada
> MADRID - SPAIN
>
>
>
>
European Space Agency (ESA)
European Space Astronomy Centre (ESAC)
Science Operations Department (SCI-O)
Science Archives and Computer Support Engineering Unit (SCI-OE)
e-mail: Pedro.Osuna-at-esa.int
Tel + 34 91 813 13 14 Fax: +34 91 813 11 72