[Libreoffice-commits] core.git: 5 commits - connectivity/source
Andrzej J.R. Hunt
andrzej at ahunt.org
Mon Jul 29 08:59:19 PDT 2013
connectivity/source/drivers/firebird/FDatabaseMetaData.cxx | 394 ++++++++++--
connectivity/source/drivers/firebird/FResultSet.cxx | 4
connectivity/source/drivers/firebird/FResultSetMetaData.cxx | 5
3 files changed, 354 insertions(+), 49 deletions(-)
New commits:
commit 136f3bb1795048adc3ca5ba28d44809e5b791701
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Mon Jul 29 17:43:03 2013 +0200
Implement a large chunk of getTypeInfo. (firebird-sdbc)
Change-Id: Ide63479943dad50000b72bc132f336bace11a09c
diff --git a/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx b/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
index 436c4d1..539df19 100644
--- a/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
@@ -800,46 +800,175 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( ) throw
{
return NULL;
}
-// -------------------------------------------------------------------------
-uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo( ) throw(SQLException, RuntimeException)
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
+ throw(SQLException, RuntimeException)
{
- SAL_INFO("connectivity.firebird", "getTypeInfo().");
+ SAL_INFO("connectivity.firebird", "getTypeInfo()");
// this returns an empty resultset where the column-names are already set
// in special the metadata of the resultset already returns the right columns
- ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo);
+ ODatabaseMetaDataResultSet* pResultSet =
+ new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo);
uno::Reference< XResultSet > xResultSet = pResultSet;
- static ODatabaseMetaDataResultSet::ORows aRows;
+ static ODatabaseMetaDataResultSet::ORows aResults;
- if(aRows.empty())
+ if(aResults.empty())
{
- ODatabaseMetaDataResultSet::ORow aRow;
- aRow.reserve(19);
- aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
- aRow.push_back(new ORowSetValueDecorator(OUString("VARCHAR(100)")));
- aRow.push_back(new ORowSetValueDecorator(DataType::VARCHAR));
- aRow.push_back(new ORowSetValueDecorator((sal_Int32)s_nCHAR_OCTET_LENGTH));
- aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue());
- aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue());
- aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
- // aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnValue::NULLABLE));
- aRow.push_back(ODatabaseMetaDataResultSet::get1Value());
- aRow.push_back(ODatabaseMetaDataResultSet::get1Value());
- aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnSearch::CHAR));
- aRow.push_back(ODatabaseMetaDataResultSet::get1Value());
- aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
- aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
- aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
- aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
- aRow.push_back(ODatabaseMetaDataResultSet::get0Value());
- aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
- aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
- aRow.push_back(new ORowSetValueDecorator((sal_Int32)10));
-
- aRows.push_back(aRow);
-
+ ODatabaseMetaDataResultSet::ORow aRow(19);
+
+ // Common data
+ aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue(); // Literal quote marks
+ aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue(); // Literal quote marks
+ aRow[6] = new ORowSetValueDecorator(); // Create Params
+ aRow[7] = new ORowSetValueDecorator(sal_Bool(true)); // Nullable
+ aRow[8] = new ORowSetValueDecorator(sal_Bool(true)); // Case sensitive
+ aRow[10] = new ORowSetValueDecorator(sal_Bool(false)); // Is unsigned
+ // Localised Type Name -- TODO: implement (but can be null):
+ aRow[13] = new ORowSetValueDecorator();
+ aRow[16] = new ORowSetValueDecorator(); // Unused
+ aRow[17] = new ORowSetValueDecorator(); // Unused
+ aRow[18] = new ORowSetValueDecorator(sal_Int16(10));// Radix
+
+ // TODO: sort by DATA_TYPE
+
+ // SQL_TEXT
+ aRow[1] = new ORowSetValueDecorator(OUString("CHAR"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_TEXT));
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(32767)); // Prevision = max length
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::FULL)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(true)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(false)); // Autoincrement
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ aResults.push_back(aRow);
+
+ // SQL_VARYING
+ aRow[1] = new ORowSetValueDecorator(OUString("VARCHAR"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_VARYING));
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(32767)); // Prevision = max length
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::FULL)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(true)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(false)); // Autoincrement
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ aResults.push_back(aRow);
+
+ // Integer Types common
+ {
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::FULL)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(true)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(true)); // Autoincrement
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ }
+ // SQL_SHORT
+ aRow[1] = new ORowSetValueDecorator(OUString("SMALLINT"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_SHORT));
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(5)); // Prevision
+ aResults.push_back(aRow);
+ // SQL_LONG
+ aRow[1] = new ORowSetValueDecorator(OUString("INTEGER"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_LONG));
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(10)); // Precision
+ aResults.push_back(aRow);
+ // SQL_INT64
+ aRow[1] = new ORowSetValueDecorator(OUString("BIGINT"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_INT64));
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(20)); // Precision
+ aResults.push_back(aRow);
+
+ // Decimal Types common
+ {
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::FULL)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(true)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(true)); // Autoincrement
+ }
+ // SQL_FLOAT
+ aRow[1] = new ORowSetValueDecorator(OUString("FLOAT"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_FLOAT));
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(7)); // Precision
+ aRow[14] = new ORowSetValueDecorator(sal_Int16(1)); // Minimum scale
+ aRow[15] = new ORowSetValueDecorator(sal_Int16(7)); // Max scale
+ aResults.push_back(aRow);
+ // SQL_DOUBLE
+ aRow[1] = new ORowSetValueDecorator(OUString("REAL"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_DOUBLE));
+ aRow[3] = new ORowSetValueDecorator(sal_Int16(15)); // Precision
+ aRow[14] = new ORowSetValueDecorator(sal_Int16(1)); // Minimum scale
+ aRow[15] = new ORowSetValueDecorator(sal_Int16(15)); // Max scale
+ aResults.push_back(aRow);
+// // SQL_D_FLOAT
+// aRow[1] = new ORowSetValueDecorator(getColumnTypeNameFromFBType(SQL_D_FLOAT));
+// aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_D_FLOAT));
+// aRow[3] = new ORowSetValueDecorator(sal_Int16(15)); // Precision
+// aRow[14] = new ORowSetValueDecorator(sal_Int16(1)); // Minimum scale
+// aRow[15] = new ORowSetValueDecorator(sal_Int16(15)); // Max scale
+// aResults.push_back(aRow);
+ // TODO: no idea whether D_FLOAT corresponds to an sql type
+
+ // SQL_TIMESTAMP
+ // TODO: precision?
+ aRow[1] = new ORowSetValueDecorator(OUString("timestamp"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_TIMESTAMP));
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); // Prevision = max length
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::FULL)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(false)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(false)); // Autoincrement
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ aResults.push_back(aRow);
+
+ // SQL_TYPE_TIME
+ // TODO: precision?
+ aRow[1] = new ORowSetValueDecorator(OUString("TIME"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_TYPE_TIME));
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); // Prevision = max length
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::FULL)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(false)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(false)); // Autoincrement
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ aResults.push_back(aRow);
+
+ // SQL_TYPE_DATE
+ // TODO: precision?
+ aRow[1] = new ORowSetValueDecorator(OUString("DATE"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_TYPE_DATE));
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); // Prevision = max length
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::FULL)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(false)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(false)); // Autoincrement
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ aResults.push_back(aRow);
+
+ // SQL_BLOB
+ // TODO: precision?
+ aRow[1] = new ORowSetValueDecorator(OUString("BLOB"));
+ aRow[2] = new ORowSetValueDecorator(getColumnTypeFromFBType(SQL_BLOB));
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(0)); // Prevision = max length
+ aRow[9] = new ORowSetValueDecorator(
+ sal_Int16(ColumnSearch::NONE)); // Searchable
+ aRow[11] = new ORowSetValueDecorator(sal_Bool(false)); // Can be money value
+ aRow[12] = new ORowSetValueDecorator(sal_Bool(false)); // Autoincrement
+ aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
+ aResults.push_back(aRow);
+
+ // TODO: complete
+// case SQL_ARRAY:
+// case SQL_NULL:
+// case SQL_QUAD: // Is a "Blob ID" according to the docs
}
- pResultSet->setRows(aRows);
+ pResultSet->setRows(aResults);
return xResultSet;
}
commit e1b645e62f836e4e43d9722822d50f75603ba5a6
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Mon Jul 29 11:28:36 2013 +0200
Fix typo.
Change-Id: I1473facceb0b08289052282b93a6e1fb46f0ea14
diff --git a/connectivity/source/drivers/firebird/FResultSetMetaData.cxx b/connectivity/source/drivers/firebird/FResultSetMetaData.cxx
index a833085..f699b8f 100644
--- a/connectivity/source/drivers/firebird/FResultSetMetaData.cxx
+++ b/connectivity/source/drivers/firebird/FResultSetMetaData.cxx
@@ -71,7 +71,7 @@ sal_Bool SAL_CALL OResultSetMetaData::isCaseSensitive(sal_Int32 column)
// there remains some ambiguity if there is another mixed-case-named column
// of the same name. For safety always assume case insensitive.
(void) column;
- return sal_False;
+ return sal_True;
}
OUString SAL_CALL OResultSetMetaData::getSchemaName(sal_Int32 column)
commit 97a142d6df0a38972e548e5348e53c357adc5eea
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Mon Jul 29 11:20:50 2013 +0200
Implement getColumnPrivileges. (firebird-sdbc)
Change-Id: I31e179462a06db135467e8b78e4b550cc603a04a
diff --git a/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx b/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
index f245117..436c4d1 100644
--- a/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
@@ -848,16 +848,106 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas()
{
return NULL;
}
-// -------------------------------------------------------------------------
+
uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
- const Any& catalog, const OUString& schema, const OUString& table,
- const OUString& columnNamePattern ) throw(SQLException, RuntimeException)
+ const Any& aCatalog,
+ const OUString& sSchema,
+ const OUString& sTable,
+ const OUString& sColumnNamePattern)
+ throw(SQLException, RuntimeException)
{
- (void) catalog;
- (void) schema;
- (void) table;
- (void) columnNamePattern;
- return NULL;
+ (void) aCatalog;
+ (void) sSchema;
+
+ SAL_INFO("connectivity.firebird", "getColumnPrivileges() with "
+ "Table: " << sTable
+ << " & ColumnNamePattern: " << sColumnNamePattern);
+
+ ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables);
+ uno::Reference< XResultSet > xResultSet = pResultSet;
+ uno::Reference< XStatement > statement = m_pConnection->createStatement();
+
+ static const OUString wld("%");
+ OUStringBuffer queryBuf(
+ "SELECT "
+ "priv.RDB$RELATION_NAME, " // 1 Table name
+ "priv.RDB$GRANTOR," // 2
+ "priv.RDB$USER, " // 3 Grantee
+ "priv.RDB$PRIVILEGE, " // 4
+ "priv.RDB$GRANT_OPTION, " // 5 is Grantable
+ "priv.RDB$FIELD_NAME " // 6 Column name
+ "FROM RDB$USER_PRIVILEGES priv ");
+
+ {
+ OUString sAppend = "WHERE priv.RDB$RELATION_NAME = '%' ";
+ queryBuf.append(sAppend.replaceAll("%", sTable));
+ }
+ if (!sColumnNamePattern.isEmpty())
+ {
+ OUString sAppend;
+ if (sColumnNamePattern.match(wld))
+ sAppend = "AND priv.RDB$FIELD_NAME LIKE '%' ";
+ else
+ sAppend = "AND priv.RDB$FIELD_NAME = '%' ";
+
+ queryBuf.append(sAppend.replaceAll(wld, sColumnNamePattern));
+ }
+
+ queryBuf.append(" ORDER BY priv.RDB$FIELD, "
+ "priv.RDB$PRIVILEGE");
+
+ OUString query = queryBuf.makeStringAndClear();
+
+ uno::Reference< XResultSet > rs = statement->executeQuery(query.getStr());
+ uno::Reference< XRow > xRow( rs, UNO_QUERY_THROW );
+ ODatabaseMetaDataResultSet::ORows aResults;
+
+ while( rs->next() )
+ {
+ ODatabaseMetaDataResultSet::ORow aCurrentRow(8);
+
+ // 1. TABLE_CAT
+ aCurrentRow.push_back(new ORowSetValueDecorator());
+ // 2. TABLE_SCHEM
+ aCurrentRow.push_back(new ORowSetValueDecorator());
+
+ // 3. TABLE_NAME
+ {
+ OUString sTableName = xRow->getString(1);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sTableName));
+ }
+ // 3. COLUMN_NAME
+ {
+ OUString sColumnName = xRow->getString(6);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sColumnName));
+ }
+ // 4. GRANTOR
+ {
+ OUString sGrantor = xRow->getString(2);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sGrantor));
+ }
+ // 5. GRANTEE
+ {
+ OUString sGrantee = xRow->getString(3);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sGrantee));
+ }
+ // 6. Privilege
+ {
+ OUString sPrivilege = xRow->getString(4);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sPrivilege));
+ }
+ // 7. IS_GRANTABLE
+ {
+ sal_Bool bIsGrantable = xRow->getBoolean(5);
+ aCurrentRow.push_back(new ORowSetValueDecorator(bIsGrantable));
+ }
+
+ aResults.push_back(aCurrentRow);
+ }
+
+ pResultSet->setRows( aResults );
+
+ return xResultSet;
}
uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
@@ -1256,6 +1346,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
uno::Reference< XResultSet > xResultSet = pResultSet;
uno::Reference< XStatement > statement = m_pConnection->createStatement();
+ // TODO: column specific privileges are included, we may need
+ // to have WHERE RDB$FIELD_NAME = NULL or similar.
static const OUString wld("%");
OUStringBuffer queryBuf(
"SELECT "
@@ -1271,9 +1363,9 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
{
OUString sAppend;
if (sTableNamePattern.match(wld))
- sAppend = "AND priv.RDB$RELATION_NAME LIKE '%' ";
+ sAppend = "WHERE priv.RDB$RELATION_NAME LIKE '%' ";
else
- sAppend = "AND priv.RDB$RELATION_NAME = '%' ";
+ sAppend = "WHERE priv.RDB$RELATION_NAME = '%' ";
queryBuf.append(sAppend.replaceAll(wld, sTableNamePattern));
}
commit 1db4ed1bc95ff4ed78b4e8fbada4a94afeaabfd6
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Mon Jul 29 11:02:45 2013 +0200
Implement getTablePrivileges. (firebird-sdbc)
Change-Id: Id5bb79fdd01014594582de2bad6e16142259b0ce
diff --git a/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx b/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
index ff90350..f245117 100644
--- a/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/FDatabaseMetaData.cxx
@@ -1239,14 +1239,95 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getBestRowIdentifier(
(void) nullable;
return NULL;
}
-// -------------------------------------------------------------------------
+
uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
- const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern ) throw(SQLException, RuntimeException)
+ const Any& aCatalog,
+ const OUString& sSchemaPattern,
+ const OUString& sTableNamePattern)
+ throw(SQLException, RuntimeException)
{
- (void) catalog;
- (void) schemaPattern;
- (void) tableNamePattern;
- return NULL;
+ (void) aCatalog;
+ (void) sSchemaPattern;
+
+ SAL_INFO("connectivity.firebird", "getTablePrivileges() with "
+ "TableNamePattern: " << sTableNamePattern);
+
+ ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables);
+ uno::Reference< XResultSet > xResultSet = pResultSet;
+ uno::Reference< XStatement > statement = m_pConnection->createStatement();
+
+ static const OUString wld("%");
+ OUStringBuffer queryBuf(
+ "SELECT "
+ "priv.RDB$RELATION_NAME, " // 1
+ "priv.RDB$GRANTOR," // 2
+ "priv.RDB$USER, " // 3 Grantee
+ "priv.RDB$PRIVILEGE, " // 4
+ "priv.RDB$GRANT_OPTION " // 5 is Grantable
+ "FROM RDB$USER_PRIVILEGES priv ");
+ // "WHERE (priv.RDB$USER = ?????????)"
+
+ if (!sTableNamePattern.isEmpty())
+ {
+ OUString sAppend;
+ if (sTableNamePattern.match(wld))
+ sAppend = "AND priv.RDB$RELATION_NAME LIKE '%' ";
+ else
+ sAppend = "AND priv.RDB$RELATION_NAME = '%' ";
+
+ queryBuf.append(sAppend.replaceAll(wld, sTableNamePattern));
+ }
+ queryBuf.append(" ORDER BY priv.RDB$RELATION_TYPE, "
+ "priv.RDB$RELATION_NAME, "
+ "priv.RDB$PRIVILEGE");
+
+ OUString query = queryBuf.makeStringAndClear();
+
+ uno::Reference< XResultSet > rs = statement->executeQuery(query.getStr());
+ uno::Reference< XRow > xRow( rs, UNO_QUERY_THROW );
+ ODatabaseMetaDataResultSet::ORows aResults;
+
+ while( rs->next() )
+ {
+ ODatabaseMetaDataResultSet::ORow aCurrentRow(7);
+
+ // 1. TABLE_CAT
+ aCurrentRow.push_back(new ORowSetValueDecorator());
+ // 2. TABLE_SCHEM
+ aCurrentRow.push_back(new ORowSetValueDecorator());
+
+ // 3. TABLE_NAME
+ {
+ OUString sTableName = xRow->getString(1);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sTableName));
+ }
+ // 4. GRANTOR
+ {
+ OUString sGrantor = xRow->getString(2);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sGrantor));
+ }
+ // 5. GRANTEE
+ {
+ OUString sGrantee = xRow->getString(3);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sGrantee));
+ }
+ // 6. Privilege
+ {
+ OUString sPrivilege = xRow->getString(4);
+ aCurrentRow.push_back(new ORowSetValueDecorator(sPrivilege));
+ }
+ // 7. IS_GRANTABLE
+ {
+ sal_Bool bIsGrantable = xRow->getBoolean(5);
+ aCurrentRow.push_back(new ORowSetValueDecorator(bIsGrantable));
+ }
+
+ aResults.push_back(aCurrentRow);
+ }
+
+ pResultSet->setRows( aResults );
+
+ return xResultSet;
}
// -------------------------------------------------------------------------
uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference(
commit 03919cfa7904be4c6312b0ecdd7129990fa554c6
Author: Andrzej J.R. Hunt <andrzej at ahunt.org>
Date: Mon Jul 29 09:18:26 2013 +0200
Use column name for getColumnLabel (firebird-sdbc).
Change-Id: I2e92c5dbdfe4cb9d8441e2d120b139fe97209d3e
diff --git a/connectivity/source/drivers/firebird/FResultSet.cxx b/connectivity/source/drivers/firebird/FResultSet.cxx
index fd9843f..ca0ded1 100644
--- a/connectivity/source/drivers/firebird/FResultSet.cxx
+++ b/connectivity/source/drivers/firebird/FResultSet.cxx
@@ -321,6 +321,10 @@ sal_Int32 SAL_CALL OResultSet::findColumn(const OUString& columnName)
break;
}
+ // TODO: add appropriate error
+ if (i > nLen)
+ throw SQLException();
+
return i;
}
// -------------------------------------------------------------------------
diff --git a/connectivity/source/drivers/firebird/FResultSetMetaData.cxx b/connectivity/source/drivers/firebird/FResultSetMetaData.cxx
index 4a23f99..a833085 100644
--- a/connectivity/source/drivers/firebird/FResultSetMetaData.cxx
+++ b/connectivity/source/drivers/firebird/FResultSetMetaData.cxx
@@ -120,8 +120,7 @@ OUString SAL_CALL OResultSetMetaData::getColumnLabel(sal_Int32 column)
throw(SQLException, RuntimeException)
{
// TODO: clarify what this is -- probably not the alias
- (void) column;
- return OUString();
+ return getColumnName(column);
}
OUString SAL_CALL OResultSetMetaData::getColumnServiceName(sal_Int32 column)
More information about the Libreoffice-commits
mailing list