Changeset: 9fa3ce064d6f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9fa3ce064d6f
Modified Files:
clients/mapiclient/dump.c
clients/mapiclient/mclient.c
Branch: Jan2014
Log Message:
(Mostly) align Jan2014 and default branches for dumping.
This enables some forward compatibility in msqldump.
diffs (truncated from 1357 to 300 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -34,8 +34,7 @@ quoted_print(stream *f, const char *s, c
while (*s) {
switch (*s) {
case '\\':
- mnstr_write(f, "\\", 1, 1);
- mnstr_write(f, s, 1, 1);
+ mnstr_write(f, "\\\\", 1, 2);
break;
case '"':
if (!singleq)
@@ -80,7 +79,7 @@ get_schema(Mapi mid)
char *sname = NULL;
MapiHdl hdl;
- if ((hdl = mapi_query(mid, "SELECT \"current_schema\"")) == NULL ||
mapi_error(mid))
+ if ((hdl = mapi_query(mid, "SELECT current_schema")) == NULL ||
mapi_error(mid))
goto bailout;
while ((mapi_fetch_row(hdl)) != 0) {
sname = mapi_fetch_field(hdl, 0);
@@ -108,6 +107,7 @@ get_schema(Mapi mid)
return NULL;
}
+/* return TRUE if the sys.systemfunctions table exists */
int
has_systemfunctions(Mapi mid)
{
@@ -115,12 +115,53 @@ has_systemfunctions(Mapi mid)
int ret;
if ((hdl = mapi_query(mid,
- "SELECT \"t\".\"id\" "
- "FROM \"sys\".\"_tables\" \"t\","
- "\"sys\".\"schemas\" \"s\" "
- "WHERE \"t\".\"name\" = 'systemfunctions' AND "
- "\"t\".\"schema_id\" = \"s\".\"id\" AND "
- "\"s\".\"name\" = 'sys'")) == NULL ||
+ "SELECT t.id "
+ "FROM sys._tables t, "
+ "sys.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;
+}
+
+/* return TRUE if the sys.schemas table has a column named system */
+static int
+has_schemas_system(Mapi mid)
+{
+ MapiHdl hdl;
+ int ret;
+
+ if ((hdl = mapi_query(mid,
+ "SELECT c.id "
+ "FROM sys._columns c, "
+ "sys._tables t, "
+ "sys.schemas s "
+ "WHERE c.name = 'system' AND "
+ "c.table_id = t.id AND "
+ "t.name = 'schemas' AND "
+ "t.schema_id = s.id AND "
+ "s.name = 'sys'")) == NULL ||
mapi_error(mid))
goto bailout;
ret = mapi_get_row_count(hdl) == 1;
@@ -157,92 +198,92 @@ dump_foreign_keys(Mapi mid, const char *
maxquerylen = 1024 + strlen(tname) + strlen(schema);
query = malloc(maxquerylen);
snprintf(query, maxquerylen,
- "SELECT \"ps\".\"name\"," /* 0 */
- "\"pkt\".\"name\"," /* 1 */
- "\"pkkc\".\"name\"," /* 2 */
- "\"fkkc\".\"name\"," /* 3 */
- "\"fkkc\".\"nr\"," /* 4 */
- "\"fkk\".\"name\"," /* 5 */
- "\"fkk\".\"action\"," /* 6 */
- "\"fs\".\"name\"," /* 7 */
- "\"fkt\".\"name\" " /* 8 */
- "FROM \"sys\".\"_tables\" \"fkt\","
- "\"sys\".\"objects\" \"fkkc\","
- "\"sys\".\"keys\" \"fkk\","
- "\"sys\".\"_tables\" \"pkt\","
- "\"sys\".\"objects\" \"pkkc\","
- "\"sys\".\"keys\" \"pkk\","
- "\"sys\".\"schemas\" \"ps\","
- "\"sys\".\"schemas\" \"fs\" "
- "WHERE \"fkt\".\"id\" = \"fkk\".\"table_id\" AND "
- "\"pkt\".\"id\" = \"pkk\".\"table_id\" AND "
- "\"fkk\".\"id\" = \"fkkc\".\"id\" AND "
- "\"pkk\".\"id\" = \"pkkc\".\"id\" AND "
- "\"fkk\".\"rkey\" = \"pkk\".\"id\" AND "
- "\"fkkc\".\"nr\" = \"pkkc\".\"nr\" AND "
- "\"pkt\".\"schema_id\" = \"ps\".\"id\" AND "
- "\"fkt\".\"schema_id\" = \"fs\".\"id\" AND "
- "\"fs\".\"name\" = '%s' AND "
- "\"fkt\".\"name\" = '%s'"
- "ORDER BY \"fkk\".\"name\", \"nr\"", schema, tname);
+ "SELECT ps.name, " /* 0 */
+ "pkt.name, " /* 1 */
+ "pkkc.name, " /* 2 */
+ "fkkc.name, " /* 3 */
+ "fkkc.nr, " /* 4 */
+ "fkk.name, " /* 5 */
+ "fkk.\"action\", " /* 6 */
+ "fs.name, " /* 7 */
+ "fkt.name " /* 8 */
+ "FROM sys._tables fkt, "
+ "sys.objects fkkc, "
+ "sys.keys fkk, "
+ "sys._tables pkt, "
+ "sys.objects pkkc, "
+ "sys.keys pkk, "
+ "sys.schemas ps, "
+ "sys.schemas fs "
+ "WHERE fkt.id = fkk.table_id AND "
+ "pkt.id = pkk.table_id AND "
+ "fkk.id = fkkc.id AND "
+ "pkk.id = pkkc.id AND "
+ "fkk.rkey = pkk.id AND "
+ "fkkc.nr = pkkc.nr AND "
+ "pkt.schema_id = ps.id AND "
+ "fkt.schema_id = fs.id AND "
+ "fs.name = '%s' AND "
+ "fkt.name = '%s' "
+ "ORDER BY fkk.name, nr", schema, tname);
} else if (tid != NULL) {
maxquerylen = 1024;
query = malloc(maxquerylen);
snprintf(query, maxquerylen,
- "SELECT \"ps\".\"name\"," /* 0 */
- "\"pkt\".\"name\"," /* 1 */
- "\"pkkc\".\"name\"," /* 2 */
- "\"fkkc\".\"name\"," /* 3 */
- "\"fkkc\".\"nr\"," /* 4 */
- "\"fkk\".\"name\"," /* 5 */
- "\"fkk\".\"action\"," /* 6 */
- "0," /* 7 */
- "\"fkt\".\"name\" " /* 8 */
- "FROM \"sys\".\"_tables\" \"fkt\","
- "\"sys\".\"objects\" \"fkkc\","
- "\"sys\".\"keys\" \"fkk\","
- "\"sys\".\"_tables\" \"pkt\","
- "\"sys\".\"objects\" \"pkkc\","
- "\"sys\".\"keys\" \"pkk\","
- "\"sys\".\"schemas\" \"ps\""
- "WHERE \"fkt\".\"id\" = \"fkk\".\"table_id\" AND "
- "\"pkt\".\"id\" = \"pkk\".\"table_id\" AND "
- "\"fkk\".\"id\" = \"fkkc\".\"id\" AND "
- "\"pkk\".\"id\" = \"pkkc\".\"id\" AND "
- "\"fkk\".\"rkey\" = \"pkk\".\"id\" AND "
- "\"fkkc\".\"nr\" = \"pkkc\".\"nr\" AND "
- "\"pkt\".\"schema_id\" = \"ps\".\"id\" AND "
- "\"fkt\".\"id\" = %s"
- "ORDER BY \"fkk\".\"name\", \"nr\"", tid);
+ "SELECT ps.name, " /* 0 */
+ "pkt.name, " /* 1 */
+ "pkkc.name, " /* 2 */
+ "fkkc.name, " /* 3 */
+ "fkkc.nr, " /* 4 */
+ "fkk.name, " /* 5 */
+ "fkk.\"action\", " /* 6 */
+ "0, " /* 7 */
+ "fkt.name " /* 8 */
+ "FROM sys._tables fkt, "
+ "sys.objects fkkc, "
+ "sys.keys fkk, "
+ "sys._tables pkt, "
+ "sys.objects pkkc, "
+ "sys.keys pkk, "
+ "sys.schemas ps "
+ "WHERE fkt.id = fkk.table_id AND "
+ "pkt.id = pkk.table_id AND "
+ "fkk.id = fkkc.id AND "
+ "pkk.id = pkkc.id AND "
+ "fkk.rkey = pkk.id AND "
+ "fkkc.nr = pkkc.nr AND "
+ "pkt.schema_id = ps.id AND "
+ "fkt.id = %s "
+ "ORDER BY fkk.name, nr", tid);
} else {
- query = "SELECT \"ps\".\"name\"," /* 0 */
- "\"pkt\".\"name\"," /* 1 */
- "\"pkkc\".\"name\"," /* 2 */
- "\"fkkc\".\"name\"," /* 3 */
- "\"fkkc\".\"nr\"," /* 4 */
- "\"fkk\".\"name\"," /* 5 */
- "\"fkk\".\"action\"," /* 6 */
- "\"fs\".\"name\"," /* 7 */
- "\"fkt\".\"name\" " /* 8 */
- "FROM \"sys\".\"_tables\" \"fkt\","
- "\"sys\".\"objects\" \"fkkc\","
- "\"sys\".\"keys\" \"fkk\","
- "\"sys\".\"_tables\" \"pkt\","
- "\"sys\".\"objects\" \"pkkc\","
- "\"sys\".\"keys\" \"pkk\","
- "\"sys\".\"schemas\" \"ps\","
- "\"sys\".\"schemas\" \"fs\" "
- "WHERE \"fkt\".\"id\" = \"fkk\".\"table_id\" AND "
- "\"pkt\".\"id\" = \"pkk\".\"table_id\" AND "
- "\"fkk\".\"id\" = \"fkkc\".\"id\" AND "
- "\"pkk\".\"id\" = \"pkkc\".\"id\" AND "
- "\"fkk\".\"rkey\" = \"pkk\".\"id\" AND "
- "\"fkkc\".\"nr\" = \"pkkc\".\"nr\" AND "
- "\"pkt\".\"schema_id\" = \"ps\".\"id\" AND "
- "\"fkt\".\"schema_id\" = \"fs\".\"id\" AND "
- "\"fkt\".\"system\" = FALSE "
- "ORDER BY \"fs\".\"name\",\"fkt\".\"name\","
- "\"fkk\".\"name\", \"nr\"";
+ query = "SELECT ps.name, " /* 0 */
+ "pkt.name, " /* 1 */
+ "pkkc.name, " /* 2 */
+ "fkkc.name, " /* 3 */
+ "fkkc.nr, " /* 4 */
+ "fkk.name, " /* 5 */
+ "fkk.\"action\", " /* 6 */
+ "fs.name, " /* 7 */
+ "fkt.name " /* 8 */
+ "FROM sys._tables fkt, "
+ "sys.objects fkkc, "
+ "sys.keys fkk, "
+ "sys._tables pkt, "
+ "sys.objects pkkc, "
+ "sys.keys pkk, "
+ "sys.schemas ps, "
+ "sys.schemas fs "
+ "WHERE fkt.id = fkk.table_id AND "
+ "pkt.id = pkk.table_id AND "
+ "fkk.id = fkkc.id AND "
+ "pkk.id = pkkc.id AND "
+ "fkk.rkey = pkk.id AND "
+ "fkkc.nr = pkkc.nr AND "
+ "pkt.schema_id = ps.id AND "
+ "fkt.schema_id = fs.id AND "
+ "fkt.system = FALSE "
+ "ORDER BY fs.name,fkt.name, "
+ "fkk.name, nr";
}
hdl = mapi_query(mid, query);
if (query != NULL && maxquerylen != 0)
@@ -508,33 +549,33 @@ dump_column_definition(Mapi mid, stream
if (tid)
snprintf(query, maxquerylen,
- "SELECT \"c\".\"name\"," /* 0 */
- "\"c\".\"type\"," /* 1 */
- "\"c\".\"type_digits\"," /* 2 */
- "\"c\".\"type_scale\"," /* 3 */
- "\"c\".\"null\"," /* 4 */
- "\"c\".\"default\"," /* 5 */
- "\"c\".\"number\" " /* 6 */
- "FROM \"sys\".\"_columns\" \"c\" "
- "WHERE \"c\".\"table_id\" = %s "
- "ORDER BY \"number\"", tid);
+ "SELECT c.name, " /* 0 */
+ "c.type, " /* 1 */
+ "c.type_digits, " /* 2 */
+ "c.type_scale, " /* 3 */
+ "c.\"null\", " /* 4 */
+ "c.\"default\", " /* 5 */
+ "c.number " /* 6 */
+ "FROM sys._columns c "
+ "WHERE c.table_id = %s "
+ "ORDER BY number", tid);
else
snprintf(query, maxquerylen,
- "SELECT \"c\".\"name\"," /* 0 */
- "\"c\".\"type\"," /* 1 */
- "\"c\".\"type_digits\"," /* 2 */
- "\"c\".\"type_scale\"," /* 3 */
- "\"c\".\"null\"," /* 4 */
- "\"c\".\"default\"," /* 5 */
- "\"c\".\"number\" " /* 6 */
- "FROM \"sys\".\"_columns\" \"c\", "
- "\"sys\".\"_tables\" \"t\", "
- "\"sys\".\"schemas\" \"s\" "
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list