Title: [664] trunk/activerecord-jdbc: Make sure PG only returns columns from a table in the current schema
Revision
664
Author
olabini
Date
2007-07-05 06:35:08 -0400 (Thu, 05 Jul 2007)

Log Message

Make sure PG only returns columns from a table in the current schema

Modified Paths


Diff

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb (663 => 664)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb	2007-07-04 23:48:05 UTC (rev 663)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb	2007-07-05 10:35:08 UTC (rev 664)
@@ -147,6 +147,10 @@
       id_value || last_insert_id(table, sequence_name || default_sequence_name(table, pk))
     end
 
+    def columns(table_name, name=nil)
+      super(table_name, name, "public")
+    end
+    
     def last_insert_id(table, sequence_name)
       Integer(select_value("SELECT currval('#{sequence_name}')"))
     end

Modified: trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java (663 => 664)


--- trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java	2007-07-04 23:48:05 UTC (rev 663)
+++ trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java	2007-07-05 10:35:08 UTC (rev 664)
@@ -227,20 +227,25 @@
             try {
                 DatabaseMetaData metadata = c.getMetaData();
                 String schemaName = null;
+                if(args.length>2) {
+                    schemaName = args[2].toString();
+                }
                 if(metadata.storesUpperCaseIdentifiers()) {
                     table_name = table_name.toUpperCase();
                 } else if(metadata.storesLowerCaseIdentifiers()) {
                     table_name = table_name.toLowerCase();
                 }
-                ResultSet schemas = metadata.getSchemas();
-                String username = metadata.getUserName();
-                while(schemas.next()) {
-                    if(schemas.getString(1).equalsIgnoreCase(username)) {
-                        schemaName = schemas.getString(1);
-                        break;
+                if(schemaName == null) {
+                    ResultSet schemas = metadata.getSchemas();
+                    String username = metadata.getUserName();
+                    while(schemas.next()) {
+                        if(schemas.getString(1).equalsIgnoreCase(username)) {
+                            schemaName = schemas.getString(1);
+                            break;
+                        }
                     }
+                    schemas.close();
                 }
-                schemas.close();
                 
                 ResultSet results = metadata.getColumns(c.getCatalog(),schemaName,table_name,null);
                 return unmarshal_columns(recv, metadata, results);
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to