User: obo     
Date: 2006/07/13 08:14:41

Modified:
   dba/connectivity/source/parse/sqlbison.y

Log:
 INTEGRATION: CWS dba204a (1.51.164); FILE MERGED
 2006/07/13 08:41:40 fs 1.51.164.3: RESYNC: (1.52-1.53); FILE MERGED
 2006/07/05 08:54:41 oj 1.51.164.2: RESYNC: (1.51-1.52); FILE MERGED
 2006/05/22 10:51:45 oj 1.51.164.1: #i50910# refactoring and recognize between 
in predicate check

File Changes:

Directory: /dba/connectivity/source/parse/
==========================================

File [changed]: sqlbison.y
Url: 
http://dba.openoffice.org/source/browse/dba/connectivity/source/parse/sqlbison.y?r1=1.53&r2=1.54
Delta lines:  +41 -78
---------------------
--- sqlbison.y  10 Jul 2006 14:38:22 -0000      1.53
+++ sqlbison.y  13 Jul 2006 15:14:39 -0000      1.54
@@ -1187,8 +1187,10 @@
                }
        |       comparison row_value_constructor
                {
+                       if(xxx_pGLOBAL_SQLPARSER->inPredicateCheck())
+                       {
                        $$ = SQL_NEW_RULE;
-                       sal_Int16 nErg = 
xxx_pGLOBAL_SQLPARSER->buildComparsionRule($$,$2,$1);
+                               sal_Int16 nErg = 
xxx_pGLOBAL_SQLPARSER->buildPredicateRule($$,$2,$1);
                        if(nErg == 1)
                        {
                                OSQLParseNode* pTemp = $$;
@@ -1201,6 +1203,11 @@
                                YYABORT;
                        }
                }
+                       else
+                       {
+                               YYERROR;
+                       }
+               }
        ;
 comparison:
                SQL_LESS
@@ -1224,16 +1231,22 @@
                {
                        if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck())
                        {
-                               OSQLParseNode* pColumnRef = 
newNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref));
-                               
pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME));
-
                                $$ = SQL_NEW_RULE;
-                               $$->append(pColumnRef);
-                               $$->append($1);
-                               $$->append($2);
-                               $$->append($3);
-                               $$->append($4);
-                               $$->append($5);
+                               
+                               sal_Int16 nErg = 
xxx_pGLOBAL_SQLPARSER->buildPredicateRule($$,$3,$2,$5);
+                               if(nErg == 1)
+                               {
+                                       OSQLParseNode* pTemp = $$;
+                                       $$ = pTemp->removeAt((sal_uInt32)0);
+                                       $$->insert(1,$1);
+                                       delete pTemp;
+                                       delete $4;
+                               }
+                               else
+                               {
+                                       delete $$;
+                                       YYABORT;
+                               }
                        }
                        else
                                YYERROR;
@@ -3513,75 +3526,25 @@
        return s_nRuleIDs[(sal_uInt16)eRule];
 }
 // -------------------------------------------------------------------------
-sal_Int16 OSQLParser::buildNode(OSQLParseNode*& pAppend,OSQLParseNode* 
pLiteral,OSQLParseNode*& pCompare)
+sal_Int16 OSQLParser::buildNode(OSQLParseNode*& pAppend,OSQLParseNode* 
pCompare,OSQLParseNode* pLiteral,OSQLParseNode* pLiteral2)
 {
        OSQLParseNode* pColumnRef = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref));
        pColumnRef->append(new OSQLInternalNode(m_sFieldName,SQL_NODE_NAME));
-       OSQLParseNode* pComp = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::comparison_predicate));
+       OSQLParseNode* pComp = NULL;
+       if ( SQL_ISTOKEN( pCompare, BETWEEN) && pLiteral2 )
+               pComp = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::between_predicate));
+       else
+               pComp = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::comparison_predicate));
+       
        pComp->append(pColumnRef);
        pComp->append(pCompare);
        pComp->append(pLiteral);
