summaryrefslogtreecommitdiff
path: root/connectivity/source/drivers/file/FResultSet.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity/source/drivers/file/FResultSet.cxx')
-rw-r--r--connectivity/source/drivers/file/FResultSet.cxx116
1 files changed, 53 insertions, 63 deletions
diff --git a/connectivity/source/drivers/file/FResultSet.cxx b/connectivity/source/drivers/file/FResultSet.cxx
index 2f97ec17c29d..f403d8b55267 100644
--- a/connectivity/source/drivers/file/FResultSet.cxx
+++ b/connectivity/source/drivers/file/FResultSet.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: FResultSet.cxx,v $
*
- * $Revision: 1.72 $
+ * $Revision: 1.73 $
*
- * last change: $Author: oj $ $Date: 2001-08-27 09:13:35 $
+ * last change: $Author: oj $ $Date: 2001-08-29 12:15:31 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -238,7 +238,7 @@ void OResultSet::disposing(void)
// -----------------------------------------------------------------------------
void OResultSet::clear()
{
- DELETEZ(m_pFileSet);
+ m_pFileSet = NULL;
DELETEZ(m_pSortIndex);
if(m_aInsertRow.isValid())
@@ -662,7 +662,7 @@ void SAL_CALL OResultSet::insertRow( ) throw(SQLException, RuntimeException)
// so we have to know where the end is
SkipDeleted(OFileTable::FILE_LAST,1,sal_False);
m_bRowInserted = m_pTable->InsertRow(m_aInsertRow.getBody(), TRUE,Reference<XIndexAccess>(m_xColNames,UNO_QUERY));
- if(m_bRowInserted && m_pFileSet)
+ if(m_bRowInserted && m_pFileSet.isValid())
{
sal_Int32 nPos = (*m_aInsertRow)[0];
m_pFileSet->push_back(nPos);
@@ -701,7 +701,7 @@ void SAL_CALL OResultSet::deleteRow() throw(SQLException, RuntimeException)
sal_Int32 nPos = (sal_Int32)(*m_aRow)[0];
m_bRowDeleted = m_pTable->DeleteRow(m_xColumns.getBody());
- if(m_bRowDeleted && m_pFileSet)
+ if(m_bRowDeleted && m_pFileSet.isValid())
{
m_aRow->setDeleted(sal_True);
// don't touch the m_pFileSet member here
@@ -957,7 +957,7 @@ again:
return sal_False;
}
}
- else if (m_pFileSet)
+ else if (m_pFileSet.isValid())
{
OSL_ENSURE(//!m_pFileSet->IsFrozen() &&
eCursorPosition == OFileTable::FILE_NEXT, "Falsche CursorPosition!");
@@ -993,17 +993,17 @@ again:
// Evaluate darf nur gesetzt sein,
// wenn der Keyset weiter aufgebaut werden soll
if (m_aSQLIterator.getStatementType() == SQL_STATEMENT_SELECT && !isCount() &&
- (m_pFileSet || m_pSortIndex) && bEvaluate)
+ (m_pFileSet.isValid() || m_pSortIndex) && bEvaluate)
{
if (m_pSortIndex)
{
- OFILEKeyValue* pKeyValue = GetOrderbyKeyValue(m_aEvaluateRow);
+ OKeyValue* pKeyValue = GetOrderbyKeyValue(m_aEvaluateRow);
if (!m_pSortIndex->AddKeyValue(pKeyValue))
{
// Ueberwachung auf Ueberschreitung der Index-Kapazitaet:
}
}
- else if (m_pFileSet)
+ else if (m_pFileSet.isValid())
{
// OSL_ENSURE(!m_pFileSet->IsFrozen() , "Falsche CursorPosition!");
sal_uInt32 nBookmarkValue = Abs((sal_Int32)(*m_aEvaluateRow)[0]);
@@ -1055,7 +1055,7 @@ BOOL OResultSet::Move(OFileTable::FilePosition eCursorPosition, INT32 nOffset, B
if (m_aSQLIterator.getStatementType() == SQL_STATEMENT_SELECT &&
!isCount())
{
- if (m_pFileSet == NULL) // kein Index verfuegbar
+ if (!m_pFileSet.isValid()) // kein Index verfuegbar
{
// Normales FETCH
ExecuteRow(eCursorPosition,nOffset,TRUE,FALSE,bRetrieveData);
@@ -1232,7 +1232,7 @@ Error:
case OFileTable::FILE_ABSOLUTE:
case OFileTable::FILE_RELATIVE:
if (nOffset > 0)
- m_nRowPos = (m_pFileSet) ? m_pFileSet->size() : -1;
+ m_nRowPos = (m_pFileSet.isValid()) ? m_pFileSet->size() : -1;
else if (nOffset < 0)
m_nRowPos = -1;
break;
@@ -1481,7 +1481,7 @@ BOOL OResultSet::OpenImpl()
// }
// Neuen Index aufbauen:
- DELETEZ(m_pFileSet);
+ m_pFileSet = NULL;
// DELETEZ(m_pEvaluationKeySet);
// Row zur Auswertung binden, wenn Preprocessing erfolg, dann bereits ein Keyset
@@ -1552,64 +1552,56 @@ BOOL OResultSet::OpenImpl()
{
if(!IsSorted())
{
- m_aOrderbyColumnNumber[0] = m_aColMapping[1];
- m_aOrderbyAscending[0] = 0;
+ m_aOrderbyColumnNumber.push_back(m_aColMapping[1]);
+ m_aOrderbyAscending.push_back(SQL_DESC);
}
else
bWasSorted = TRUE;
bDistinct = TRUE;
}
- // Ohne Restriction und Sortierung RowCount bekannt.
- // if (!HasRestriction() && !IsSorted() && bShowDeleted)
- // SetRowCount(MaxRowCount());
- OSL_ENSURE(m_aOrderbyColumnNumber.size() == SQL_ORDERBYKEYS,"Maximale Anzahl der ORDER BY Columns muss derzeit genau 3 sein!");
- OKeyType eKeyType[SQL_ORDERBYKEYS];
+ OSortIndex::TKeyTypeVector eKeyType(m_aOrderbyColumnNumber.size());
OValueVector::iterator aRowIter = m_aRow->begin()+1;
- for (int i = 0; i < SQL_ORDERBYKEYS; i++)
+ ::std::vector<sal_Int32>::iterator aOrderByIter = m_aOrderbyColumnNumber.begin();
+ for (::std::vector<sal_Int16>::size_type i=0;aOrderByIter != m_aOrderbyColumnNumber.end(); ++aOrderByIter,++i)
{
- if (m_aOrderbyColumnNumber[i] == SQL_COLUMN_NOTFOUND)
- eKeyType[i] = SQL_ORDERBYKEY_NONE;
- else
+ OSL_ENSURE((sal_Int32)m_aRow->size() > *aOrderByIter,"Invalid Index");
+ switch ((m_aRow->begin()+*aOrderByIter)->getTypeKind())
{
- OSL_ENSURE((sal_Int32)m_aRow->size() > m_aOrderbyColumnNumber[i],"Invalid Index");
- switch ((m_aRow->begin()+m_aOrderbyColumnNumber[i])->getTypeKind())
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- eKeyType[i] = SQL_ORDERBYKEY_STRING;
- break;
-
- case DataType::OTHER:
- case DataType::TINYINT:
- case DataType::SMALLINT:
- case DataType::INTEGER:
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- case DataType::REAL:
- case DataType::DOUBLE:
- case DataType::DATE:
- case DataType::TIME:
- case DataType::TIMESTAMP:
- case DataType::BIT:
- eKeyType[i] = SQL_ORDERBYKEY_DOUBLE;
- break;
-
- // Andere Typen sind nicht implementiert (und damit immer FALSE)
- default:
- eKeyType[i] = SQL_ORDERBYKEY_NONE;
- OSL_ASSERT("OFILECursor::Execute: Datentyp nicht implementiert");
- break;
- }
- (*m_aEvaluateRow)[m_aOrderbyColumnNumber[i]].setBound(sal_True);
+ case DataType::CHAR:
+ case DataType::VARCHAR:
+ eKeyType[i] = SQL_ORDERBYKEY_STRING;
+ break;
+
+ case DataType::OTHER:
+ case DataType::TINYINT:
+ case DataType::SMALLINT:
+ case DataType::INTEGER:
+ case DataType::DECIMAL:
+ case DataType::NUMERIC:
+ case DataType::REAL:
+ case DataType::DOUBLE:
+ case DataType::DATE:
+ case DataType::TIME:
+ case DataType::TIMESTAMP:
+ case DataType::BIT:
+ eKeyType[i] = SQL_ORDERBYKEY_DOUBLE;
+ break;
+
+ // Andere Typen sind nicht implementiert (und damit immer FALSE)
+ default:
+ eKeyType[i] = SQL_ORDERBYKEY_NONE;
+ OSL_ASSERT("OFILECursor::Execute: Datentyp nicht implementiert");
+ break;
}
+ (*m_aEvaluateRow)[*aOrderByIter].setBound(sal_True);
}
// Nur wenn Sortierung gewuenscht, ueber alle Datensaetze iterieren und
// dabei den "Key", nach dem sortiert werden soll, in den Index eintragen:
if (IsSorted())
{
- if (!m_pSQLAnalyzer->hasRestriction() && m_aOrderbyColumnNumber[1] == SQL_COLUMN_NOTFOUND)
+ if (!m_pSQLAnalyzer->hasRestriction() && m_aOrderbyColumnNumber.size() == 1)
{
// Ist nur ein Feld fuer die Sortierung angegeben
// Und diese Feld ist indiziert, dann den Index ausnutzen
@@ -1642,9 +1634,7 @@ BOOL OResultSet::OpenImpl()
}
}
- m_pSortIndex = new OFILESortIndex(eKeyType,
- m_aOrderbyAscending,
- nMaxRowCount,m_nTextEncoding);
+ m_pSortIndex = new OSortIndex(eKeyType,m_aOrderbyAscending);
sal_Bool bOK = sal_True;
if (m_pEvaluationKeySet)
@@ -1668,8 +1658,7 @@ BOOL OResultSet::OpenImpl()
// Sortiertes Keyset erzeugen
// DELETEZ(m_pEvaluationKeySet);
m_pEvaluationKeySet = NULL;
- if(m_pFileSet)
- delete m_pFileSet;
+ m_pFileSet = NULL;
m_pFileSet = m_pSortIndex->CreateKeySet();
// if(!bDistinct)
// SetRowCount(pFileSet->count());
@@ -1677,7 +1666,7 @@ BOOL OResultSet::OpenImpl()
// Nun kann ueber den Index sortiert zugegriffen werden.
}
- if (!m_pFileSet)
+ if (!m_pFileSet.isValid())
{
m_pFileSet = new OKeySet();
@@ -1692,8 +1681,8 @@ BOOL OResultSet::OpenImpl()
m_pFileSet->push_back(i + 1);
}
}
- OSL_ENSURE(m_pFileSet,"Kein KeySet vorhanden! :-(");
- DISTINCT: if(bDistinct && m_pFileSet) // sicher ist sicher
+ OSL_ENSURE(m_pFileSet.isValid(),"Kein KeySet vorhanden! :-(");
+ DISTINCT: if(bDistinct && m_pFileSet.isValid()) // sicher ist sicher
{
OValueRow aSearchRow = new OValueVector(m_aRow->size());
OValueVector::iterator aRowIter = m_aRow->begin();
@@ -1762,7 +1751,8 @@ BOOL OResultSet::OpenImpl()
if (!bWasSorted)
{
- m_aOrderbyColumnNumber[0] = SQL_COLUMN_NOTFOUND;
+ m_aOrderbyColumnNumber.clear();
+ m_aOrderbyAscending.clear();
sort(m_pFileSet->begin(),m_pFileSet->end());
}
}