Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
///////////////////////////////////////////////////////////////////////////// // // Provider SQL Level 1 Syntax (LL1) // // 21-Jun-96 Created // 01-Jul-96 Instrinsic functions on constants // // Simple SQL subset for unary queries to be implemented within individual // providers. // /////////////////////////////////////////////////////////////////////////////
<parse> ::= SELECT <prop_list> FROM <class_name> <opt_where>;
<opt_where> ::= WHERE <expr>; <opt_where> ::= <>;
<prop_list> ::= <property_name> <prop_list_2>; <prop_list_2> ::= COMMA <prop_list>; <prop_list_2> ::= <>;
<property_name> ::= IDENTIFIER; <property_name> ::= ASTERISK; <class_name> ::= IDENTIFIER;
// Subexpression nesting. This particular sequence gives // a series of AND clauses precedence over OR clauses.
<expr> ::= <term> <expr2>; <expr2> ::= OR <term> <expr2>; <expr2> ::= <>;
<term> ::= <simple_expr> <term2>; <term2> ::= AND <simple_expr> <term2>; <term2> ::= <>;
// Simple expression types. // ========================
<simple_expr> ::= NOT <expr>; <simple_expr> ::= OPEN_PAREN <expr> CLOSE_PAREN; <simple_expr> ::= IDENTIFIER <leading_ident_expr> <finalize>; <simple_expr> ::= VARIANT <rel_operator> <trailing_prop_expr> <finalize>;
<trailing_prop_expr> ::= IDENTIFIER <trailing_prop_expr2>; <trailing_prop_expr2> ::= OPEN_PAREN IDENTIFIER CLOSE_PAREN; <trailing_prop_expr2> ::= <>;
<leading_ident_expr> ::= OPEN_PAREN <unknown_func_expr>; <leading_ident_expr> ::= <comp_operator> <trailing_const_expr>; <leading_ident_expr> ::= <equiv_operator> <trailing_or_null>; <leading_ident_expr> ::= <is_operator> NULL;
<unknown_func_expr> ::= IDENTIFIER CLOSE_PAREN <rel_operator> <trailing_const_expr>; <unknown_func_expr> ::= <typed_constant> CLOSE_PAREN <rel_operator> <trailing_prop_expr>;
<trailing_or_null> ::= NULL; <trailing_or_null> ::= <trailing_const_expr>; <trailing_or_null> ::= <trailing_prop_expr>;
<trailing_const_expr> ::= <typed_constant>; <trailing_const_expr> ::= IDENTIFIER OPEN_PAREN <typed_constant> CLOSE_PAREN;
<typed_constant> ::= VARIANT; // VT_R8, VT_I4, VT_BSTR
<finalize> ::= <>; // This is just a semantic production in the parser to allow // all the important code to be located in one place.
<rel_operator> ::= <equiv_operator>; <rel_operator> ::= <comp_operator>;
<equiv_operator> ::= EQUIVALENT_OPERATOR; // =, != <comp_operator> ::= COMPARE_OPERATOR; // <=, >=, <, >, like <is_operator> ::= ISNOT_OPERATOR; // IS, IS NOT
|