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; |