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

Reply via email to