Changeset: 7ea23908ca99 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7ea23908ca99
Modified Files:
        
Branch: default
Log Message:

Merge with Oct2010 branch.


diffs (123 lines):

diff -r 55a845164ef4 -r 7ea23908ca99 clients/src/mapiclient/dump.c
--- a/clients/src/mapiclient/dump.c     Thu Sep 09 13:12:14 2010 +0200
+++ b/clients/src/mapiclient/dump.c     Thu Sep 09 14:14:47 2010 +0200
@@ -106,6 +106,42 @@
 }
 
 static int
+has_systemfunctions(Mapi mid)
+{
+       MapiHdl hdl;
+       int ret;
+
+       if ((hdl = mapi_query(mid,
+                             "SELECT \"t\".\"id\" "
+                             "FROM \"_tables\" \"t\", \"schemas\" \"s\" "
+                             "WHERE \"t\".\"name\" = 'systemfunctions' AND "
+                                   "\"t\".\"schema_id\" = \"s\".\"id\" AND "
+                                   "\"s\".\"name\" = 'sys'")) == NULL ||
+           mapi_error(mid))
+               goto bailout;
+       ret = mapi_get_row_count(hdl) == 1;
+       while ((mapi_fetch_row(hdl)) != 0) {
+               if (mapi_error(mid))
+                       goto bailout;
+       }
+       if (mapi_error(mid))
+               goto bailout;
+       mapi_close_handle(hdl);
+       return ret;
+
+  bailout:
+       if (hdl) {
+               if (mapi_result_error(hdl))
+                       mapi_explain_result(hdl, stderr);
+               else
+                       mapi_explain_query(hdl, stderr);
+               mapi_close_handle(hdl);
+       } else
+               mapi_explain(mid, stderr);
+       return 0;
+}
+
+static int
 dump_foreign_keys(Mapi mid, char *schema, char *tname, stream *toConsole)
 {
        MapiHdl hdl = NULL;
@@ -880,20 +916,19 @@
                     "\"sys\".\"functions\" \"f\" "
                "WHERE \"f\".\"id\" > 2000 AND "
                      "\"s\".\"id\" = \"f\".\"schema_id\""
-                     "%s%s%s "
+                     "%s%s%s%s "
                "ORDER BY \"f\".\"id\"";
        MapiHdl hdl;
        char *q;
+       size_t l;
 
-       if (sname != NULL) {
-               size_t l = sizeof(functions) + strlen(sname) + 20;
-
-               q = malloc(l);
-               snprintf(q, l, functions, " AND \"s\".\"name\" = '", sname, 
"'");
-       } else {
-               q = malloc(sizeof(functions));
-               snprintf(q, sizeof(functions), functions, "", "", "");
-       }
+       l = sizeof(functions) + (sname ? strlen(sname) : 0) + 100;
+       q = malloc(l);
+       snprintf(q, l, functions,
+                sname ? " AND \"s\".\"name\" = '" : "",
+                sname ? sname : "",
+                sname ? "'" : "",
+                has_systemfunctions(mid) ? " AND \"f\".\"id\" NOT IN (SELECT 
\"function_id\" FROM \"sys\".\"systemfunctions\")" : "");
        hdl = mapi_query(mid, q);
        free(q);
        if (hdl == NULL || mapi_error(mid))
@@ -1046,6 +1081,7 @@
                             "\"sys\".\"functions\" \"f\" "
                        "WHERE \"f\".\"sql\" = TRUE AND "
                              "\"s\".\"id\" = \"f\".\"schema_id\" "
+                             "%s"
                        "UNION "
                        "SELECT \"s\".\"name\" AS \"sname\", "
                               "\"t\".\"name\" AS \"name\", "
@@ -1073,6 +1109,7 @@
        MapiHdl hdl;
        int create_hash_func = 0;
        int rc = 0;
+       char query[1024];
 
        /* start a transaction for the dump */
        if (!describe)
@@ -1230,7 +1267,9 @@
        mapi_close_handle(hdl);
 
        /* dump tables */
-       if ((hdl = mapi_query(mid, tables_and_functions)) == NULL ||
+       snprintf(query, sizeof(query), tables_and_functions,
+                has_systemfunctions(mid) ? "AND \"f\".\"id\" NOT IN (SELECT 
\"function_id\" FROM \"sys\".\"systemfunctions\") " : "");
+       if ((hdl = mapi_query(mid, query)) == NULL ||
            mapi_error(mid))
                goto bailout;
 
diff -r 55a845164ef4 -r 7ea23908ca99 sql/src/sql/createdb.mx
--- a/sql/src/sql/createdb.mx   Thu Sep 09 13:12:14 2010 +0200
+++ b/sql/src/sql/createdb.mx   Thu Sep 09 14:14:47 2010 +0200
@@ -90,4 +90,6 @@
 parts.sql      -- testing only
 replication.sql        -- testing only
 @sql
+...@include system.sql
+
 commit;
diff -r 55a845164ef4 -r 7ea23908ca99 sql/src/sql/system.sql
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/src/sql/system.sql    Thu Sep 09 14:14:47 2010 +0200
@@ -0,0 +1,6 @@
+create table systemfunctions (function_id)
+       as (select id from functions) with data;
+update _tables
+       set system = true
+       where name = 'systemfunctions'
+               and schema_id = (select id from schemas where name = 'sys');
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to