User: obo Date: 2006/07/10 07:38:24 Modified: dba/connectivity/source/parse/sqlbison.y
Log: INTEGRATION: CWS qiq (1.51.168); FILE MERGED 2006/06/30 13:20:41 fs 1.51.168.7: #i51143# ERROR_CYCLIC_SUB_QUERIES 2006/06/28 07:39:19 fs 1.51.168.6: #i10000# 2006/06/27 15:10:14 fs 1.51.168.5: RESYNC: (1.51-1.52); FILE MERGED 2006/06/07 12:18:16 fs 1.51.168.4: #i51143# allow subqueries in FROM 2006/05/19 08:09:43 fs 1.51.168.3: #i51143# more error messages to be provided by a ParseContext 2006/05/16 20:11:48 fs 1.51.168.2: removed some dead (commented out) rule particle 2006/05/10 10:21:49 fs 1.51.168.1: #i51443# added conversion from scanner's rule-ID to Rule enum File Changes: Directory: /dba/connectivity/source/parse/ ========================================== File [changed]: sqlbison.y Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/parse/sqlbison.y?r1=1.52&r2=1.53 Delta lines: +39 -219 ---------------------- --- sqlbison.y 20 Jun 2006 02:08:26 -0000 1.52 +++ sqlbison.y 10 Jul 2006 14:38:22 -0000 1.53 @@ -941,7 +941,7 @@ table_ref {$$ = SQL_NEW_COMMALISTRULE; $$->append($1);} - | table_ref_commalist ',' table_ref /*[^SQL_TOKEN_CROSS SQL_TOKEN_FULL SQL_TOKEN_UNION SQL_TOKEN_LEFT SQL_TOKEN_RIGHT SQL_TOKEN_INNER SQL_TOKEN_NATURAL]*/ + | table_ref_commalist ',' table_ref {$1->append($3); $$ = $1;} ; @@ -985,6 +985,13 @@ $$->append($3); $$->append($4 = newNode("}", SQL_NODE_PUNCTUATION)); } + | subquery as range_variable + { + $$ = SQL_NEW_RULE; + $$->append($1); + $$->append($2); + $$->append($3); + } ; where_clause: SQL_TOKEN_WHERE search_condition @@ -2875,33 +2882,7 @@ SQL_TOKEN_NAME {$$ = SQL_NEW_RULE; $$->append($1);} -/* | SQL_TOKEN_NAME '.' SQL_TOKEN_NAME %prec SQL_TOKEN_NAME - {$$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2 = newNode(".", SQL_NODE_PUNCTUATION)); - $$->append($3);} - | SQL_TOKEN_NAME '.' SQL_TOKEN_NAME '.' SQL_TOKEN_NAME %prec SQL_TOKEN_NAME - {$$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2= newNode(".", SQL_NODE_PUNCTUATION)); - $$->append($3); - $$->append($4 = newNode(".", SQL_NODE_PUNCTUATION)); - $$->append($5);} - | SQL_TOKEN_NAME ':' SQL_TOKEN_NAME '.' SQL_TOKEN_NAME - {$$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2= newNode(":", SQL_NODE_PUNCTUATION)); - $$->append($3); - $$->append($4 = newNode(".", SQL_NODE_PUNCTUATION)); - $$->append($5);} -/* | SQL_TOKEN_NAME ';' SQL_TOKEN_NAME '.' SQL_TOKEN_NAME - {$$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2= newNode(";", SQL_NODE_PUNCTUATION)); - $$->append($3); - $$->append($4 = newNode(".", SQL_NODE_PUNCTUATION)); - $$->append($5);} -*/ ; +; /* Columns */ column_ref: column @@ -3131,16 +3112,19 @@ IMPLEMENT_CONSTASCII_STRING(ERROR_STR_GENERAL, "Syntax error in SQL expression"); IMPLEMENT_CONSTASCII_STRING(ERROR_STR_GENERAL_HINT, "in front of \"#\" expression." ); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_VALUE_NO_LIKE, "The value # can not be used with LIKE!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_FIELD_NO_LIKE, "LIKE can not be used with this field!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_COMPARE, "The entered criterion can not be compared with this field!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_STRING_COMPARE, "The field can not be compared with a string!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_DATE_COMPARE, "The field can not be compared with a date!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_REAL_COMPARE, "The field can not be compared with a floating point number!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_INT_COMPARE, "The field can not be compared with a number!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_TABLE, "The table \"#\" is unknown in the database!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_COLUMN, "The column \"#\" is unknown in the table \"#\"!"); -IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_TABLE_EXIST, "The table or view \"#\" is already in the database!"); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_VALUE_NO_LIKE, "The value # can not be used with LIKE."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_FIELD_NO_LIKE, "LIKE can not be used with this field."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_COMPARE, "The entered criterion can not be compared with this field."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_STRING_COMPARE, "The field can not be compared with a string."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_DATE_COMPARE, "The field can not be compared with a date."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_REAL_COMPARE, "The field can not be compared with a floating point number."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_INT_COMPARE, "The field can not be compared with a number."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_TABLE, "The database does not contain a table named \"#\"."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_TABLE_OR_QUERY, "The database does contain neither a table nor a query named \"#\"."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_COLUMN, "The column \"#\" is unknown in the table \"#\"."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_TABLE_EXIST, "The database already contains a table or view with name \"#\"."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_INVALID_QUERY_EXIST, "The database already contains a query with name \"#\"."); +IMPLEMENT_CONSTASCII_STRING(ERROR_STR_CYCLIC_SUB_QUERIES, "The statement contains a cyclic reference to one or more sub queries."); IMPLEMENT_CONSTASCII_STRING(KEY_STR_LIKE, "LIKE"); IMPLEMENT_CONSTASCII_STRING(KEY_STR_NOT, "NOT"); @@ -3190,7 +3174,11 @@ case ERROR_INVALID_DATE_COMPARE: aMsg = ERROR_STR_INVALID_DATE_COMPARE; break; case ERROR_INVALID_REAL_COMPARE: aMsg = ERROR_STR_INVALID_REAL_COMPARE; break; case ERROR_INVALID_TABLE: aMsg = ERROR_STR_INVALID_TABLE; break; + case ERROR_INVALID_TABLE_OR_QUERY: aMsg = ERROR_STR_INVALID_TABLE_OR_QUERY; break; case ERROR_INVALID_COLUMN: aMsg = ERROR_STR_INVALID_COLUMN; break; + case ERROR_INVALID_TABLE_EXIST: aMsg = ERROR_STR_INVALID_TABLE_EXIST; break; + case ERROR_INVALID_QUERY_EXIST: aMsg = ERROR_STR_INVALID_QUERY_EXIST; break; + case ERROR_CYCLIC_SUB_QUERIES: aMsg = ERROR_STR_CYCLIC_SUB_QUERIES; break; default: OSL_ENSURE( false, "OParseContext::getErrorMessage: unknown error code!" ); break; @@ -3329,6 +3317,7 @@ //========================================================================== sal_uInt32 OSQLParser::s_nRuleIDs[OSQLParseNode::rule_count + 1]; +OSQLParser::RuleIDMap OSQLParser::s_aReverseRuleIDLookup; OParseContext OSQLParser::s_aDefaultContext; sal_Int32 OSQLParser::s_nRefCount = 0; @@ -3357,6 +3346,9 @@ s_pGarbageCollector = NULL; // is only set the first time so we should delete it only when there no more instances s_xLocaleData = NULL; + + RuleIDMap aEmpty; + s_aReverseRuleIDLookup.swap( aEmpty ); } m_pParseTree = NULL; } @@ -3496,7 +3488,7 @@ //----------------------------------------------------------------------------- sal_uInt32 OSQLParser::StrToRuleID(const ::rtl::OString & rValue) { - // In yysvar nach dem angegebenen Namen suchen, den ::com::sun::star::sdbcx::Index zurueckliefern + // In yysvar nach dem angegebenen Namen suchen, den Index zurueckliefern // (oder 0, wenn nicht gefunden) static sal_uInt32 nLen = sizeof(yytname)/sizeof(yytname[0]); for (sal_uInt32 i = YYTRANSLATE(SQL_TOKEN_INVALIDSYMBOL); i < (nLen-1); i++) @@ -3510,186 +3502,14 @@ } //----------------------------------------------------------------------------- +OSQLParseNode::Rule OSQLParser::RuleIDToRule( sal_uInt32 _nRule ) +{ + return s_aReverseRuleIDLookup[ _nRule ]; +} + +//----------------------------------------------------------------------------- sal_uInt32 OSQLParser::RuleID(OSQLParseNode::Rule eRule) { - if (!s_nRuleIDs[eRule]) - { - switch (eRule) - { - case OSQLParseNode::select_statement: - s_nRuleIDs[eRule] = StrToRuleID("select_statement"); break; - case OSQLParseNode::from_clause: - s_nRuleIDs[eRule] = StrToRuleID("from_clause"); break; - case OSQLParseNode::table_ref_commalist: - s_nRuleIDs[eRule] = StrToRuleID("table_ref_commalist"); break; - case OSQLParseNode::table_exp: - s_nRuleIDs[eRule] = StrToRuleID("table_exp"); break; - case OSQLParseNode::table_ref: - s_nRuleIDs[eRule] = StrToRuleID("table_ref"); break; - case OSQLParseNode::catalog_name: - s_nRuleIDs[eRule] = StrToRuleID("catalog_name"); break; - case OSQLParseNode::schema_name: - s_nRuleIDs[eRule] = StrToRuleID("schema_name"); break; - case OSQLParseNode::table_name: - s_nRuleIDs[eRule] = StrToRuleID("table_name"); break; - case OSQLParseNode::opt_column_commalist: - s_nRuleIDs[eRule] = StrToRuleID("opt_column_commalist"); break; - case OSQLParseNode::column_commalist: - s_nRuleIDs[eRule] = StrToRuleID("column_commalist"); break; - case OSQLParseNode::column_ref_commalist: - s_nRuleIDs[eRule] = StrToRuleID("column_ref_commalist"); break; - case OSQLParseNode::column_ref: - s_nRuleIDs[eRule] = StrToRuleID("column_ref"); break; - case OSQLParseNode::opt_order_by_clause: - s_nRuleIDs[eRule] = StrToRuleID("opt_order_by_clause"); break; - case OSQLParseNode::ordering_spec_commalist: - s_nRuleIDs[eRule] = StrToRuleID("ordering_spec_commalist"); break; - case OSQLParseNode::ordering_spec: - s_nRuleIDs[eRule] = StrToRuleID("ordering_spec"); break; - case OSQLParseNode::opt_asc_desc: - s_nRuleIDs[eRule] = StrToRuleID("opt_asc_desc"); break; - case OSQLParseNode::where_clause: - s_nRuleIDs[eRule] = StrToRuleID("where_clause"); break; - case OSQLParseNode::opt_where_clause: - s_nRuleIDs[eRule] = StrToRuleID("opt_where_clause"); break; - case OSQLParseNode::search_condition: - s_nRuleIDs[eRule] = StrToRuleID("search_condition"); break; - case OSQLParseNode::comparison_predicate: - s_nRuleIDs[eRule] = StrToRuleID("comparison_predicate"); break; - case OSQLParseNode::between_predicate: - s_nRuleIDs[eRule] = StrToRuleID("between_predicate"); break; - case OSQLParseNode::like_predicate: - s_nRuleIDs[eRule] = StrToRuleID("like_predicate"); break; - case OSQLParseNode::opt_escape: - s_nRuleIDs[eRule] = StrToRuleID("opt_escape"); break; - case OSQLParseNode::test_for_null: - s_nRuleIDs[eRule] = StrToRuleID("test_for_null"); break; - case OSQLParseNode::scalar_exp_commalist: - s_nRuleIDs[eRule] = StrToRuleID("scalar_exp_commalist"); break; - case OSQLParseNode::scalar_exp: - s_nRuleIDs[eRule] = StrToRuleID("scalar_exp"); break; - case OSQLParseNode::parameter_ref: - s_nRuleIDs[eRule] = StrToRuleID("parameter_ref"); break; - case OSQLParseNode::parameter: - s_nRuleIDs[eRule] = StrToRuleID("parameter"); break; - case OSQLParseNode::general_set_fct: - s_nRuleIDs[eRule] = StrToRuleID("general_set_fct"); break; - case OSQLParseNode::range_variable: - s_nRuleIDs[eRule] = StrToRuleID("range_variable"); break; - case OSQLParseNode::column: - s_nRuleIDs[eRule] = StrToRuleID("column"); break; -// case OSQLParseNode::delete_statement_positioned: -// s_nRuleIDs[eRule] = StrToRuleID("delete_statement_positioned"); break; - case OSQLParseNode::delete_statement_searched: - s_nRuleIDs[eRule] = StrToRuleID("delete_statement_searched"); break; -// case OSQLParseNode::update_statement_positioned: -// s_nRuleIDs[eRule] = StrToRuleID("update_statement_positioned"); break; - case OSQLParseNode::update_statement_searched: - s_nRuleIDs[eRule] = StrToRuleID("update_statement_searched"); break; - case OSQLParseNode::assignment_commalist: - s_nRuleIDs[eRule] = StrToRuleID("assignment_commalist"); break; - case OSQLParseNode::assignment: - s_nRuleIDs[eRule] = StrToRuleID("assignment"); break; - case OSQLParseNode::values_or_query_spec: - s_nRuleIDs[eRule] = StrToRuleID("values_or_query_spec"); break; - case OSQLParseNode::insert_statement: - s_nRuleIDs[eRule] = StrToRuleID("insert_statement"); break; - case OSQLParseNode::insert_atom_commalist: - s_nRuleIDs[eRule] = StrToRuleID("insert_atom_commalist"); break; - case OSQLParseNode::insert_atom: - s_nRuleIDs[eRule] = StrToRuleID("insert_atom"); break; - case OSQLParseNode::predicate_check: - s_nRuleIDs[eRule] = StrToRuleID("predicate_check"); break; - case OSQLParseNode::qualified_join: - s_nRuleIDs[eRule] = StrToRuleID("qualified_join"); break; - case OSQLParseNode::cross_union: - s_nRuleIDs[eRule] = StrToRuleID("cross_union"); break; - case OSQLParseNode::select_sublist: - s_nRuleIDs[eRule] = StrToRuleID("select_sublist"); break; - case OSQLParseNode::derived_column: - s_nRuleIDs[eRule] = StrToRuleID("derived_column"); break; - case OSQLParseNode::column_val: - s_nRuleIDs[eRule] = StrToRuleID("column_val"); break; - case OSQLParseNode::set_fct_spec: - s_nRuleIDs[eRule] = StrToRuleID("set_fct_spec"); break; - case OSQLParseNode::boolean_term: - s_nRuleIDs[eRule] = StrToRuleID("boolean_term"); break; - case OSQLParseNode::boolean_primary: - s_nRuleIDs[eRule] = StrToRuleID("boolean_primary"); break; - case OSQLParseNode::num_value_exp: - s_nRuleIDs[eRule] = StrToRuleID("num_value_exp"); break; - case OSQLParseNode::join_type: - s_nRuleIDs[eRule] = StrToRuleID("join_type"); break; - case OSQLParseNode::position_exp: - s_nRuleIDs[eRule] = StrToRuleID("position_exp"); break; - case OSQLParseNode::extract_exp: - s_nRuleIDs[eRule] = StrToRuleID("extract_exp"); break; - case OSQLParseNode::length_exp: - s_nRuleIDs[eRule] = StrToRuleID("length_exp"); break; - case OSQLParseNode::char_value_fct: - s_nRuleIDs[eRule] = StrToRuleID("char_value_fct"); break; - case OSQLParseNode::odbc_call_spec: - s_nRuleIDs[eRule] = StrToRuleID("odbc_call_spec"); break; - case OSQLParseNode::in_predicate: - s_nRuleIDs[eRule] = StrToRuleID("in_predicate"); break; - case OSQLParseNode::existence_test: - s_nRuleIDs[eRule] = StrToRuleID("existence_test"); break; - case OSQLParseNode::unique_test: - s_nRuleIDs[eRule] = StrToRuleID("unique_test"); break; - case OSQLParseNode::all_or_any_predicate: - s_nRuleIDs[eRule] = StrToRuleID("all_or_any_predicate"); break; - case OSQLParseNode::named_columns_join: - s_nRuleIDs[eRule] = StrToRuleID("named_columns_join"); break; - case OSQLParseNode::join_condition: - s_nRuleIDs[eRule] = StrToRuleID("join_condition"); break; - case OSQLParseNode::joined_table: - s_nRuleIDs[eRule] = StrToRuleID("joined_table"); break; - case OSQLParseNode::boolean_factor: - s_nRuleIDs[eRule] = StrToRuleID("boolean_factor"); break; - case OSQLParseNode::factor: - s_nRuleIDs[eRule] = StrToRuleID("factor"); break; - case OSQLParseNode::sql_not: - s_nRuleIDs[eRule] = StrToRuleID("not"); break; - case OSQLParseNode::boolean_test: - s_nRuleIDs[eRule] = StrToRuleID("boolean_test"); break; - case OSQLParseNode::manipulative_statement: - s_nRuleIDs[eRule] = StrToRuleID("manipulative_statement"); break; - case OSQLParseNode::subquery: - s_nRuleIDs[eRule] = StrToRuleID("subquery"); break; - case OSQLParseNode::value_exp_commalist: - s_nRuleIDs[eRule] = StrToRuleID("value_exp_commalist"); break; - case OSQLParseNode::odbc_fct_spec: - s_nRuleIDs[eRule] = StrToRuleID("odbc_fct_spec"); break; - case OSQLParseNode::union_statement: - s_nRuleIDs[eRule] = StrToRuleID("union_statement"); break; - case OSQLParseNode::outer_join_type: - s_nRuleIDs[eRule] = StrToRuleID("outer_join_type"); break; - case OSQLParseNode::char_value_exp: - s_nRuleIDs[eRule] = StrToRuleID("char_value_exp"); break; - case OSQLParseNode::term: - s_nRuleIDs[eRule] = StrToRuleID("term"); break; - case OSQLParseNode::value_exp_primary: - s_nRuleIDs[eRule] = StrToRuleID("value_exp_primary"); break; - case OSQLParseNode::value_exp: - s_nRuleIDs[eRule] = StrToRuleID("value_exp"); break; - case OSQLParseNode::fold: - s_nRuleIDs[eRule] = StrToRuleID("fold"); break; - case OSQLParseNode::char_substring_fct: - s_nRuleIDs[eRule] = StrToRuleID("char_substring_fct"); break; - case OSQLParseNode::selection: - s_nRuleIDs[eRule] = StrToRuleID("selection"); break; - case OSQLParseNode::base_table_def: - s_nRuleIDs[eRule] = StrToRuleID("base_table_def"); break; - case OSQLParseNode::base_table_element_commalist: - s_nRuleIDs[eRule] = StrToRuleID("base_table_element_commalist"); break; - case OSQLParseNode::data_type: - s_nRuleIDs[eRule] = StrToRuleID("data_type"); break; - case OSQLParseNode::column_def: - s_nRuleIDs[eRule] = StrToRuleID("column_def"); break; - default: - OSL_ENSURE(0,"interner Fehler: Regel nicht bekannt, in OSQLParser::RuleID nachtragen!"); - } - } return s_nRuleIDs[(sal_uInt16)eRule]; } // ------------------------------------------------------------------------- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
