Fri Jul 6 09:10:34 PDT 2007
- Previous message: [Slony1-patches] configure support of 8.3
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Attached are diffs (against HEAD; should work as well against 1.2) for a = hopeful resolution to two problems with the parser that splits apart = EXECUTE SCRIPT requests. http://lists.slony.info/pipermail/slony1-general/2007-January/005659.html - This reports a problem where a statement is lost if it doesn't end in = a semicolon http://lists.slony.info/pipermail/slony1-general/2007-July/006290.html - This reports a problem where a statement which has an embedded = semicolon gets terminated at that semicolon -------------- next part -------------- ? emptytestresult.log ? test-scanner ? test_sql.log Index: emptytestresult.expected =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/cvsd/slony1/slony1-engine/src/parsestatements/emptytestresu= lt.expected,v retrieving revision 1.1 diff -c -u -r1.1 emptytestresult.expected Binary files /tmp/cvss0kxvq and emptytestresult.expected differ Index: scanner.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/cvsd/slony1/slony1-engine/src/parsestatements/scanner.c,v retrieving revision 1.3 diff -c -u -r1.3 scanner.c --- scanner.c 4 Aug 2006 20:40:19 -0000 1.3 +++ scanner.c 6 Jul 2007 16:05:02 -0000 @@ -11,6 +11,9 @@ char cchar; int d1start, d1end, d2start, d2end, d1stemp; int statements; + int nparens; + int nbrokets; + int nsquigb; = /* Initialize */ cpos =3D 0; @@ -21,13 +24,49 @@ d2start =3D 0; d1end =3D 0; state =3D Q_NORMAL_STATE; + nparens =3D 0; + nbrokets =3D 0; + nsquigb =3D 0; = while (state !=3D Q_DONE) { cchar =3D extended_statement[cpos]; switch (cchar) { case '\0': + STMTS[statements++] =3D ++cpos; state =3D Q_DONE; break; + + case '(': + if (state =3D=3D Q_NORMAL_STATE) { + nparens ++; + break; + } + case ')': + if (state =3D=3D Q_NORMAL_STATE) { + nparens --; + break; + } + case '[': + if (state =3D=3D Q_NORMAL_STATE) { + nbrokets ++; + break; + } + case ']': + if (state =3D=3D Q_NORMAL_STATE) { + nbrokets --; + break; + } + case '{': + if (state =3D=3D Q_NORMAL_STATE) { + nsquigb ++; + break; + } + case '}': + if (state =3D=3D Q_NORMAL_STATE) { + nsquigb --; + break; + } + case '/': if (state =3D=3D Q_NORMAL_STATE) { state =3D Q_HOPE_TO_CCOMMENT; @@ -51,8 +90,7 @@ bpos =3D cpos; break; } - } = - + } break; case '$': if (state =3D=3D Q_NORMAL_STATE) { @@ -151,7 +189,7 @@ if (state =3D=3D Q_DOLLAR_UNBUILDING) state =3D Q_DOLLAR_QUOTING; break; case ';': - if (state =3D=3D Q_NORMAL_STATE) { + if ((state =3D=3D Q_NORMAL_STATE) && (nparens =3D=3D 0) && (nbrokets= =3D=3D 0) && (nsquigb =3D=3D 0)) { STMTS[statements++] =3D ++cpos; if (statements >=3D MAXSTATEMENTS) { return statements; Index: test_sql.expected =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/cvsd/slony1/slony1-engine/src/parsestatements/test_sql.expe= cted,v retrieving revision 1.2 diff -c -u -r1.2 test_sql.expected Binary files /tmp/cvs9FnuYZ and test_sql.expected differ Index: test_sql.sql =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/cvsd/slony1/slony1-engine/src/parsestatements/test_sql.sql,v retrieving revision 1.1 diff -c -u -r1.1 test_sql.sql --- test_sql.sql 24 Feb 2006 18:33:02 -0000 1.1 +++ test_sql.sql 6 Jul 2007 16:05:02 -0000 @@ -35,3 +35,13 @@ return NULL; end; $$ language plpgsql; + + +-- Here is a rule creation with an embedded semicolon + +create table "public"."position"; + +CREATE RULE "position_get_last_id_on_insert2" +AS ON INSERT TO "public"."position" DO (SELECT +currval('position_position_id_seq'::regclass) AS id;) +
- Previous message: [Slony1-patches] configure support of 8.3
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-patches mailing list