Changeset: c0e38fa11c15 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c0e38fa11c15
Modified Files:
clients/mapilib/mapi.c
java/src/nl/cwi/monetdb/jdbc/MonetConnection.java
java/src/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
sql/backends/monet5/sql.mx
sql/backends/monet5/sql_scenario.c
sql/server/sql_parser.y
sql/server/sql_privileges.c
Branch: Dec2011
Log Message:
SQLSTATE: send state client separated by bang
To avoid many coincidential conflicts where error strings are read as
SQLSTATE, use the bang (!) as separator, such that we don't get matches
for messages like: (they should all get an error code eventually, ofc)
ERROR:
GRANT:
etc.
diffs (truncated from 942 to 300 lines):
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -1123,7 +1123,7 @@ clean_print(char *msg, const char *prefi
msg += len;
/* skip SQLSTATE if provided */
- if (strlen(msg) > 6 && msg[5] == ':' &&
+ if (strlen(msg) > 6 && msg[5] == '!' &&
((msg[0] >= '0' && msg[0] <= '9') || (msg[0] >=
'A' && msg[0] <= 'Z')) &&
((msg[1] >= '0' && msg[1] <= '9') || (msg[1] >=
'A' && msg[1] <= 'Z')) &&
((msg[2] >= '0' && msg[2] <= '9') || (msg[2] >=
'A' && msg[2] <= 'Z')) &&
@@ -1154,7 +1154,7 @@ indented_print(const char *msg, const ch
s = " ";
/* skip SQLSTATE if provided */
- if (strlen(p) > 6 && p[5] == ':' &&
+ if (strlen(p) > 6 && p[5] == '!' &&
((p[0] >= '0' && p[0] <= '9') || (p[0] >= 'A'
&& p[0] <= 'Z')) &&
((p[1] >= '0' && p[1] <= '9') || (p[1] >= 'A'
&& p[1] <= 'Z')) &&
((p[2] >= '0' && p[2] <= '9') || (p[2] >= 'A'
&& p[2] <= 'Z')) &&
diff --git a/java/src/nl/cwi/monetdb/jdbc/MonetConnection.java
b/java/src/nl/cwi/monetdb/jdbc/MonetConnection.java
--- a/java/src/nl/cwi/monetdb/jdbc/MonetConnection.java
+++ b/java/src/nl/cwi/monetdb/jdbc/MonetConnection.java
@@ -2241,7 +2241,7 @@ public class MonetConnection extends Mon
ResultSetResponse t =
(ResultSetResponse)rsresponses.get(new Integer(id));
if (t == null) {
-
error = "M0M12:no ResultSetResponse with id " + id + " found";
+
error = "M0M12!no ResultSetResponse with id " + id + " found";
break;
}
@@ -2256,7 +2256,7 @@ public class MonetConnection extends Mon
} break;
}
} catch
(MCLParseException e) {
- error =
"M0M10:error while parsing start of header:\n" +
+ error =
"M0M10!error while parsing start of header:\n" +
e.getMessage() +
" found: '" + tmpLine.charAt(e.getErrorOffset()) + "'" +
" in: \"" + tmpLine + "\"" +
@@ -2285,7 +2285,7 @@ public class MonetConnection extends Mon
if
(error != null) {
// right, some protocol violation,
// skip the rest of the result
-
error = "M0M10:" + error;
+
error = "M0M10!" + error;
in.waitForPrompt();
linetype = in.getLineType();
break;
@@ -2318,7 +2318,7 @@ public class MonetConnection extends Mon
// we have
something we don't
//
expect/understand, let's make it an error
// message
- tmpLine =
"!M0M10:protocol violation, unexpected line: " + tmpLine;
+ tmpLine =
"!M0M10!protocol violation, unexpected line: " + tmpLine;
case
BufferedMCLReader.ERROR:
// read
everything till the prompt (should be
// error) we
don't know if we ignore some
@@ -2341,9 +2341,9 @@ public class MonetConnection extends Mon
String tmp = sendThread.getErrors();
if (tmp != null) {
if (error == null) {
- error = "08000:" + tmp;
+ error = "08000!" + tmp;
} else {
- error += "\n08000:" +
tmp;
+ error += "\n08000!" +
tmp;
}
}
}
diff --git a/java/src/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
b/java/src/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
--- a/java/src/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
+++ b/java/src/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
@@ -113,8 +113,8 @@ public class BufferedMCLReader extends B
public String readLine() throws IOException {
String r = super.readLine();
setLineType(r);
- if (lineType == ERROR && !r.matches("^![0-9A-Z]{5}:.+"))
- r = "!22000:" + r.substring(1);
+ if (lineType == ERROR && !r.matches("^![0-9A-Z]{5}!.+"))
+ r = "!22000!" + r.substring(1);
return(r);
}
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -828,7 +828,7 @@ function sql.zero_or_one{inline}( b:bat[
c1 := calc.>(m,1:wrd);
c11 := calc.and(c01,c1);
ms := calc.str(m);
- msg := str.+("21000:zero_or_one: cardinality violation (", ms);
+ msg := str.+("21000!zero_or_one: cardinality violation (", ms);
msg1 := str.+(msg, ">1)");
sql.assert(c11, msg1);
return zero_or_one := b;
@@ -1753,38 +1753,38 @@ SQLtransaction(Client cntxt, MalBlkPtr m
switch (type) {
case DDL_RELEASE:
if (sql->session->auto_commit == 1)
- throw(SQL, "sql.trans", "3BM30:RELEASE SAVEPOINT: not
allowed in auto commit mode");
+ throw(SQL, "sql.trans", "3BM30!RELEASE SAVEPOINT: not
allowed in auto commit mode");
ret = mvc_release(sql, name);
if (ret < 0) {
- snprintf(buf, BUFSIZ, "3B000:RELEASE SAVEPOINT: (%s)
failed", name);
+ snprintf(buf, BUFSIZ, "3B000!RELEASE SAVEPOINT: (%s)
failed", name);
throw(SQL, "sql.trans", "%s", buf);
}
break;
case DDL_COMMIT:
if (sql->session->auto_commit == 1) {
if (name)
- throw(SQL,"sql.trans", "3BM30:SAVEPOINT: not
allowed in auto commit mode");
+ throw(SQL,"sql.trans", "3BM30!SAVEPOINT: not
allowed in auto commit mode");
else
- throw(SQL,"sql.trans", "2DM30:COMMIT: not
allowed in auto commit mode");
+ throw(SQL,"sql.trans", "2DM30!COMMIT: not
allowed in auto commit mode");
}
ret = mvc_commit(sql, chain, name);
if (ret < 0 && !name)
- throw(SQL, "sql.trans", "2D000:COMMIT: failed");
+ throw(SQL, "sql.trans", "2D000!COMMIT: failed");
if (ret < 0 && name)
- throw(SQL, "sql.trans", "3B000:SAVEPOINT: (%s) failed",
name);
+ throw(SQL, "sql.trans", "3B000!SAVEPOINT: (%s) failed",
name);
break;
case DDL_ROLLBACK:
if (sql->session->auto_commit == 1)
- throw(SQL, "sql.trans", "2DM30:ROLLBACK: not allowed in
auto commit mode");
+ throw(SQL, "sql.trans", "2DM30!ROLLBACK: not allowed in
auto commit mode");
ret = mvc_rollback(sql, chain, name);
if (ret < 0 && name) {
- snprintf(buf, BUFSIZ, "3B000:ROLLBACK TO SAVEPOINT:
(%s) failed", name);
+ snprintf(buf, BUFSIZ, "3B000!ROLLBACK TO SAVEPOINT:
(%s) failed", name);
throw(SQL, "sql.trans", "%s", buf);
}
break;
case DDL_TRANS:
if (sql->session->auto_commit == 0)
- throw(SQL, "sql.trans", "25001:START TRANSACTION:
cannot start a transaction within a transaction");
+ throw(SQL, "sql.trans", "25001!START TRANSACTION:
cannot start a transaction within a transaction");
if (sql->session->active)
mvc_rollback(sql, 0, NULL);
sql->session->auto_commit = 0;
@@ -1808,10 +1808,10 @@ SQLcommit(Client cntxt, MalBlkPtr mb, Ma
(void) pci;
if (sql->session->auto_commit != 0)
- throw(SQL,"sql.trans", "2DM30:COMMIT: not allowed in auto
commit mode");
+ throw(SQL,"sql.trans", "2DM30!COMMIT: not allowed in auto
commit mode");
ret = mvc_commit(sql, 0, 0);
if (ret < 0 )
- throw(SQL, "sql.trans", "2D000:COMMIT: failed");
+ throw(SQL, "sql.trans", "2D000!COMMIT: failed");
return msg;
}
@@ -1824,7 +1824,7 @@ SQLtransaction2(Client cntxt, MalBlkPtr
(void) stk;
(void) pci;
if (sql->session->auto_commit == 0)
- throw(SQL, "sql.trans", "25001:START TRANSACTION: cannot start
a transaction within a transaction");
+ throw(SQL, "sql.trans", "25001!START TRANSACTION: cannot start
a transaction within a transaction");
if (sql->session->active)
mvc_rollback(sql, 0, NULL);
sql->session->auto_commit = 0;
@@ -1842,16 +1842,16 @@ create_table_or_view( mvc *sql, char *sn
node *n;
if (STORE_READONLY(active_store_type))
- return sql_error(sql, 06, "25006:schema statements cannot be
executed on a readonly database.");
+ return sql_error(sql, 06, "25006!schema statements cannot be
executed on a readonly database.");
if (!s)
- return sql_message("3F000:CREATE %s: schema '%s' doesn't
exist", (t->query)?"TABLE":"VIEW", sname);
+ return sql_message("3F000!CREATE %s: schema '%s' doesn't
exist", (t->query)?"TABLE":"VIEW", sname);
if (mvc_bind_table(sql, s, t->base.name)) {
char *cd = (temp == SQL_DECLARED_TABLE)?"DECLARE":"CREATE";
- return sql_message("40000:%s TABLE: name '%s' already in use",
cd, t->base.name);
+ return sql_message("40000!%s TABLE: name '%s' already in use",
cd, t->base.name);
} else if (temp != SQL_DECLARED_TABLE && (!schema_privs(sql->role_id,
s) && !(isTempSchema(s) && temp == SQL_LOCAL_TEMP))){
- return sql_message("40000:CREATE TABLE: insufficient privileges
for user '%s' in schema '%s'", stack_get_string(sql, "current_user"),
s->base.name);
+ return sql_message("40000!CREATE TABLE: insufficient privileges
for user '%s' in schema '%s'", stack_get_string(sql, "current_user"),
s->base.name);
}
/* first check default values */
@@ -1913,13 +1913,13 @@ alter_table( mvc *sql, char *sname, sql_
node *n;
if (!s)
- return sql_message("3F000:ALTER TABLE: no such schema '%s'",
sname);
+ return sql_message("3F000!ALTER TABLE: no such schema '%s'",
sname);
if ((nt = mvc_bind_table(sql, s, t->base.name)) == NULL) {
- return sql_message("40000:ALTER TABLE: no such table '%s'",
t->base.name);
+ return sql_message("40000!ALTER TABLE: no such table '%s'",
t->base.name);
} else if (!schema_privs(sql->role_id, s) && !(isTempSchema(s) &&
t->persistence == SQL_LOCAL_TEMP)){
- return sql_message("40000:ALTER TABLE: insufficient privileges
for user '%s' in schema '%s'", stack_get_string(sql, "current_user"),
s->base.name);
+ return sql_message("40000!ALTER TABLE: insufficient privileges
for user '%s' in schema '%s'", stack_get_string(sql, "current_user"),
s->base.name);
}
/* First check if all the changes are allowed */
@@ -1929,7 +1929,7 @@ alter_table( mvc *sql, char *sname, sql_
for (n = t->idxs.nelm; n; n = n->next) {
sql_idx *i = n->data;
if (i->key->type == pkey)
- return sql_message("40000:CONSTRAINT
PRIMARY KEY: a table can have only one PRIMARY KEY\n");
+ return sql_message("40000!CONSTRAINT
PRIMARY KEY: a table can have only one PRIMARY KEY\n");
}
}
}
@@ -1977,7 +1977,7 @@ alter_table( mvc *sql, char *sname, sql_
if (BATcount(b) && b->T->nonil != TRUE) {
BUN bun = BUNfnd(BATmirror(b),
ATOMnilptr(b->ttype));
if (bun != BUN_NONE)
- return sql_message
("40002:ALTER TABLE: NOT NULL constraint violated for column %s.%s",
c->t->base.name, c->base.name );
+ return sql_message
("40002!ALTER TABLE: NOT NULL constraint violated for column %s.%s",
c->t->base.name, c->base.name );
}
BBPunfix(b->batCacheid);
}
@@ -2032,7 +2032,7 @@ drop_table(mvc *sql, char *sname, char *
node *n;
if (sname && !(s=mvc_bind_schema(sql, sname)))
- return sql_message("3F000:DROP TABLE: no such schema '%s'",
sname);
+ return sql_message("3F000!DROP TABLE: no such schema '%s'",
sname);
if (!s)
s = cur_schema(sql);
t = mvc_bind_table(sql, s, tname);
@@ -2041,13 +2041,13 @@ drop_table(mvc *sql, char *sname, char *
t = mvc_bind_table(sql, s, tname);
}
if (!t) {
- return sql_message("40000:DROP TABLE: no such table '%s'",
tname);
+ return sql_message("40000!DROP TABLE: no such table '%s'",
tname);
} else if (!isTable(t) && !isStream(t) && !isRemote(t)) {
- return sql_message("40000:DROP TABLE: cannot drop VIEW '%s'",
tname);
+ return sql_message("40000!DROP TABLE: cannot drop VIEW '%s'",
tname);
} else if (t->system) {
- return sql_message("40000:DROP TABLE: cannot drop system table
'%s'", tname);
+ return sql_message("40000!DROP TABLE: cannot drop system table
'%s'", tname);
} else if (!schema_privs(sql->role_id, s) && !(isTempSchema(s) &&
t->persistence == SQL_LOCAL_TEMP)){
- return sql_message("40000:DROP TABLE: access denied for %s to
schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name);
+ return sql_message("40000!DROP TABLE: access denied for %s to
schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name);
}
if ( !drop_action && t->keys.set) {
for (n = t->keys.set->h; n; n = n->next) {
@@ -2063,7 +2063,7 @@ drop_table(mvc *sql, char *sname, char *
k = l->data;
/* make sure it is not a self
referencing key */
if (k->t != t)
- return
sql_message("40000:DROP TABLE: FOREIGN KEY %s.%s depends on %s",
k->t->base.name, k->base.name, tname);
+ return
sql_message("40000!DROP TABLE: FOREIGN KEY %s.%s depends on %s",
k->t->base.name, k->base.name, tname);
}
}
}
@@ -2071,7 +2071,7 @@ drop_table(mvc *sql, char *sname, char *
}
if (!drop_action && mvc_check_dependency(sql, t->base.id,
TABLE_DEPENDENCY, NULL))
- return sql_message("40000:DROP TABLE: unable to drop table %s
(there are database objects which depend on it)\n", t->base.name);
+ return sql_message("40000!DROP TABLE: unable to drop table %s
(there are database objects which depend on it)\n", t->base.name);
mvc_drop_table(sql, s, t, drop_action);
return MAL_SUCCEED;
@@ -2084,7 +2084,7 @@ drop_view(mvc *sql, char *sname, char *t
sql_schema *ss = NULL;
if (sname != NULL && (ss = mvc_bind_schema(sql, sname)) == NULL)
- return sql_message("3F000:DROP VIEW: no such schema '%s'",
sname);
+ return sql_message("3F000!DROP VIEW: no such schema '%s'",
sname);
if (ss == NULL)
ss = cur_schema(sql);
@@ -2092,15 +2092,15 @@ drop_view(mvc *sql, char *sname, char *t
t = mvc_bind_table(sql, ss, tname);
if (!schema_privs(sql->role_id, ss) && !(isTempSchema(ss) && t &&
t->persistence == SQL_LOCAL_TEMP)){
- return sql_message("40000:DROP VIEW: access denied for %s to
schema '%s'", stack_get_string(sql, "current_user"), ss->base.name);
+ return sql_message("40000!DROP VIEW: access denied for %s to
schema '%s'", stack_get_string(sql, "current_user"), ss->base.name);
} else if (!t) {
- return sql_message("40000:DROP VIEW: unknown view '%s'", tname);
+ return sql_message("40000!DROP VIEW: unknown view '%s'", tname);
} else if (!isView(t)) {
- return sql_message("40000:DROP VIEW: unable to drop view '%s':
is a table", tname);
+ return sql_message("40000!DROP VIEW: unable to drop view '%s':
is a table", tname);
} else if (t->system) {
- return sql_message("40000:DROP VIEW: cannot drop system view
'%s'", tname);
+ return sql_message("40000!DROP VIEW: cannot drop system view
'%s'", tname);
} else if (! drop_action && mvc_check_dependency(sql, t->base.id,
VIEW_DEPENDENCY, NULL)) {
- return sql_message("40000:DROP VIEW: cannot drop view
'%s', there are database objects which depend on it", t->base.name);
+ return sql_message("40000!DROP VIEW: cannot drop view
'%s', there are database objects which depend on it", t->base.name);
} else {
mvc_drop_table(sql, ss, t, drop_action);
return MAL_SUCCEED;
@@ -2114,15 +2114,15 @@ drop_key( mvc *sql, char *sname, char *k
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list