Example #1
1
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);
}
Example #2
0
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;
}
Example #3
0
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);
}
Example #4
0
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>()); }
   }
}
Example #5
0
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);
}