From d2cef31337a5232eab12e588f968b84c7bd5feba Mon Sep 17 00:00:00 2001 From: kishoramballi Date: Sat, 24 May 2008 18:40:00 +0000 Subject: [PATCH] IN operator functionality added. --- src/sql/ParsedData.cxx | 15 +++++++++++++++ src/sql/dmlyacc.yxx | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/sql/ParsedData.cxx b/src/sql/ParsedData.cxx index b104ed3c..57e94328 100644 --- a/src/sql/ParsedData.cxx +++ b/src/sql/ParsedData.cxx @@ -32,6 +32,20 @@ void ParsedData::insertValue(char *val) fieldValueList.append(newVal); } +void ParsedData::insertInValue(char *val) +{ + FieldValue *newVal = new FieldValue(); + if (val == NULL) + newVal->parsedString = NULL; + else + newVal->parsedString = strdup(val); + newVal->value = NULL; + newVal->paramNo = 0; + newVal->type = typeUnknown; + newVal->length = 0; + inValueList.append(newVal); +} + void** ParsedData::insertCondValueAndGetPtr(char *fldName, char *val) { ConditionValue *newVal = new ConditionValue(); @@ -106,6 +120,7 @@ void ParsedData::reset() delete value; } fieldValueList.reset(); + inValueList.reset(); predicate.reset(); iter = conditionValueList.getIterator(); diff --git a/src/sql/dmlyacc.yxx b/src/sql/dmlyacc.yxx index 83e9c386..bdc0bd02 100644 --- a/src/sql/dmlyacc.yxx +++ b/src/sql/dmlyacc.yxx @@ -77,6 +77,20 @@ value_list_L: ',' value } ; +invalue_list: invalue_list invalue_list_L + | value + { + parsedData->insertInValue((char*)$1); + free($1); + } + ; +invalue_list_L: ',' value + { + parsedData->insertInValue((char*)$2); + free($2); + } + ; + delete_statement: DELETE FROM ident where_clause_opt semicolon_opt { parsedData->setStmtType(DeleteStatement); @@ -175,9 +189,9 @@ condition: ident OPERATOR value free( $1 ); free( $4 ); free( $6 ); $$= finalPred; } - | ident not_opt IN '(' value_list ')' + | ident not_opt IN '(' invalue_list ')' { - ListIterator valIter = parsedData->getFieldValueList().getIterator(); + ListIterator valIter = parsedData->getInValueList().getIterator(); FieldValue *value1, *value2; Predicate *pred1, *pred2, *finalPred; void **ptr1, **ptr2; -- 2.11.4.GIT