diff options
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/inc/connectivity/dbexception.hxx | 6 | ||||
-rw-r--r-- | connectivity/inc/connectivity/sqlparse.hxx | 3 | ||||
-rw-r--r-- | connectivity/source/drivers/dbase/DTable.cxx | 3 | ||||
-rw-r--r-- | connectivity/source/drivers/file/FStatement.cxx | 48 | ||||
-rw-r--r-- | connectivity/source/drivers/jdbc/DatabaseMetaData.cxx | 3 | ||||
-rw-r--r-- | connectivity/source/drivers/jdbc/ResultSet.cxx | 2 | ||||
-rw-r--r-- | connectivity/source/parse/sqlbison.y | 167 | ||||
-rw-r--r-- | connectivity/source/parse/sqliterator.cxx | 16 | ||||
-rw-r--r-- | connectivity/source/parse/sqlnode.cxx | 107 | ||||
-rw-r--r-- | connectivity/source/resource/conn_shared_res.src | 10 |
10 files changed, 216 insertions, 149 deletions
diff --git a/connectivity/inc/connectivity/dbexception.hxx b/connectivity/inc/connectivity/dbexception.hxx index 5c9f575da7c7..dbfcf5eb5747 100644 --- a/connectivity/inc/connectivity/dbexception.hxx +++ b/connectivity/inc/connectivity/dbexception.hxx @@ -150,6 +150,12 @@ public: const ::com::sun::star::uno::Any& get() const { return m_aContent; } + void clear() + { + m_aContent.clear(); + m_eType = UNDEFINED; + } + protected: void implDetermineType(); }; diff --git a/connectivity/inc/connectivity/sqlparse.hxx b/connectivity/inc/connectivity/sqlparse.hxx index 6ca31d695bd9..fb775abb480d 100644 --- a/connectivity/inc/connectivity/sqlparse.hxx +++ b/connectivity/inc/connectivity/sqlparse.hxx @@ -232,7 +232,8 @@ namespace connectivity // compares the _sFunctionName with all known function names and return the DataType of the return value static sal_Int32 getFunctionReturnType(const ::rtl::OUString& _sFunctionName, const IParseContext* pContext = NULL); - + // returns the type for a parameter in a given function name + static sal_Int32 getFunctionParameterType(sal_uInt32 _nTokenId,sal_uInt32 _nPos); void error(sal_Char *fmt); int SQLlex(); diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx index a6ee377e586e..d4a83249098a 100644 --- a/connectivity/source/drivers/dbase/DTable.cxx +++ b/connectivity/source/drivers/dbase/DTable.cxx @@ -368,11 +368,12 @@ void ODbaseTable::fillColumns() cType[0] = aDBFColumn.db_typ; cType[1] = 0; aTypeName = ::rtl::OUString::createFromAscii(cType); +OSL_TRACE("column type: %c",aDBFColumn.db_typ); switch (aDBFColumn.db_typ) { case 'C': - eType = DataType::CHAR; + eType = DataType::VARCHAR; aTypeName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VARCHAR")); break; case 'F': diff --git a/connectivity/source/drivers/file/FStatement.cxx b/connectivity/source/drivers/file/FStatement.cxx index 2692f02d7614..72ad91dbfa73 100644 --- a/connectivity/source/drivers/file/FStatement.cxx +++ b/connectivity/source/drivers/file/FStatement.cxx @@ -639,7 +639,7 @@ void OStatement_Base::GetAssignValues() aColumnNameList.push_back(pCol->getTokenValue()); } } - if(!aColumnNameList.size()) + if ( aColumnNameList.empty() ) throwFunctionSequenceException(*this); // Werte ... @@ -652,10 +652,10 @@ void OStatement_Base::GetAssignValues() if (! SQL_ISTOKEN(pValuesOrQuerySpec->getChild(0),VALUES)) throwFunctionSequenceException(*this); - OSL_ENSURE(pValuesOrQuerySpec->count() == 2,"OResultSet: pValuesOrQuerySpec->count() != 2"); + OSL_ENSURE(pValuesOrQuerySpec->count() == 4,"OResultSet: pValuesOrQuerySpec->count() != 4"); // Liste von Werten - OSQLParseNode * pInsertAtomCommalist = pValuesOrQuerySpec->getChild(1); + OSQLParseNode * pInsertAtomCommalist = pValuesOrQuerySpec->getChild(2); OSL_ENSURE(pInsertAtomCommalist != NULL,"OResultSet: pInsertAtomCommalist darf nicht NULL sein!"); OSL_ENSURE(pInsertAtomCommalist->count() > 0,"OResultSet: pInsertAtomCommalist <= 0"); @@ -665,40 +665,22 @@ void OStatement_Base::GetAssignValues() for (sal_uInt32 i = 0; i < pInsertAtomCommalist->count(); i++) { pRow_Value_Const = pInsertAtomCommalist->getChild(i); // row_value_constructor - if(pRow_Value_Const->count() == 3) // '(' row_value_const_list ')' + OSL_ENSURE(pRow_Value_Const != NULL,"OResultSet: pRow_Value_Const darf nicht NULL sein!"); + if(SQL_ISRULE(pRow_Value_Const,parameter)) { - pRow_Value_Const = pRow_Value_Const->getChild(1); // row_value_const_list - OSL_ENSURE(pRow_Value_Const != NULL,"OResultSet: pRow_Value_Const darf nicht NULL sein!"); - if(SQL_ISRULE(pRow_Value_Const,parameter)) - { - if(pRow_Value_Const->count() == aColumnNameList.size()) - ParseAssignValues(aColumnNameList,pRow_Value_Const,nIndex++); // kann nur ein Columnname vorhanden sein pro Schleife - else - { -// aStatus.Set(SQL_STAT_ERROR, -// String::CreateFromAscii("S1000"), -// aStatus.CreateErrorMessage(String(SdbResId(STR_STAT_SYNTAX_ERROR))), -// 0, String() ); - throwFunctionSequenceException(*this); - } - } - else if(pRow_Value_Const->isToken()) - ParseAssignValues(aColumnNameList,pRow_Value_Const,static_cast<xub_StrLen>(i)); - else - { - if(pRow_Value_Const->count() == aColumnNameList.size()) - { - for (sal_uInt32 j = 0; j < pRow_Value_Const->count(); ++j) - ParseAssignValues(aColumnNameList,pRow_Value_Const->getChild(j),nIndex++); - } - else - throwFunctionSequenceException(*this); - } + ParseAssignValues(aColumnNameList,pRow_Value_Const,nIndex++); // kann nur ein Columnname vorhanden sein pro Schleife } + else if(pRow_Value_Const->isToken()) + ParseAssignValues(aColumnNameList,pRow_Value_Const,static_cast<xub_StrLen>(i)); else { - // aStatus.SetStatementTooComplex(); - throwFunctionSequenceException(*this); + if(pRow_Value_Const->count() == aColumnNameList.size()) + { + for (sal_uInt32 j = 0; j < pRow_Value_Const->count(); ++j) + ParseAssignValues(aColumnNameList,pRow_Value_Const->getChild(j),nIndex++); + } + else + throwFunctionSequenceException(*this); } } } diff --git a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx index 11863be3b8bf..b0341a3fd564 100644 --- a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx @@ -616,7 +616,8 @@ Reference< XResultSet > java_sql_DatabaseMetaData::impl_callResultSetMethodWithS const ::rtl::OUString* _pOptionalAdditionalString ) { bool bCatalog = _rCatalog.hasValue(); - ::rtl::OUString sCatalog( ::comphelper::getString( _rCatalog ) ); + ::rtl::OUString sCatalog; + _rCatalog >>= sCatalog; bool bSchema = _rSchemaPattern.toChar() != '%'; diff --git a/connectivity/source/drivers/jdbc/ResultSet.cxx b/connectivity/source/drivers/jdbc/ResultSet.cxx index e78488ffbba3..4728586ad4d0 100644 --- a/connectivity/source/drivers/jdbc/ResultSet.cxx +++ b/connectivity/source/drivers/jdbc/ResultSet.cxx @@ -261,7 +261,7 @@ sal_Int64 SAL_CALL java_sql_ResultSet::getLong( sal_Int32 columnIndex ) throw(SQ RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_ResultSet::getLong" ); static jmethodID mID(NULL); jlong (JNIEnv::*pCallMethod)( jobject obj, jmethodID methodID, ... ) = &JNIEnv::CallLongMethod; - return callMethodWithIntArg<jlong>(pCallMethod,"getLong","(I)L",mID,columnIndex); + return callMethodWithIntArg<jlong>(pCallMethod,"getLong","(I)J",mID,columnIndex); } // ------------------------------------------------------------------------- diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y index a42c3cb2302c..b25f7c8fb2a4 100644 --- a/connectivity/source/parse/sqlbison.y +++ b/connectivity/source/parse/sqlbison.y @@ -107,7 +107,7 @@ static connectivity::OSQLInternalNode* newNode(const sal_Char* pNewValue, const connectivity::SQLNodeType eNodeType, const sal_uInt32 nNodeID = 0) { - + OSL_TRACE("connectivity: Rule Number: %d,%d",eNodeType,nNodeID); return new connectivity::OSQLInternalNode(pNewValue, eNodeType, nNodeID); } @@ -115,7 +115,7 @@ static connectivity::OSQLInternalNode* newNode(const ::rtl::OString& _NewValue, const connectivity::SQLNodeType eNodeType, const sal_uInt32 nNodeID = 0) { - + OSL_TRACE("connectivity: Rule Number: %d,%d",eNodeType,nNodeID); return new connectivity::OSQLInternalNode(_NewValue, eNodeType, nNodeID); } @@ -123,7 +123,7 @@ static connectivity::OSQLInternalNode* newNode(const ::rtl::OUString& _NewValue, const connectivity::SQLNodeType eNodeType, const sal_uInt32 nNodeID = 0) { - + OSL_TRACE("connectivity: Rule Number: %d,%d",eNodeType,nNodeID); return new connectivity::OSQLInternalNode(_NewValue, eNodeType, nNodeID); } @@ -676,15 +676,12 @@ manipulative_statement_list: ; ***/ -/*sql: - {$$ = SQL_NEW_LISTRULE;} - ; -*/ sql_not: {$$ = SQL_NEW_RULE;} | SQL_TOKEN_NOT ; - /* manipulative statements */ + +/* manipulative statements */ sql: manipulative_statement ; @@ -767,10 +764,12 @@ insert_statement: $$->append($5);} ; values_or_query_spec: - SQL_TOKEN_VALUES table_value_const_list + SQL_TOKEN_VALUES '(' table_value_const_list ')' {$$ = SQL_NEW_RULE; $$->append($1); - $$->append($2); + $$->append($2 = newNode("(", SQL_NODE_PUNCTUATION)); + $$->append($3); + $$->append($4 = newNode(")", SQL_NODE_PUNCTUATION)); } ; @@ -792,18 +791,14 @@ row_value_const_list: ; row_value_constructor: row_value_constructor_elem - | '(' row_value_const_list ')' +/* | '(' row_value_const_list ')' { $$ = SQL_NEW_RULE; $$->append($1 = newNode("(", SQL_NODE_PUNCTUATION)); $$->append($2); $$->append($3 = newNode(")", SQL_NODE_PUNCTUATION)); } -/* | subquery - { - $$ = SQL_NEW_RULE; - $$->append($1); - }*/ + */ ; row_value_constructor_elem: value_exp /*[^')']*/ @@ -1053,47 +1048,16 @@ truth_value: ; boolean_primary: predicate - | '(' search_condition ')' - { + | '(' search_condition ')' + { // boolean_primary: rule 2 $$ = SQL_NEW_RULE; $$->append($1 = newNode("(", SQL_NODE_PUNCTUATION)); $$->append($2); $$->append($3 = newNode(")", SQL_NODE_PUNCTUATION)); } - ; - -boolean_test: - boolean_primary - | boolean_primary SQL_TOKEN_IS sql_not truth_value - { - $$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2); - $$->append($3); - $$->append($4); - } - ; -boolean_factor: - boolean_test - | SQL_TOKEN_NOT boolean_test - { - $$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2); - } - ; -boolean_term: - boolean_factor - | boolean_term SQL_TOKEN_AND boolean_factor - { - $$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2); - $$->append($3); - } | row_value_constructor_elem /*[^')' ',']*/ { - if(xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if(xxx_pGLOBAL_SQLPARSER->inPredicateCheck())// boolean_primary: rule 3 { $$ = SQL_NEW_RULE; sal_Int16 nErg = xxx_pGLOBAL_SQLPARSER->buildComparsionRule($$,$1); @@ -1115,54 +1079,43 @@ boolean_term: else YYERROR; } - | boolean_term SQL_TOKEN_AND literal - { - if(xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) - { - $$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2); - sal_Int16 nErg = xxx_pGLOBAL_SQLPARSER->buildComparsionRule($$,$3); - if(nErg < 1) - { - delete $$; - if(nErg) - YYERROR; - else - YYABORT; - } - } - else - YYERROR; + ; +boolean_test: + boolean_primary + | boolean_primary SQL_TOKEN_IS sql_not truth_value + { + $$ = SQL_NEW_RULE; + $$->append($1); + $$->append($2); + $$->append($3); + $$->append($4); } - | boolean_term SQL_TOKEN_AND SQL_TOKEN_STRING + ; +boolean_factor: + boolean_test + | SQL_TOKEN_NOT boolean_test + { // boolean_factor: rule 1 + $$ = SQL_NEW_RULE; + $$->append($1); + $$->append($2); + } + ; +boolean_term: + boolean_factor + | boolean_term SQL_TOKEN_AND boolean_factor { - if(xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) - { - $$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2); - sal_Int16 nErg = xxx_pGLOBAL_SQLPARSER->buildComparsionRule($$,$3); - if(nErg < 1) - { - delete $$; - if(nErg) - YYERROR; - else - YYABORT; - } - } - else - YYERROR; - + $$ = SQL_NEW_RULE; // boolean_term: rule 1 + $$->append($1); + $$->append($2); + $$->append($3); } ; search_condition: boolean_term | search_condition SQL_TOKEN_OR boolean_term { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE; // search_condition $$->append($1); $$->append($2); $$->append($3); @@ -1182,14 +1135,14 @@ predicate: comparison_predicate: row_value_constructor comparison row_value_constructor { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE; // comparison_predicate: rule 1 $$->append($1); $$->append($2); $$->append($3); } | comparison row_value_constructor { - if(xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if(xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) // comparison_predicate: rule 2 { $$ = SQL_NEW_RULE; sal_Int16 nErg = xxx_pGLOBAL_SQLPARSER->buildPredicateRule($$,$2,$1); @@ -1221,7 +1174,7 @@ comparison: ; between_predicate: row_value_constructor sql_not SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor - {$$ = SQL_NEW_RULE; + {$$ = SQL_NEW_RULE; // between_predicate: rule 1 $$->append($1); $$->append($2); $$->append($3); @@ -1231,7 +1184,7 @@ between_predicate: } | sql_not SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) // between_predicate: rule 2 { $$ = SQL_NEW_RULE; @@ -1258,7 +1211,7 @@ between_predicate: like_predicate: row_value_constructor SQL_TOKEN_NOT SQL_TOKEN_LIKE string_value_exp opt_escape { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE; // like_predicate: rule 1 $$->append($1); $$->append($2); $$->append($3); @@ -1267,7 +1220,7 @@ like_predicate: } | row_value_constructor SQL_TOKEN_LIKE string_value_exp opt_escape { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE; // like_predicate: rule 2 $$->append($1); $$->append($2); $$->append($3); @@ -1275,7 +1228,7 @@ like_predicate: } | row_value_constructor SQL_TOKEN_NOT SQL_TOKEN_LIKE value_exp_primary opt_escape { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE; // like_predicate: rule 3 $$->append($1); $$->append($2); $$->append($3); @@ -1284,7 +1237,7 @@ like_predicate: } | row_value_constructor SQL_TOKEN_LIKE value_exp_primary opt_escape { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE; // like_predicate: rule 4 $$->append($1); $$->append($2); $$->append($3); @@ -1292,7 +1245,7 @@ like_predicate: } | sql_not SQL_TOKEN_LIKE string_value_exp opt_escape { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) // like_predicate: rule 5 { OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); @@ -1314,7 +1267,7 @@ like_predicate: } | sql_not SQL_TOKEN_LIKE value_exp_primary opt_escape { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) // like_predicate: rule 6 { OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); @@ -1355,7 +1308,7 @@ opt_escape: test_for_null: row_value_constructor SQL_TOKEN_IS sql_not truth_value { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE; // test_for_null: rule 1 $$->append($1); $$->append($2); $$->append($3); @@ -1363,7 +1316,7 @@ test_for_null: } | SQL_TOKEN_IS sql_not truth_value { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck())// test_for_null: rule 2 { OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); @@ -1393,15 +1346,15 @@ in_predicate_value: in_predicate: row_value_constructor sql_not SQL_TOKEN_IN in_predicate_value { - $$ = SQL_NEW_RULE; + $$ = SQL_NEW_RULE;// in_predicate: rule 1 $$->append($1); $$->append($2); $$->append($3); $$->append($4); } - | sql_not SQL_TOKEN_IN in_predicate_value + | sql_not SQL_TOKEN_IN in_predicate_value { - if ( xxx_pGLOBAL_SQLPARSER->inPredicateCheck() ) + if ( xxx_pGLOBAL_SQLPARSER->inPredicateCheck() )// in_predicate: rule 2 { OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); @@ -3132,7 +3085,7 @@ user: SQL_TOKEN_NAME sql: search_condition /* checking predicats */ { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) // sql: rule 1 { $$ = $1; if ( SQL_ISRULE($$,search_condition) ) @@ -3143,7 +3096,9 @@ sql: } else YYERROR; - }; + } + | '(' sql ')' /* checking predicats */ + ; %% diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx index 56f63de5ce14..42778d6a7ed0 100644 --- a/connectivity/source/parse/sqliterator.cxx +++ b/connectivity/source/parse/sqliterator.cxx @@ -1493,6 +1493,20 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode } if ( bNotFound ) { + sal_Int32 nType = DataType::VARCHAR; + OSQLParseNode* pParent = _pColumnRef ? _pColumnRef->getParent() : NULL; + if ( pParent && (SQL_ISRULE(pParent,general_set_fct) || SQL_ISRULE(pParent,set_fct_spec)) ) + { + const sal_uInt32 nCount = _pColumnRef->count(); + sal_uInt32 i = 0; + for(; i < nCount;++i) + { + if ( _pColumnRef->getChild(i) == _pParseNode ) + break; + } + nType = ::connectivity::OSQLParser::getFunctionParameterType( pParent->getChild(0)->getTokenID(), i+1); + } + ::rtl::OUString aNewColName( getUniqueColumnName( sParameterName ) ); OParseColumn* pColumn = new OParseColumn(aNewColName, @@ -1501,7 +1515,7 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode ColumnValue::NULLABLE_UNKNOWN, 0, 0, - DataType::VARCHAR, + nType, sal_False, sal_False, isCaseSensitive() ); diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx index 76c6c69d269c..e134d7a757c4 100644 --- a/connectivity/source/parse/sqlnode.cxx +++ b/connectivity/source/parse/sqlnode.cxx @@ -2616,6 +2616,113 @@ sal_Int32 OSQLParser::getFunctionReturnType(const ::rtl::OUString& _sFunctionNam return nType; } +// ----------------------------------------------------------------------------- +sal_Int32 OSQLParser::getFunctionParameterType(sal_uInt32 _nTokenId, sal_uInt32 _nPos) +{ + sal_Int32 nType = DataType::VARCHAR; + + if(_nTokenId == SQL_TOKEN_CHAR) nType = DataType::INTEGER; + else if(_nTokenId == SQL_TOKEN_INSERT) + { + if ( _nPos == 2 || _nPos == 3 ) + nType = DataType::INTEGER; + } + else if(_nTokenId == SQL_TOKEN_LEFT) + { + if ( _nPos == 2 ) + nType = DataType::INTEGER; + } + else if(_nTokenId == SQL_TOKEN_LOCATE) + { + if ( _nPos == 3 ) + nType = DataType::INTEGER; + } + else if(_nTokenId == SQL_TOKEN_LOCATE_2) + { + if ( _nPos == 3 ) + nType = DataType::INTEGER; + } + else if( _nTokenId == SQL_TOKEN_REPEAT || _nTokenId == SQL_TOKEN_RIGHT ) + { + if ( _nPos == 2 ) + nType = DataType::INTEGER; + } + else if(_nTokenId == SQL_TOKEN_SPACE ) + { + nType = DataType::INTEGER; + } + else if(_nTokenId == SQL_TOKEN_SUBSTRING) + { + if ( _nPos != 1 ) + nType = DataType::INTEGER; + } + else if(_nTokenId == SQL_TOKEN_DATEDIFF) + { + if ( _nPos != 1 ) + nType = DataType::TIMESTAMP; + } + else if(_nTokenId == SQL_TOKEN_DATEVALUE) + nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_DAYNAME) + nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_DAYOFMONTH) + nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_DAYOFWEEK) + nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_DAYOFYEAR) + nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_EXTRACT) nType = DataType::VARCHAR; + else if(_nTokenId == SQL_TOKEN_HOUR) nType = DataType::TIME; + else if(_nTokenId == SQL_TOKEN_MINUTE) nType = DataType::TIME; + else if(_nTokenId == SQL_TOKEN_MONTH) nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_MONTHNAME) nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_NOW) nType = DataType::TIMESTAMP; + else if(_nTokenId == SQL_TOKEN_QUARTER) nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_SECOND) nType = DataType::TIME; + else if(_nTokenId == SQL_TOKEN_TIMESTAMPADD) nType = DataType::TIMESTAMP; + else if(_nTokenId == SQL_TOKEN_TIMESTAMPDIFF) nType = DataType::TIMESTAMP; + else if(_nTokenId == SQL_TOKEN_TIMEVALUE) nType = DataType::TIMESTAMP; + else if(_nTokenId == SQL_TOKEN_WEEK) nType = DataType::DATE; + else if(_nTokenId == SQL_TOKEN_YEAR) nType = DataType::DATE; + + else if(_nTokenId == SQL_TOKEN_ABS) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_ACOS) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_ASIN) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_ATAN) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_ATAN2) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_CEILING) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_COS) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_COT) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_DEGREES) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_EXP) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_FLOOR) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_LOGF) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_LOG) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_LOG10) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_LN) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_MOD) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_PI) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_POWER) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_RADIANS) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_RAND) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_ROUND) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_ROUNDMAGIC) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_SIGN) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_SIN) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_SQRT) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_TAN) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_TRUNCATE) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_COUNT) nType = DataType::INTEGER; + else if(_nTokenId == SQL_TOKEN_MAX) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_MIN) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_AVG) nType = DataType::DOUBLE; + else if(_nTokenId == SQL_TOKEN_SUM) nType = DataType::DOUBLE; + + else if(_nTokenId == SQL_TOKEN_LOWER) nType = DataType::VARCHAR; + else if(_nTokenId == SQL_TOKEN_UPPER) nType = DataType::VARCHAR; + + return nType; +} // ----------------------------------------------------------------------------- const SQLError& OSQLParser::getErrorHelper() const diff --git a/connectivity/source/resource/conn_shared_res.src b/connectivity/source/resource/conn_shared_res.src index c9e54b740252..92b3e5814f4e 100644 --- a/connectivity/source/resource/conn_shared_res.src +++ b/connectivity/source/resource/conn_shared_res.src @@ -292,23 +292,23 @@ String STR_OPERATOR_TOO_COMPLEX }; String STR_QUERY_INVALID_LIKE_COLUMN { - Text [ en-US ] = "The query can not be executed. The 'LIKE' can only be used with a column name."; + Text [ en-US ] = "The query can not be executed. You cannot use 'LIKE' with columns of this type."; }; String STR_QUERY_INVALID_LIKE_STRING { - Text [ en-US ] = "The query can not be executed. The 'LIKE' can only be used with a string argument."; + Text [ en-US ] = "The query can not be executed. 'LIKE' can be used with a string argument only."; }; String STR_QUERY_NOT_LIKE_TOO_COMPLEX { - Text [ en-US ] = "The query can not be executed. The 'NOT LIKE' is too complex."; + Text [ en-US ] = "The query can not be executed. The 'NOT LIKE' condition is too complex."; }; String STR_QUERY_LIKE_WILDCARD { - Text [ en-US ] = "The query can not be executed. The 'LIKE' statement contains wildcard in the middle."; + Text [ en-US ] = "The query can not be executed. The 'LIKE' condition contains wildcard in the middle."; }; String STR_QUERY_LIKE_WILDCARD_MANY { - Text [ en-US ] = "The query can not be executed. The 'LIKE' statement contains too many wildcards."; + Text [ en-US ] = "The query can not be executed. The 'LIKE' condition contains too many wildcards."; }; String STR_INVALID_COLUMNNAME { |