-       pAppend->append(pComp);
-       return 1;
-}
-//-----------------------------------------------------------------------------
-sal_Int16 OSQLParser::buildNode_Date(const double& fValue, sal_Int32 nType, 
OSQLParseNode*& pAppend,OSQLParseNode* pLiteral,OSQLParseNode*& pCompare)
-{
-       OSQLParseNode* pColumnRef = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref));
-       pColumnRef->append(new OSQLInternalNode(m_sFieldName,SQL_NODE_NAME));
-       OSQLParseNode* pComp = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::comparison_predicate));
-       pComp->append(pColumnRef);
-       pComp->append(pCompare);
-
-       OSQLParseNode* pNewNode = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::set_fct_spec));
-       pNewNode->append(new 
OSQLInternalNode(::rtl::OUString::createFromAscii("{"), SQL_NODE_PUNCTUATION));
-       OSQLParseNode* pDateNode = new OSQLInternalNode(aEmptyString, 
SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::odbc_fct_spec));
-       pNewNode->append(pDateNode);
-       pNewNode->append(new 
OSQLInternalNode(::rtl::OUString::createFromAscii("}"), SQL_NODE_PUNCTUATION));
-
-       switch (nType)
-       {
-               case DataType::DATE:
-               {
-                       Date aDate = 
DBTypeConversion::toDate(fValue,DBTypeConversion::getNULLDate(m_xFormatter->getNumberFormatsSupplier()));
-                       ::rtl::OUString aString = 
DBTypeConversion::toDateString(aDate);
-                       pDateNode->append(new OSQLInternalNode(aEmptyString, 
SQL_NODE_KEYWORD, SQL_TOKEN_D));
-                       pDateNode->append(new OSQLInternalNode(aString, 
SQL_NODE_STRING));
-                       break;
-               }
-               case DataType::TIME:
-               {
-                       Time aTime = DBTypeConversion::toTime(fValue);
-                       ::rtl::OUString aString = 
DBTypeConversion::toTimeString(aTime);
-                       pDateNode->append(new OSQLInternalNode(aEmptyString, 
SQL_NODE_KEYWORD, SQL_TOKEN_T));
-                       pDateNode->append(new OSQLInternalNode(aString, 
SQL_NODE_STRING));
-                       break;
-               }
-               case DataType::TIMESTAMP:
+       if ( pLiteral2 )
                {
-                       DateTime aDateTime = 
DBTypeConversion::toDateTime(fValue,DBTypeConversion::getNULLDate(m_xFormatter->getNumberFormatsSupplier()));
-                       if (aDateTime.Seconds || aDateTime.Minutes || 
aDateTime.Hours)
-                       {
-                               ::rtl::OUString aString = 
DBTypeConversion::toDateTimeString(aDateTime);
-                               pDateNode->append(new 
OSQLInternalNode(aEmptyString, SQL_NODE_KEYWORD, SQL_TOKEN_TS));
-                               pDateNode->append(new OSQLInternalNode(aString, 
SQL_NODE_STRING));
-                       }
-                       else
-                       {
-                               Date 
aDate(aDateTime.Day,aDateTime.Month,aDateTime.Year);
-                               pDateNode->append(new 
OSQLInternalNode(aEmptyString, SQL_NODE_KEYWORD, SQL_TOKEN_D));
-                               pDateNode->append(new 
OSQLInternalNode(DBTypeConversion::toDateString(aDate), SQL_NODE_STRING));
-                       }
-                       break;
-               }
+               pComp->append(new OSQLInternalNode(aEmptyString, 
SQL_NODE_KEYWORD,SQL_TOKEN_AND));
+               pComp->append(pLiteral2);               
        }
-
-       pComp->append(pNewNode);
        pAppend->append(pComp);
-
-       delete pLiteral;
-       pLiteral = NULL;
-
        return 1;
 }
 //-----------------------------------------------------------------------------
@@ -3621,7 +3584,7 @@
 sal_Int16 OSQLParser::buildComparsionRule(OSQLParseNode*& 
pAppend,OSQLParseNode* pLiteral)
 {
        OSQLParseNode* pComp = new 
OSQLInternalNode(::rtl::OUString::createFromAscii("="), SQL_NODE_EQUAL);
-       return buildComparsionRule(pAppend,pLiteral,pComp);
+       return buildPredicateRule(pAppend,pLiteral,pComp);
 }
 
 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to