Changeset: 62473d254ce6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=62473d254ce6 Modified Files: sql/server/sql_parser.y sql/server/sql_scan.c Branch: geo Log Message:
parser changed to recognise 2d geometries with srid diffs (121 lines): diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -474,6 +474,7 @@ int yydebug=1; BOOL_FALSE BOOL_TRUE CURRENT_DATE CURRENT_TIMESTAMP CURRENT_TIME LOCALTIMESTAMP LOCALTIME LEX_ERROR + GEOMETRY GEOMETRYSUBTYPE %token USER CURRENT_USER SESSION_USER LOCAL LOCKED %token CURRENT_ROLE sqlSESSION @@ -4648,8 +4649,79 @@ data_type: sql_init_subtype(&$$, t, $3, 0); } } - - ; +| GEOMETRY { + sql_type *t = mvc_bind_type(m, "geometry"); + if (!t) { + char *msg = sql_message("\b22000!type (%s) unknown", $1); + + yyerror(m, msg); + _DELETE(msg); + $$.type = NULL; + YYABORT; + } else { + sql_init_subtype(&$$, t, 0, 0); + } +} +| GEOMETRY { + char* geoType = (char*) malloc(sizeof($1)); + strcpy(geoType, $1); + $<sval>$=geoType; + } '(' subgeometry_type ',' nonzero ')' { + char* geoType = $<sval>2; + char* geoSubType = $<sval>4; + int srid = $6; + + sql_type *t = mvc_bind_type(m, geoType); + if (!t) { + char *msg = sql_message("\b22000!type (%s) unknown", $1); + free(geoSubType); + free(geoType); + yyerror(m, msg); + _DELETE(msg); + $$.type = NULL; + YYABORT; + } else { + unsigned int geoSubType_i = 0; + if(strcmp(geoSubType, "point") == 0 ) + geoSubType_i = 1; + else if(strcmp(geoSubType, "linestring") == 0) + geoSubType_i = 2; + else if(strcmp(geoSubType, "polygon") == 0) + geoSubType_i = 3; + else if(strcmp(geoSubType, "multipoint") == 0) + geoSubType_i = 4; + else if(strcmp(geoSubType, "multilinestring") == 0) + geoSubType_i = 5; + else if(strcmp(geoSubType, "multipolygon") == 0) + geoSubType_i = 6; + else if(strcmp(geoSubType, "geometrycollection") == 0) + geoSubType_i = 7; + else { + char *msg = sql_message("\b22000!type (%s) unknown", geoSubType); + free(geoSubType); + free(geoType); + yyerror(m, msg); + _DELETE(msg); + $$.type = NULL; + YYABORT; + } + sql_init_subtype(&$$, t, geoSubType_i, srid); + free(geoSubType); + free(geoType); + } + } + ; + +subgeometry_type: + GEOMETRYSUBTYPE { + char* geoSubType = (char*) malloc(sizeof($1)); + strcpy(geoSubType, $1); + $<sval>$=geoSubType; } +| string { + char* geoSubType = (char*) malloc(sizeof($1)); + strcpy(geoSubType, $1); + $<sval>$=geoSubType; } +; type_alias: ALIAS @@ -4764,6 +4836,7 @@ non_reserved_word: | FILTER { $$ = sa_strdup(SA, "filter"); } | TEMPORARY { $$ = sa_strdup(SA, "temporary"); } | ANALYZE { $$ = sa_strdup(SA, "analyze"); } +| GEOMETRY { $$ = sa_strdup(SA, "geometry"); } ; name_commalist: diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c --- a/sql/server/sql_scan.c +++ b/sql/server/sql_scan.c @@ -369,6 +369,16 @@ scanner_init_keywords(void) keywords_insert("URI", URI); keywords_insert("XMLAGG", XMLAGG); + /* keywords for opengis */ + keywords_insert("GEOMETRY", GEOMETRY); + keywords_insert("POINT", GEOMETRYSUBTYPE); + keywords_insert("LINESTRING", GEOMETRYSUBTYPE); + keywords_insert("POLYGON", GEOMETRYSUBTYPE); + keywords_insert("MULTIPOINT", GEOMETRYSUBTYPE); + keywords_insert("MULTILINESTRING", GEOMETRYSUBTYPE); + keywords_insert("MULTIPOLYGON", GEOMETRYSUBTYPE); + keywords_insert("GEOMETRYCOLLECTION", GEOMETRYSUBTYPE); + } #define find_keyword_bs(lc, s) find_keyword(lc->rs->buf+lc->rs->pos+s) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list