249 #define _missing_quote "missing closing quote symbol (%.*s)" |
249 #define _missing_quote "missing closing quote symbol (%.*s)" |
250 #define _parser_state "parser reached invalid state" |
250 #define _parser_state "parser reached invalid state" |
251 #define _unknown_attribute "unknown attribute '%.*s'" |
251 #define _unknown_attribute "unknown attribute '%.*s'" |
252 #define _duplicated_attribute "duplicated attribute '%.*s'" |
252 #define _duplicated_attribute "duplicated attribute '%.*s'" |
253 #define _invalid_depth "invalid depth" |
253 #define _invalid_depth "invalid depth" |
|
254 #define _identifier_expected "identifier expected, but found: %.*s" |
254 |
255 |
255 static UcxList* dav_parse_tokenize(sstr_t src) { |
256 static UcxList* dav_parse_tokenize(sstr_t src) { |
256 UcxList *tokens = NULL; |
257 UcxList *tokens = NULL; |
257 |
258 |
258 // Delimiters: whitespace and dead whitespace around commas |
259 // Delimiters: whitespace and dead whitespace around commas |
563 } |
564 } |
564 // from clause |
565 // from clause |
565 case 20: { |
566 case 20: { |
566 DavQLExpression *expr = dav_parse_expression(stmt, token, 1); |
567 DavQLExpression *expr = dav_parse_expression(stmt, token, 1); |
567 stmt->path = expr->srctext; |
568 stmt->path = expr->srctext; |
|
569 int exprtype = expr->type; |
568 dav_free_expression(expr); |
570 dav_free_expression(expr); |
|
571 if (exprtype != DAVQL_IDENTIFIER) { |
|
572 stmt->errorcode = DAVQL_ERROR_IDENTIFIER_EXPECTED; |
|
573 stmt->errormessage = ucx_sprintf(_identifier_expected, |
|
574 sfmtarg(tokendata)).ptr; |
|
575 } |
569 step = 530; |
576 step = 530; |
570 break; |
577 break; |
571 } |
578 } |
572 // where clause |
579 // where clause |
573 case 30: |
580 case 30: |