|
|
@@ -503,7 +503,11 @@ namespace InvercargillSql.Dialects {
|
|
|
var columns_sql = new StringBuilder();
|
|
|
columns_sql.append("SELECT column_name, data_type, is_nullable, column_default, is_identity ");
|
|
|
columns_sql.append("FROM information_schema.columns ");
|
|
|
- columns_sql.append("WHERE table_name = :table_name ");
|
|
|
+ // Restrict to the first schema on the search path: tables with
|
|
|
+ // the same name in other schemas (e.g. leftover test schemas)
|
|
|
+ // must not leak duplicate columns into the introspected shape.
|
|
|
+ columns_sql.append("WHERE table_schema = current_schema() ");
|
|
|
+ columns_sql.append(" AND table_name = :table_name ");
|
|
|
columns_sql.append("ORDER BY ordinal_position");
|
|
|
var command = connection.create_command(columns_sql.str);
|
|
|
command.with_parameter<string>("table_name", table_name);
|
|
|
@@ -559,7 +563,9 @@ namespace InvercargillSql.Dialects {
|
|
|
pk_sql.append("JOIN information_schema.key_column_usage kcu ");
|
|
|
pk_sql.append(" ON tc.constraint_name = kcu.constraint_name ");
|
|
|
pk_sql.append(" AND tc.table_name = kcu.table_name ");
|
|
|
+ pk_sql.append(" AND tc.table_schema = kcu.table_schema ");
|
|
|
pk_sql.append("WHERE tc.constraint_type = 'PRIMARY KEY' ");
|
|
|
+ pk_sql.append(" AND tc.table_schema = current_schema() ");
|
|
|
pk_sql.append(" AND tc.table_name = :table_name ");
|
|
|
pk_sql.append("ORDER BY kcu.ordinal_position");
|
|
|
var pk_command = connection.create_command(pk_sql.str);
|