resources/RooUsage.txt
[app.Builder.js] / src / Palete / RooDatabase.vala
index acdf41b..395545d 100644 (file)
@@ -25,6 +25,11 @@ namespace Palete {
             this.project = project;
                        this.DBTYPE = this.project.get_string_member("DBTYPE");
                        this.DBNAME = this.project.get_string_member("DBNAME");
+                       if (this.DBTYPE.length < 1) {
+                               return;
+                       }
+                       
+                       
                        try {
                                
                                        this.cnc = Gda.Connection.open_from_string (
@@ -35,11 +40,11 @@ namespace Palete {
                                        Gda.ConnectionOptions.NONE
                                );
                        } catch(Gda.ConfigError e) {
-                               print("%s\n", e.message);
+                               GLib.warning("%s\n", e.message);
                                this.cnc  = null;
                                this.DBTYPE = "";
                        } catch(Gda.ConnectionError e) {
-                               print("%s\n", e.message);
+                               GLib.warning("%s\n", e.message);
                                this.cnc  = null;
                                this.DBTYPE = "";
                        }
@@ -72,21 +77,23 @@ namespace Palete {
         
         public Json.Array readTables()
         {
-                       
-                       if (this.DBTYPE == "PostgreSQL") {
+                       try {
+                               if (this.DBTYPE == "PostgreSQL") {
                                
-                               return this.fetchAll(this.cnc.execute_select_command( 
-                                       """select c.relname FROM pg_catalog.pg_class c 
-                                               LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
-                                               WHERE c.relkind IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
-                                               AND pg_catalog.pg_table_is_visible(c.oid) 
-                                       """));
+                                       return this.fetchAll(this.cnc.execute_select_command( 
+                                               """select c.relname FROM pg_catalog.pg_class c 
+                                                       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
+                                                       WHERE c.relkind IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
+                                                       AND pg_catalog.pg_table_is_visible(c.oid) 
+                                               """));
                                
+                               }
+                               if (this.DBTYPE == "MySQL") { 
+                                       return this.fetchAll(this.cnc.execute_select_command( "SHOW TABLES" ));
+                               }
+                       } catch (GLib.Error e) {
                        }
-                       if (this.DBTYPE == "MySQL") { 
-                               return this.fetchAll(this.cnc.execute_select_command( "SHOW TABLES" ));
-                       }
-                       print("Read tables failed DBTYPE = %s\n", this.DBTYPE);
+                       GLib.warning("Read tables failed DBTYPE = %s\n", this.DBTYPE);
                        return new Json.Array();
                        
                }
@@ -104,48 +111,51 @@ namespace Palete {
                public Json.Object readTable(string tablename) 
                {
                        
-                       Json.Array res_ar;
+                       Json.Array res_ar = new Json.Array();
                        var res = new Json.Object();
-                       
-                       switch (this.DBTYPE ) {
-                               case "PostgreSQL":
+                       try {
+                               switch (this.DBTYPE ) {
+                                       case "PostgreSQL":
                                
-                                       res_ar =   this.fetchAll(this.cnc.execute_select_command( 
-                                       """
+                                               res_ar =   this.fetchAll(this.cnc.execute_select_command( 
+                                               """
                                        
-                                        SELECT 
-                                               f.attnum AS number, 
-                                               f.attname AS Field, 
-                                               f.attnum, 
-                                               CASE WHEN f.attnotnull = 't' THEN 'NO' ELSE 'YES' END AS isNull,  
-                                               pg_catalog.format_type(f.atttypid,f.atttypmod) AS Type, 
-                                               CASE WHEN p.contype = 'p' THEN 't' ELSE 'f' END AS primarykey, 
-                                               CASE WHEN p.contype = 'u' THEN 't' ELSE 'f' END AS uniquekey, 
-                                               CASE WHEN p.contype = 'f' THEN g.relname END AS foreignkey, 
-                                               CASE WHEN p.contype = 'f' THEN p.confkey END AS foreignkey_fieldnum, 
-                                               CASE WHEN p.contype = 'f' THEN g.relname END AS foreignkey, 
-                                               CASE WHEN p.contype = 'f' THEN p.conkey END AS foreignkey_connnum, 
-                                               CASE WHEN f.atthasdef = 't' THEN d.adsrc END AS default 
-                                               FROM pg_attribute f JOIN pg_class c ON c.oid = f.attrelid 
-                                                               JOIN pg_type t ON t.oid = f.atttypid 
-                                                               LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum 
-                                                               LEFT JOIN pg_namespace n ON n.oid = c.relnamespace 
-                                                               LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY ( p.conkey ) 
-                                                               LEFT JOIN pg_class AS g ON p.confrelid = g.oid 
-                                               WHERE c.relkind = 'r'::char AND n.nspname = 'public' 
-                                               AND c.relname = '""" + tablename + """' AND f.attnum > 0 ORDER BY number;
+                                                SELECT 
+                                                       f.attnum AS number, 
+                                                       f.attname AS Field, 
+                                                       f.attnum, 
+                                                       CASE WHEN f.attnotnull = 't' THEN 'NO' ELSE 'YES' END AS isNull,  
+                                                       pg_catalog.format_type(f.atttypid,f.atttypmod) AS Type, 
+                                                       CASE WHEN p.contype = 'p' THEN 't' ELSE 'f' END AS primarykey, 
+                                                       CASE WHEN p.contype = 'u' THEN 't' ELSE 'f' END AS uniquekey, 
+                                                       CASE WHEN p.contype = 'f' THEN g.relname END AS foreignkey, 
+                                                       CASE WHEN p.contype = 'f' THEN p.confkey END AS foreignkey_fieldnum, 
+                                                       CASE WHEN p.contype = 'f' THEN g.relname END AS foreignkey, 
+                                                       CASE WHEN p.contype = 'f' THEN p.conkey END AS foreignkey_connnum, 
+                                                       CASE WHEN f.atthasdef = 't' THEN d.adsrc END AS default 
+                                                       FROM pg_attribute f JOIN pg_class c ON c.oid = f.attrelid 
+                                                                       JOIN pg_type t ON t.oid = f.atttypid 
+                                                                       LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum 
+                                                                       LEFT JOIN pg_namespace n ON n.oid = c.relnamespace 
+                                                                       LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY ( p.conkey ) 
+                                                                       LEFT JOIN pg_class AS g ON p.confrelid = g.oid 
+                                                       WHERE c.relkind = 'r'::char AND n.nspname = 'public' 
+                                                       AND c.relname = '""" + tablename + """' AND f.attnum > 0 ORDER BY number;
                                                        
-                                       """));
-                                       break;
+                                               """));
+                                               break;
                                        
-                               case  "MySQL":
-                                       res_ar = this.fetchAll(this.cnc.execute_select_command( "DESCRIBE " + tablename ));
-                                       break;
+                                       case  "MySQL":
+                                               res_ar = this.fetchAll(this.cnc.execute_select_command( "DESCRIBE " + tablename ));
+                                               break;
                                
-                               default: 
-                                       return res;
-                                       break;
-                       }
+                                       default: 
+                                               return res;
+                               }
+                        } catch (GLib.Error e) {
+                                return res;
+                        }
                        
                        for (var i =0; i < res_ar.get_length(); i++) {
                                var el = res_ar.get_object_element(i);
@@ -181,27 +191,33 @@ namespace Palete {
                                TABLE_SCHEMA = '""" + this.DBNAME + """'
                        """;
                        
-                       var jarr = this.fetchAll(this.cnc.execute_select_command( 
-                                       query
-                                       ));
-                       if (jarr.get_length() < 1) {
-                               return  ret;
-                       }
-                       
+                       var jarr = new Json.Array();
+                       try {
+                          jarr = this.fetchAll(this.cnc.execute_select_command( 
+                                               query
+                               ));
+                               if (jarr.get_length() < 1) {
+                                       return  ret;
+                               }
+                       } catch (GLib.Error e) {
+                               return ret;
+                       }
                        var contents = jarr.get_string_element(0);
+                       GLib.debug(contents);
+                       if (contents == null) {
+                               return ret;
+                       }
                        
                         GLib.Regex exp = /FK\(([^\)]+)\)/;
                         string str = "";
-                        try {
-                               GLib.MatchInfo mi;
-                               if ( exp.match (contents, 0, out mi) ) {
-                                       
-                                       str = mi.fetch(1);
-                                       print("match = %s", str);
-                               }
-                       } catch (GLib.Error e) {
-                               return  ret;
+                         
+                       GLib.MatchInfo mi;
+                       if ( exp.match (contents, 0, out mi) ) {
+                               
+                               str = mi.fetch(1);
+                               GLib.debug("match = %s", str);
                        }
+                        
                        var ar = str.split("\n");
                        for (var i = 0; i < ar.length; i++) {
                                var kv = ar[i].split("=");
@@ -230,7 +246,7 @@ namespace Palete {
                                cols.add(qnr.get_column_name(i));
                        }
                        //print(Json.stringify(cols, null,4));
-                       var iter = qnr.create_iter();
+                        
                        var res = new Json.Array();
                         //print("ROWS %d\n", qnr.get_n_rows());
                        
@@ -240,9 +256,13 @@ namespace Palete {
                                //print("GOT ROW");
                                //print("COLS  %d\n", cols.size);
                                if (cols.size == 1) {
-                                       var str = qnr.get_value_at(0,r).get_string();
+                                        
                                        //print("GOT %s\n",str);
-                                       res.add_string_element(qnr.get_value_at(0,r).get_string());
+                                       try { 
+                                               res.add_string_element(qnr.get_value_at(0,r).get_string());
+                                       } catch (GLib.Error e) {
+                                               res.add_string_element("");
+                                       }
                                        continue;
                                }
                                
@@ -250,22 +270,26 @@ namespace Palete {
                                
                                for (var i = 0; i < cols.size; i++) { 
                                        var n = cols.get(i);
-                                       var val = qnr.get_value_at(i,r);
-                                       var type = val.type().name();
-                                       //print("%s\n",type);
-                                       switch(type) {
-                                               case "GdaBinary":
-                                               case "GdaBlob":
-                                                       add.set_string_member(n, "?? big string ??");
-                                                       break;
+                                       try {
+                                               var val = qnr.get_value_at(i,r);
+                                               var type = val.type().name();
+                                               //print("%s\n",type);
+                                               switch(type) {
+                                                       case "GdaBinary":
+                                                       case "GdaBlob":
+                                                               add.set_string_member(n, "?? big string ??");
+                                                               break;
                                                        
-                                               case  "GdaNull":
-                                                       add.set_null_member(n);
-                                                       break;
+                                                       case  "GdaNull":
+                                                               add.set_null_member(n);
+                                                               break;
                                                
-                                               default:
-                                                       add.set_string_member(n, val.get_string());
-                                                       break;
+                                                       default:
+                                                               add.set_string_member(n, val.get_string());
+                                                               break;
+                                               }
+                                       } catch (GLib.Error e ) {
+                                               add.set_string_member(n, "");
                                        }
                                        
                                }