libidav/davqlparser.c

changeset 103
b29692d5f7a7
parent 102
e9ae1318a559
child 106
9cec78f23cbf
equal deleted inserted replaced
102:e9ae1318a559 103:b29692d5f7a7
702 stmt->errorcode = DAVQL_ERROR_UNEXPECTED_TOKEN; 702 stmt->errorcode = DAVQL_ERROR_UNEXPECTED_TOKEN;
703 stmt->errormessage = ucx_sprintf(_expected_token, 703 stmt->errormessage = ucx_sprintf(_expected_token,
704 "FROM", sfmtarg(tokendata)).ptr; 704 "FROM", sfmtarg(tokendata)).ptr;
705 return 0; 705 return 0;
706 } 706 }
707 default:
708 stmt->errorcode = DAVQL_ERROR_INVALID;
709 stmt->errormessage = strdup(_parser_state);
710 return 0;
707 } 711 }
708 } 712 }
709 713
710 static int dav_parse_from(DavQLStatement *stmt, UcxList *token) { 714 static int dav_parse_from(DavQLStatement *stmt, UcxList *token) {
711 sstr_t tokendata = *token_sstr(token); 715 sstr_t tokendata = *token_sstr(token);
759 switch (state->step) { 763 switch (state->step) {
760 case 0: 764 case 0:
761 if (!sstrcasecmp(tokendata, S("depth"))) { 765 if (!sstrcasecmp(tokendata, S("depth"))) {
762 state->key = 1; 766 state->key = 1;
763 state->step = 1; 767 state->step = 1;
768 if (state->keymask & state->key) {
769 stmt->errorcode = DAVQL_ERROR_DUPLICATED_ATTRIBUTE;
770 stmt->errormessage = ucx_sprintf(_duplicated_attribute,
771 sfmtarg(tokendata)).ptr;
772 } else {
773 state->keymask |= state->key;
774 }
764 } else { 775 } else {
765 stmt->errorcode = DAVQL_ERROR_UNKNOWN_ATTRIBUTE; 776 stmt->errorcode = DAVQL_ERROR_UNKNOWN_ATTRIBUTE;
766 stmt->errormessage = ucx_sprintf(_unknown_attribute, 777 stmt->errormessage = ucx_sprintf(_unknown_attribute,
767 sfmtarg(tokendata)).ptr; 778 sfmtarg(tokendata)).ptr;
768 break;
769 }
770 if (state->keymask & state->key) {
771 stmt->errorcode = DAVQL_ERROR_DUPLICATED_ATTRIBUTE;
772 stmt->errormessage = ucx_sprintf(_duplicated_attribute,
773 sfmtarg(tokendata)).ptr;
774 } else {
775 state->keymask |= state->key;
776 } 779 }
777 return _step_WITH_; // continue parsing WITH clause 780 return _step_WITH_; // continue parsing WITH clause
778 case 1: 781 case 1:
779 if (sstrcmp(tokendata, S("="))) { 782 if (sstrcmp(tokendata, S("="))) {
780 stmt->errorcode = DAVQL_ERROR_UNEXPECTED_TOKEN; 783 stmt->errorcode = DAVQL_ERROR_UNEXPECTED_TOKEN;

mercurial