From 2c82b3659cec1e4e63b0d7c9b1009de21663b3fc Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 3 Dec 2012 09:35:45 +0000 Subject: [PATCH] Sql: SqlScrip: Support for PGSQL $$ git-svn-id: svn://ultimatepp.org/upp/trunk@5620 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Sql/Script.cpp | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/uppsrc/Sql/Script.cpp b/uppsrc/Sql/Script.cpp index de9eae466..4392fa924 100644 --- a/uppsrc/Sql/Script.cpp +++ b/uppsrc/Sql/Script.cpp @@ -24,6 +24,7 @@ bool SqlPerformScript(SqlSession& session, Stream& script, String stmt; int level = 0; bool ok = true; + bool esc = false; while(!script.IsEof()) { int c = script.Term(); if(IsAlpha(c)) { @@ -33,10 +34,12 @@ bool SqlPerformScript(SqlSession& session, Stream& script, stmt.Cat(c); id.Cat(ToUpper(c)); } - if(id == "BEGIN") - level++; - if(id == "END") - level--; + if(!esc) { + if(id == "BEGIN") + level++; + if(id == "END") + level--; + } } else if(c == '\'') { @@ -56,7 +59,17 @@ bool SqlPerformScript(SqlSession& session, Stream& script, } } else - if(c == ';' && level == 0) { + if(session.GetDialect() == PGSQL && c == '$') { + stmt.Cat('$'); + script.Get(); + if(script.Term() == '$') { + script.Get(); + stmt.Cat('$'); + esc = !esc; + } + } + else + if(c == ';' && level == 0 && !esc) { Sql sql(session); session.ClearError(); int q = 0; @@ -72,10 +85,12 @@ bool SqlPerformScript(SqlSession& session, Stream& script, script.Get(); } else { - if(c == '(') - level++; - if(c == ')') - level--; + if(!esc) { + if(c == '(') + level++; + if(c == ')') + level--; + } if(c != '\r') { if(session.GetDialect() == ORACLE && c == '\n') stmt.Cat('\r');