QxSqlQuery & QxSqlQuery::bind(const QVariant & vValue, QSql::ParamType paramType /* = QSql::In */) { verifyQuery(); qAssert(m_lstSqlElement.count() <= 0); qAssert(! m_sQuery.isEmpty() && (qx::QxSqlDatabase::getSingleton()->getSqlPlaceHolderStyle() == qx::QxSqlDatabase::ph_style_question_mark)); QString sKey = QString::number(m_lstValue.count() + 1); m_lstValue.insert(sKey, type_bind_value(vValue, paramType)); return (* this); }
QString QxSqlQuery::query() { verifyQuery(); if (m_lstSqlElement.count() <= 0) { return m_sQuery; } while (m_iParenthesisCount > 0) { closeParenthesis(); } QString sQuery; for (int i = 0; i < m_lstSqlElement.count(); i++) { sQuery += m_lstSqlElement.at(i)->toString() + " "; } return sQuery; }
QxSqlQuery & QxSqlQuery::bind(const QString & sKey, const QVariant & vValue, QSql::ParamType paramType /* = QSql::In */) { verifyQuery(); qAssert(m_lstSqlElement.count() <= 0); qAssert(! m_sQuery.isEmpty() && (qx::QxSqlDatabase::getSingleton()->getSqlPlaceHolderStyle() != qx::QxSqlDatabase::ph_style_question_mark)); if (sKey.isEmpty() || m_lstValue.exist(sKey)) { qAssert(false); return (* this); } if (! m_sQuery.contains(sKey)) { qAssert(false); return (* this); } m_lstValue.insert(sKey, type_bind_value(vValue, paramType)); return (* this); }
void QxSqlQuery::resolve(QSqlQuery & query) const { verifyQuery(); if (m_lstSqlElement.count() > 0) { for (int i = 0; i < m_lstSqlElement.count(); i++) { m_lstSqlElement.at(i)->resolve(query); } return; } bool bKey = (qx::QxSqlDatabase::getSingleton()->getSqlPlaceHolderStyle() != qx::QxSqlDatabase::ph_style_question_mark); QxCollectionIterator<QString, type_bind_value> itr(m_lstValue); while (itr.next()) { if (bKey) { query.bindValue(itr.key(), itr.value().get<0>(), itr.value().get<1>()); } else { query.addBindValue(itr.value().get<0>(), itr.value().get<1>()); } } }
void QxSqlQuery::postProcess(QString & sql) const { verifyQuery(); for (int i = 0; i < m_lstSqlElement.count(); i++) { m_lstSqlElement.at(i)->postProcess(sql); } }
/**************************************************************************** Desc: ****************************************************************************/ RCODE SortKeyTestImpl::execute( void) { RCODE rc = NE_XFLM_OK; FLMBOOL bDibCreated = FALSE; FLMBOOL bTransActive = FALSE; FLMUINT uiFirstNameId = FIRST_NAME_ID; FLMUINT uiLastNameId = LAST_NAME_ID; IF_Query * pQuery = NULL; FLMUINT uiLoop; FLMBOOL bIxFirstAsc = FALSE; FLMBOOL bIxLastAsc = FALSE; FLMBOOL bIndexCreated = FALSE; char* ppszNames[][2] = { {"Rebecca","Betz"}, {"Russell","Bakker"}, {"April","Sansone"}, {"Julie","Betz"}, {"Jason","Betz"}, {"Ronald","Betz"}, {"Shawn","Hafner"}, {"Karen","Bradley"}, {"Mabel","Zepeda"}, {"Kathleen","Ellinger"}, {"Victor","Tankersley"}, {"Leonard","Kuehn"}, {"Danny","Decastro"}, {"Harold","Bergeron"}, {"Annette","Sartin"}, {"Anthony","Glasser"}, {"Albert","Glasser"}, {"Yvette","Patch"}, {"Joyce","Lundberg"}, {"John","Reinhold"}, {"Kristen","Hansel"}, {"Victor","Schell"}, {"Patrick","Belt"}, {"Gina","Belt"}, {"Brenda","Ellis"}, {"Maryann","Sumpter"}, {"Samantha","Beckford"}, {"Carl","Collette"}, {"Carl","Davis"}, {"Kristina","Tso"}, {"Jeanne","Leonard"}, {"Patty","Ogletree"}, {"Alan","Villa"}, {"Carl","Wacker"}, {"Lawrence","Kent"}, }; beginTest( "Sorting/Positioning Query Test Setup", "Prepare database to test sorted and positionable queries", "", ""); if ( RC_BAD( rc = initCleanTestState( DB_NAME_STR))) { goto Exit; } bDibCreated = TRUE; if ( RC_BAD( rc = m_pDb->transBegin( XFLM_UPDATE_TRANS))) { MAKE_FLM_ERROR_STRING( "transBegin failed.", m_szDetails, rc); goto Exit; } bTransActive = TRUE; if ( RC_BAD( rc = m_pDb->createElementDef( NULL, "first_name", XFLM_TEXT_TYPE, &uiFirstNameId, NULL))) { MAKE_FLM_ERROR_STRING( "createElementDef failed.", m_szDetails, rc); goto Exit; } if ( RC_BAD( rc = m_pDb->createElementDef( NULL, "last_name", XFLM_TEXT_TYPE, &uiLastNameId, NULL))) { MAKE_FLM_ERROR_STRING( "createElementDef failed.", m_szDetails, rc); goto Exit; } // create all of our documents for ( uiLoop = 0; uiLoop < ELEMCOUNT(ppszNames); uiLoop++) { if ( RC_BAD( rc = createNameDoc( ppszNames[uiLoop]))) { goto Exit; } } if ( RC_BAD( rc = m_pDbSystem->createIFQuery( &pQuery))) { MAKE_FLM_ERROR_STRING( "createIFQuery failed.", m_szDetails, rc); goto Exit; } endTest("PASS"); for( uiLoop = 0; uiLoop < 5; uiLoop++) { // We have to commit all our changes here because when result sets are // built in the background, the F_Db the background thread receives to // work with is created via a call to dbDup() and will not have knowledge // of any uncommitted changes made to the database. If this issue is ever // fixed, remove these calls to transCommit and transBegin. if ( RC_BAD( rc = m_pDb->transCommit())) { MAKE_FLM_ERROR_STRING( "createIFQuery failed.", m_szDetails, rc); goto Exit; } bTransActive = FALSE; if ( RC_BAD( rc = m_pDb->transBegin( XFLM_UPDATE_TRANS))) { MAKE_FLM_ERROR_STRING( "createIFQuery failed.", m_szDetails, rc); goto Exit; } bTransActive = TRUE; // no index the first time throug... { const char * pszQuery = "//first_name[.==\"Carl\"]"; char * pszResults[][3][2] = { {{"Carl","Wacker"},{"Carl","Davis"},{"Carl","Collette"}}, // desc,desc {{"Carl","Collette"},{"Carl","Davis"},{"Carl","Wacker"}}, // desc,asc {{"Carl","Wacker"},{"Carl","Davis"},{"Carl","Collette"}}, // asc,desc {{"Carl","Collette"},{"Carl","Davis"},{"Carl","Wacker"}}, // asc,asc }; if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[0], pQuery, ELEMCOUNT(pszResults[0]), FALSE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[1], pQuery, ELEMCOUNT(pszResults[1]), FALSE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[2], pQuery, ELEMCOUNT(pszResults[2]), TRUE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[3], pQuery, ELEMCOUNT(pszResults[3]), TRUE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } } { const char * pszQuery = "//last_name[.==\"Glasser\"]"; char * pszResults[][2][2] = { {{"Anthony","Glasser"},{"Albert","Glasser"}}, // desc,desc {{"Anthony","Glasser"},{"Albert","Glasser"}}, // desc,asc {{"Albert","Glasser"},{"Anthony","Glasser"}}, // asc,desc {{"Albert","Glasser"},{"Anthony","Glasser"}}, // asc,asc }; if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[0], pQuery, ELEMCOUNT(pszResults[0]), FALSE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[1], pQuery, ELEMCOUNT(pszResults[1]), FALSE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[2], pQuery, ELEMCOUNT(pszResults[2]), TRUE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[3], pQuery, ELEMCOUNT(pszResults[3]), TRUE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } } { const char * pszQuery = "//first_name[. >= \"C\" && . < \"J\"]"; char * pszResults[][6][2] = { { // Desc, Desc {"Harold","Bergeron"}, {"Gina","Belt"}, {"Danny","Decastro"}, {"Carl","Wacker"}, {"Carl","Davis"}, {"Carl","Collette"}, }, { // Desc, Asc {"Harold","Bergeron"}, {"Gina","Belt"}, {"Danny","Decastro"}, {"Carl","Collette"}, {"Carl","Davis"}, {"Carl","Wacker"}, }, { // Asc, Desc {"Carl","Wacker"}, {"Carl","Davis"}, {"Carl","Collette"}, {"Danny","Decastro"}, {"Gina","Belt"}, {"Harold","Bergeron"}, }, { // Asc, Asc {"Carl","Collette"}, {"Carl","Davis"}, {"Carl","Wacker"}, {"Danny","Decastro"}, {"Gina","Belt"}, {"Harold","Bergeron"}, }, }; if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[0], pQuery, ELEMCOUNT(pszResults[0]), FALSE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[1], pQuery, ELEMCOUNT(pszResults[1]), FALSE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[2], pQuery, ELEMCOUNT(pszResults[2]), TRUE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[3], pQuery, ELEMCOUNT(pszResults[3]), TRUE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } } { const char * pszQuery = "//last_name[. >= \"Betz\" && . <= \"Davis\"]"; char * pszResults[][7][2] = { {// Desc, Desc {"Ronald","Betz"}, {"Rebecca","Betz"}, {"Karen","Bradley"}, {"Julie","Betz"}, {"Jason","Betz"}, {"Carl","Davis"}, {"Carl","Collette"}, }, {// Desc, Asc {"Ronald","Betz"}, {"Rebecca","Betz"}, {"Karen","Bradley"}, {"Julie","Betz"}, {"Jason","Betz"}, {"Carl","Collette"}, {"Carl","Davis"}, }, {// Asc, Desc {"Carl","Davis"}, {"Carl","Collette"}, {"Jason","Betz"}, {"Julie","Betz"}, {"Karen","Bradley"}, {"Rebecca","Betz"}, {"Ronald","Betz"}, }, {// Asc, Asc {"Carl","Collette"}, {"Carl","Davis"}, {"Jason","Betz"}, {"Julie","Betz"}, {"Karen","Bradley"}, {"Rebecca","Betz"}, {"Ronald","Betz"}, }, }; if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[0], pQuery, ELEMCOUNT(pszResults[0]), FALSE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[1], pQuery, ELEMCOUNT(pszResults[1]), FALSE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[2], pQuery, ELEMCOUNT(pszResults[2]), TRUE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[3], pQuery, ELEMCOUNT(pszResults[3]), TRUE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } } { const char * pszQuery = "//first_name[.==\"A*\" or .==\"J*\"]"; char * pszResults[][10][2] = { { //Desc, Desc {"Julie","Betz"}, {"Joyce","Lundberg"}, {"John","Reinhold"}, {"Jeanne","Leonard"}, {"Jason","Betz"}, {"April","Sansone"}, {"Anthony","Glasser"}, {"Annette","Sartin"}, {"Albert","Glasser"}, {"Alan","Villa"}, }, { //Desc, Asc {"Julie","Betz"}, {"Joyce","Lundberg"}, {"John","Reinhold"}, {"Jeanne","Leonard"}, {"Jason","Betz"}, {"April","Sansone"}, {"Anthony","Glasser"}, {"Annette","Sartin"}, {"Albert","Glasser"}, {"Alan","Villa"}, }, { //Asc, Desc {"Alan","Villa"}, {"Albert","Glasser"}, {"Annette","Sartin"}, {"Anthony","Glasser"}, {"April","Sansone"}, {"Jason","Betz"}, {"Jeanne","Leonard"}, {"John","Reinhold"}, {"Joyce","Lundberg"}, {"Julie","Betz"}, }, { //Asc, Asc {"Alan","Villa"}, {"Albert","Glasser"}, {"Annette","Sartin"}, {"Anthony","Glasser"}, {"April","Sansone"}, {"Jason","Betz"}, {"Jeanne","Leonard"}, {"John","Reinhold"}, {"Joyce","Lundberg"}, {"Julie","Betz"}, }, }; if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[0], pQuery, ELEMCOUNT(pszResults[0]), FALSE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[1], pQuery, ELEMCOUNT(pszResults[1]), FALSE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[2], pQuery, ELEMCOUNT(pszResults[2]), TRUE, FALSE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } if ( RC_BAD( rc = verifyQuery( pszQuery, pszResults[3], pQuery, ELEMCOUNT(pszResults[3]), TRUE, TRUE, bIndexCreated, bIxFirstAsc, bIxLastAsc))) { goto Exit; } } switch( uiLoop) { case 0: bIxFirstAsc = FALSE; bIxLastAsc = FALSE; break; case 1: bIxFirstAsc = FALSE; bIxLastAsc = TRUE; break; case 2: bIxFirstAsc = TRUE; bIxLastAsc = FALSE; break; case 3: bIxFirstAsc = TRUE; bIxLastAsc = TRUE; break; default: break; } if ( RC_BAD( rc = createOrModifyIndex( IX_NUM, !bIxFirstAsc, TRUE, FALSE, !bIxLastAsc, FALSE))) { goto Exit; } bIndexCreated = TRUE; } Exit: if ( pQuery) { pQuery->Release(); } if( bTransActive) { if ( RC_BAD( rc)) { m_pDb->transAbort(); } else { rc = m_pDb->transCommit(); } } shutdownTestState( DB_NAME_STR, bDibCreated); return( rc); }