diff options
author | unknown <hf@deer.(none)> | 2004-01-23 20:00:10 +0400 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2004-01-23 20:00:10 +0400 |
commit | a6132c6f0a742d04f0c0252f83be8b356507c9a6 (patch) | |
tree | 49de7fcd3c746734425c8deed43728660a8047dc /sql/sql_yacc.yy | |
parent | 2320323a344759567d702b257fb965646e6d8e7a (diff) | |
parent | 87b3ca5fe0f66b0d7546b6175d8b1d50d6d3a838 (diff) | |
download | mariadb-git-a6132c6f0a742d04f0c0252f83be8b356507c9a6.tar.gz |
Conflicts resolved
sql/field.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.cc:
Auto merged
include/mysqld_error.h:
merging
sql/share/english/errmsg.txt:
merging
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r-- | sql/sql_yacc.yy | 269 |
1 files changed, 174 insertions, 95 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 5ab53a1b934..02a677038cb 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -611,7 +611,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); udf_type if_exists opt_local opt_table_options table_options table_option opt_if_not_exists opt_no_write_to_binlog opt_var_type opt_var_ident_type delete_option opt_temporary all_or_any opt_distinct - opt_ignore_leaves fulltext_options + opt_ignore_leaves fulltext_options spatial_type %type <ulong_num> ULONG_NUM raid_types merge_insert_types @@ -628,7 +628,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); table_wild no_in_expr expr_expr simple_expr no_and_expr using_list expr_or_default set_expr_or_default interval_expr param_marker singlerow_subselect singlerow_subselect_init - exists_subselect exists_subselect_init + exists_subselect exists_subselect_init geometry_function signed_literal NUM_literal %type <item_list> @@ -1297,30 +1297,19 @@ type: $$=FIELD_TYPE_TINY_BLOB; } | BLOB_SYM opt_len { Lex->charset=&my_charset_bin; $$=FIELD_TYPE_BLOB; } - | GEOMETRY_SYM { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_GEOMETRY; - $$=FIELD_TYPE_GEOMETRY; } - | GEOMETRYCOLLECTION { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_GEOMETRYCOLLECTION; - $$=FIELD_TYPE_GEOMETRY; } - | POINT_SYM { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_POINT; - $$=FIELD_TYPE_GEOMETRY; } - | MULTIPOINT { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_MULTIPOINT; - $$=FIELD_TYPE_GEOMETRY; } - | LINESTRING { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_LINESTRING; - $$=FIELD_TYPE_GEOMETRY; } - | MULTILINESTRING { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_MULTILINESTRING; - $$=FIELD_TYPE_GEOMETRY; } - | POLYGON { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_POLYGON; - $$=FIELD_TYPE_GEOMETRY; } - | MULTIPOLYGON { Lex->charset=&my_charset_bin; - Lex->uint_geom_type= (uint) Field::GEOM_MULTIPOLYGON; - $$=FIELD_TYPE_GEOMETRY; } + | spatial_type { +#ifdef HAVE_SPATIAL + Lex->charset=&my_charset_bin; + Lex->uint_geom_type= (uint)$1; + $$=FIELD_TYPE_GEOMETRY; +#else + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + sym_group_geom.name, + sym_group_geom.needed_define); + YYABORT; +#endif + } | MEDIUMBLOB { Lex->charset=&my_charset_bin; $$=FIELD_TYPE_MEDIUM_BLOB; } | LONGBLOB { Lex->charset=&my_charset_bin; @@ -1359,6 +1348,17 @@ type: } ; +spatial_type: + GEOMETRY_SYM { $$= Field::GEOM_GEOMETRY; } + | GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; } + | POINT_SYM { $$= Field::GEOM_POINT; } + | MULTIPOINT { $$= Field::GEOM_MULTIPOINT; } + | LINESTRING { $$= Field::GEOM_LINESTRING; } + | MULTILINESTRING { $$= Field::GEOM_MULTILINESTRING; } + | POLYGON { $$= Field::GEOM_POLYGON; } + | MULTIPOLYGON { $$= Field::GEOM_MULTIPOLYGON; } + ; + char: CHAR_SYM {} ; @@ -1589,20 +1589,32 @@ delete_option: key_type: key_or_index { $$= Key::MULTIPLE; } - | FULLTEXT_SYM { $$= Key::FULLTEXT; } - | FULLTEXT_SYM key_or_index { $$= Key::FULLTEXT; } - | SPATIAL_SYM { $$= Key::SPATIAL; } - | SPATIAL_SYM key_or_index { $$= Key::SPATIAL; }; + | FULLTEXT_SYM opt_key_or_index { $$= Key::FULLTEXT; } + | SPATIAL_SYM opt_key_or_index + { +#ifdef HAVE_SPATIAL + $$= Key::SPATIAL; +#else + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + sym_group_geom.name, sym_group_geom.needed_define); + YYABORT; +#endif + }; constraint_key_type: PRIMARY_SYM KEY_SYM { $$= Key::PRIMARY; } - | UNIQUE_SYM { $$= Key::UNIQUE; } - | UNIQUE_SYM key_or_index { $$= Key::UNIQUE; }; + | UNIQUE_SYM opt_key_or_index { $$= Key::UNIQUE; }; key_or_index: KEY_SYM {} | INDEX {}; +opt_key_or_index: + /* empty */ {} + | key_or_index + ; + opt_keys_or_index: /* empty */ {} | keys_or_index @@ -1617,7 +1629,17 @@ opt_unique_or_fulltext: /* empty */ { $$= Key::MULTIPLE; } | UNIQUE_SYM { $$= Key::UNIQUE; } | FULLTEXT_SYM { $$= Key::FULLTEXT;} - | SPATIAL_SYM { $$= Key::SPATIAL; } + | SPATIAL_SYM + { +#ifdef HAVE_SPATIAL + $$= Key::SPATIAL; +#else + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + sym_group_geom.name, sym_group_geom.needed_define); + YYABORT; +#endif + } ; key_alg: @@ -1627,7 +1649,10 @@ key_alg: opt_btree_or_rtree: BTREE_SYM { $$= HA_KEY_ALG_BTREE; } - | RTREE_SYM { $$= HA_KEY_ALG_RTREE; } + | RTREE_SYM + { + $$= HA_KEY_ALG_RTREE; + } | HASH_SYM { $$= HA_KEY_ALG_HASH; }; key_list: @@ -2556,13 +2581,53 @@ simple_expr: | VALUES '(' simple_ident ')' { $$= new Item_insert_value($3); } | FUNC_ARG0 '(' ')' - { $$= ((Item*(*)(void))($1.symbol->create_func))();} + { + if (!$1.symbol->create_func) + { + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + $1.symbol->group->name, + $1.symbol->group->needed_define); + YYABORT; + } + $$= ((Item*(*)(void))($1.symbol->create_func))(); + } | FUNC_ARG1 '(' expr ')' - { $$= ((Item*(*)(Item*))($1.symbol->create_func))($3);} + { + if (!$1.symbol->create_func) + { + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + $1.symbol->group->name, + $1.symbol->group->needed_define); + YYABORT; + } + $$= ((Item*(*)(Item*))($1.symbol->create_func))($3); + } | FUNC_ARG2 '(' expr ',' expr ')' - { $$= ((Item*(*)(Item*,Item*))($1.symbol->create_func))($3,$5);} + { + if (!$1.symbol->create_func) + { + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + $1.symbol->group->name, + $1.symbol->group->needed_define); + YYABORT; + } + $$= ((Item*(*)(Item*,Item*))($1.symbol->create_func))($3,$5); + } | FUNC_ARG3 '(' expr ',' expr ',' expr ')' - { $$= ((Item*(*)(Item*,Item*,Item*))($1.symbol->create_func))($3,$5,$7);} + { + if (!$1.symbol->create_func) + { + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + $1.symbol->group->name, + $1.symbol->group->needed_define); + YYABORT; + } + $$= ((Item*(*)(Item*,Item*,Item*))($1.symbol->create_func))($3,$5,$7); + } | ADDDATE_SYM '(' expr ',' expr ')' { $$= new Item_date_add_interval($3, $5, INTERVAL_DAY, 0);} | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' @@ -2645,18 +2710,17 @@ simple_expr: } | FIELD_FUNC '(' expr ',' expr_list ')' { $5->push_front($3); $$= new Item_func_field(*$5); } - | GEOMFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | GEOMFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } - | GEOMFROMWKB '(' expr ')' - { $$= new Item_func_geometry_from_wkb($3); } - | GEOMFROMWKB '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_wkb($3, $5); } - | GEOMETRYCOLLECTION '(' expr_list ')' - { $$= new Item_func_spatial_collection(* $3, - Geometry::wkbGeometryCollection, - Geometry::wkbPoint); } + | geometry_function + { +#ifdef HAVE_SPATIAL + $$= $1; +#else + net_printf(Lex->thd, ER_FEATURE_DISABLED, + ER(ER_FEATURE_DISABLED), + sym_group_geom.name, sym_group_geom.needed_define); + YYABORT; +#endif + } | GET_FORMAT '(' date_time_type ',' expr ')' { $$= new Item_func_get_format($3, $5); } | HOUR_SYM '(' expr ')' @@ -2690,17 +2754,10 @@ simple_expr: } | LEFT '(' expr ',' expr ')' { $$= new Item_func_left($3,$5); } - | LINESTRING '(' expr_list ')' - { $$= new Item_func_spatial_collection(* $3, - Geometry::wkbLineString, Geometry::wkbPoint); } | LOCATE '(' expr ',' expr ')' { $$= new Item_func_locate($5,$3); } | LOCATE '(' expr ',' expr ',' expr ')' { $$= new Item_func_locate($5,$3,$7); } - | GEOMCOLLFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | GEOMCOLLFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } | GREATEST_SYM '(' expr ',' expr_list ')' { $5->push_front($3); $$= new Item_func_max(*$5); } | LEAST_SYM '(' expr ',' expr_list ')' @@ -2709,10 +2766,6 @@ simple_expr: { $$= new Item_func_log($3); } | LOG_SYM '(' expr ',' expr ')' { $$= new Item_func_log($3, $5); } - | LINEFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | LINEFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } | MASTER_POS_WAIT '(' expr ',' expr ')' { $$= new Item_master_pos_wait($3, $5); @@ -2731,27 +2784,6 @@ simple_expr: { $$ = new Item_func_mod( $3, $5); } | MONTH_SYM '(' expr ')' { $$= new Item_func_month($3); } - | MULTILINESTRING '(' expr_list ')' - { $$= new Item_func_spatial_collection(* $3, - Geometry::wkbMultiLineString, Geometry::wkbLineString); } - | MLINEFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | MLINEFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } - | MPOINTFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | MPOINTFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } - | MPOLYFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | MPOLYFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } - | MULTIPOINT '(' expr_list ')' - { $$= new Item_func_spatial_collection(* $3, - Geometry::wkbMultiPoint, Geometry::wkbPoint); } - | MULTIPOLYGON '(' expr_list ')' - { $$= new Item_func_spatial_collection(* $3, - Geometry::wkbMultiPolygon, Geometry::wkbPolygon ); } | NOW_SYM optional_braces { $$= new Item_func_now_local(); Lex->safe_to_cache_query=0;} | NOW_SYM '(' expr ')' @@ -2764,19 +2796,6 @@ simple_expr: } | OLD_PASSWORD '(' expr ')' { $$= new Item_func_old_password($3); } - | POINT_SYM '(' expr ',' expr ')' - { $$= new Item_func_point($3,$5); } - | POINTFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | POINTFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } - | POLYFROMTEXT '(' expr ')' - { $$= new Item_func_geometry_from_text($3); } - | POLYFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3, $5); } - | POLYGON '(' expr_list ')' - { $$= new Item_func_spatial_collection(* $3, - Geometry::wkbPolygon, Geometry::wkbLineString); } | POSITION_SYM '(' no_in_expr IN_SYM expr ')' { $$ = new Item_func_locate($5,$3); } | RAND '(' expr ')' @@ -2914,6 +2933,66 @@ simple_expr: | EXTRACT_SYM '(' interval FROM expr ')' { $$=new Item_extract( $3, $5); }; +geometry_function: + GEOMFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | GEOMFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + | GEOMFROMWKB '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_wkb($3)); } + | GEOMFROMWKB '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_wkb($3, $5)); } + | GEOMETRYCOLLECTION '(' expr_list ')' + { $$= GEOM_NEW(Item_func_spatial_collection(* $3, + Geometry::wkbGeometryCollection, + Geometry::wkbPoint)); } + | LINESTRING '(' expr_list ')' + { $$= GEOM_NEW(Item_func_spatial_collection(* $3, + Geometry::wkbLineString, Geometry::wkbPoint)); } + | MULTILINESTRING '(' expr_list ')' + { $$= GEOM_NEW( Item_func_spatial_collection(* $3, + Geometry::wkbMultiLineString, Geometry::wkbLineString)); } + | MLINEFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | MLINEFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + | MPOINTFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | MPOINTFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + | MPOLYFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | MPOLYFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + | MULTIPOINT '(' expr_list ')' + { $$= GEOM_NEW(Item_func_spatial_collection(* $3, + Geometry::wkbMultiPoint, Geometry::wkbPoint)); } + | MULTIPOLYGON '(' expr_list ')' + { $$= GEOM_NEW(Item_func_spatial_collection(* $3, + Geometry::wkbMultiPolygon, Geometry::wkbPolygon)); } + | POINT_SYM '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_point($3,$5)); } + | POINTFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | POINTFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + | POLYFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | POLYFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + | POLYGON '(' expr_list ')' + { $$= GEOM_NEW(Item_func_spatial_collection(* $3, + Geometry::wkbPolygon, Geometry::wkbLineString)); } + | GEOMCOLLFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | GEOMCOLLFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + | LINEFROMTEXT '(' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3)); } + | LINEFROMTEXT '(' expr ',' expr ')' + { $$= GEOM_NEW(Item_func_geometry_from_text($3, $5)); } + ; + fulltext_options: /* nothing */ { $$= FT_NL; } | WITH QUERY_SYM EXPANSION_SYM { $$= FT_NL | FT_EXPAND; } |