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
sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTableNameLength() throw(SQLException, RuntimeException)
{
return 32;
return 31;
}
// -------------------------------------------------------------------------
sal_Int32 SAL_CALL ODatabaseMetaData::getMaxTablesInSelect( ) throw(SQLException, RuntimeException)
......@@ -877,32 +877,42 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
"fields.RDB$NULL_FLAG " // 9
"FROM RDB$RELATION_FIELDS relfields "
"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())
{
OUString sAppend;
if (tableNamePattern.match("%"))
sAppend = "AND RDB$RELATION_NAME LIKE '%' ";
sAppend = "relfields.RDB$RELATION_NAME LIKE '%' ";
else
sAppend = "AND RDB$RELATION_NAME = '%' ";
sAppend = "relfields.RDB$RELATION_NAME = '%' ";
queryBuf.append(sAppend.replaceAll("%", tableNamePattern));
}
if (!columnNamePattern.isEmpty())
{
if (!tableNamePattern.isEmpty())
queryBuf.append("AND ");
OUString sAppend;
if (columnNamePattern.match("%"))
sAppend = "AND RDB$FIELD_NAME LIKE '%' ";
sAppend = "relfields.RDB$FIELD_NAME LIKE '%' ";
else
sAppend = "AND RDB$FIELD_NAME = '%' ";
sAppend = "relfields.RDB$FIELD_NAME = '%' ";
queryBuf.append(sAppend.replaceAll("%", columnNamePattern));
}
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< XResultSet > rs = statement->executeQuery(query.getStr());
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