Kaydet (Commit) cd30d13c authored tarafından Andrzej J.R. Hunt's avatar Andrzej J.R. Hunt

Join on correct fields for getColumns() (firebird-sdbc)

Change-Id: I2e3f260b0f043806702fb03ff74c1ef6bbe9cc62
üst 2d134a5f
...@@ -182,7 +182,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength() throw(SQLException ...@@ -182,7 +182,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength() throw(SQLException
sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength() throw(SQLException, RuntimeException) sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength() throw(SQLException, RuntimeException)
{ {
return 32; return 31;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTablesInSelect( ) throw(SQLException, RuntimeException) sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTablesInSelect( ) throw(SQLException, RuntimeException)
...@@ -877,32 +877,42 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( ...@@ -877,32 +877,42 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
"fields.RDB$NULL_FLAG " // 9 "fields.RDB$NULL_FLAG " // 9
"FROM RDB$RELATION_FIELDS relfields " "FROM RDB$RELATION_FIELDS relfields "
"JOIN RDB$FIELDS fields " "JOIN RDB$FIELDS fields "
"on (relfields.RDB$FIELD_NAME = fields.RDB$FIELD_NAME) "); "on (fields.RDB$FIELD_NAME = relfields.RDB$FIELD_SOURCE) ");
if (!tableNamePattern.isEmpty() && !columnNamePattern.isEmpty())
{
queryBuf.append("WHERE ");
}
if (!tableNamePattern.isEmpty()) if (!tableNamePattern.isEmpty())
{ {
OUString sAppend; OUString sAppend;
if (tableNamePattern.match("%")) if (tableNamePattern.match("%"))
sAppend = "AND RDB$RELATION_NAME LIKE '%' "; sAppend = "relfields.RDB$RELATION_NAME LIKE '%' ";
else else
sAppend = "AND RDB$RELATION_NAME = '%' "; sAppend = "relfields.RDB$RELATION_NAME = '%' ";
queryBuf.append(sAppend.replaceAll("%", tableNamePattern)); queryBuf.append(sAppend.replaceAll("%", tableNamePattern));
} }
if (!columnNamePattern.isEmpty()) if (!columnNamePattern.isEmpty())
{ {
if (!tableNamePattern.isEmpty())
queryBuf.append("AND ");
OUString sAppend; OUString sAppend;
if (columnNamePattern.match("%")) if (columnNamePattern.match("%"))
sAppend = "AND RDB$FIELD_NAME LIKE '%' "; sAppend = "relfields.RDB$FIELD_NAME LIKE '%' ";
else else
sAppend = "AND RDB$FIELD_NAME = '%' "; sAppend = "relfields.RDB$FIELD_NAME = '%' ";
queryBuf.append(sAppend.replaceAll("%", columnNamePattern)); queryBuf.append(sAppend.replaceAll("%", columnNamePattern));
} }
OUString query = queryBuf.makeStringAndClear(); OUString query = queryBuf.makeStringAndClear();
SAL_INFO("connectivity.firebird", "Retrieving columns with " <<
OUStringToOString(query,RTL_TEXTENCODING_UTF8).getStr());
uno::Reference< XStatement > statement = m_pConnection->createStatement(); uno::Reference< XStatement > statement = m_pConnection->createStatement();
uno::Reference< XResultSet > rs = statement->executeQuery(query.getStr()); uno::Reference< XResultSet > rs = statement->executeQuery(query.getStr());
uno::Reference< XRow > xRow( rs, UNO_QUERY_THROW ); uno::Reference< XRow > xRow( rs, UNO_QUERY_THROW );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment