From 83df0409938d6a7a0ae7a5481441d7bcbca5cf2d Mon Sep 17 00:00:00 2001 From: Loredana Liccardo Date: Mon, 21 Jul 2014 15:19:55 +0000 Subject: [PATCH] bug fixed to retrieve columns names in a correct order (defined in the database schema) for the sampling operations, for the getTableDetails. Updates in Sampler, DatabasesManager and PostgresTableStructure classes. git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-access/DatabasesResourcesManager@98845 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../gcube/dataaccess/databases/sampler/Sampler.java | 13 +++++++++++-- .../databases/structure/PostgresTableStructure.java | 2 +- .../databases/utils/DatabaseManagement.java | 8 ++++---- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/gcube/dataaccess/databases/sampler/Sampler.java b/src/main/java/org/gcube/dataaccess/databases/sampler/Sampler.java index 819f9ee..cffc47f 100644 --- a/src/main/java/org/gcube/dataaccess/databases/sampler/Sampler.java +++ b/src/main/java/org/gcube/dataaccess/databases/sampler/Sampler.java @@ -45,8 +45,16 @@ public class Sampler { private static final String queryForRandomSampleOnTablePostgres = "select %1$s from %2$s order by random() limit 100"; // query to get columns' name - private static final String queryForColumnsPostgres = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s'"; - private static final String queryForColumnsMysql = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s'"; + private static final String queryForColumnsPostgres = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s' order by ordinal_position asc"; // order + // rows + // in + // ascending + // order + // on + // the + // ordinal_position + // attribute + private static final String queryForColumnsMysql = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s'order by ordinal_position asc"; private static final String MYSQL = "MySQL"; private static final String POSTGRES = "Postgres"; @@ -262,6 +270,7 @@ public class Sampler { // //print check // AnalysisLogger.getLogger().debug( // "DatabaseManagement->size: " + columnsSet.size()); + for (int i = 0; i < columnsSet.size(); i++) { diff --git a/src/main/java/org/gcube/dataaccess/databases/structure/PostgresTableStructure.java b/src/main/java/org/gcube/dataaccess/databases/structure/PostgresTableStructure.java index 70f2f31..ba99151 100644 --- a/src/main/java/org/gcube/dataaccess/databases/structure/PostgresTableStructure.java +++ b/src/main/java/org/gcube/dataaccess/databases/structure/PostgresTableStructure.java @@ -271,7 +271,7 @@ public class PostgresTableStructure extends AbstractTableStructure { // String queryForStructure = // "SELECT table_schema,table_name,column_name,column_default,is_nullable,data_type,character_maximum_length,character_set_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s';"; - String queryForStructure = "SELECT column_name,column_default,is_nullable,data_type,character_maximum_length,udt_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s';"; + String queryForStructure = "SELECT column_name,column_default,is_nullable,data_type,character_maximum_length,udt_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s' order by ordinal_position asc;"; return queryForStructure; diff --git a/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseManagement.java b/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseManagement.java index fc5e8b4..d0ee983 100644 --- a/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseManagement.java +++ b/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseManagement.java @@ -81,12 +81,12 @@ public class DatabaseManagement { private static final String listSchemaNameQuery = "select nspname from pg_namespace where nspname <> 'information_schema' and nspname !~ E'^pg_'"; // query to retrieve datatype columns of a database table - private static final String queryForDataTypeColumnsPostgres = "SELECT data_type FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s'"; - private static final String queryForDataTypeColumnsMysql = "SELECT data_type FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s'"; + private static final String queryForDataTypeColumnsPostgres = "SELECT data_type FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s' order by ordinal_position asc"; + private static final String queryForDataTypeColumnsMysql = "SELECT data_type FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s' order by ordinal_position asc"; // query to get columns' name - private static final String queryForColumnsPostgres = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s'"; - private static final String queryForColumnsMysql = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s'"; + private static final String queryForColumnsPostgres = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s' order by ordinal_position asc"; + private static final String queryForColumnsMysql = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s' and table_schema='%2$s' order by ordinal_position asc"; // Header Table that contains the column names of a table private String header = "";