pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Bruce Momjian <pgman@candle.pha.pa.us>
To: Arsalan Zaidi <azaidi@directi.com>
Cc: PostgreSQL jdbc list <pgsql-jdbc@postgresql.org>
Subject: Re: [INTERFACES] New code for JDBC driver
Date: Sat, 30 Jun 2001 12:42:46 -0400 (EDT)
Message-ID: <200106301642.f5UGgkj14915@candle.pha.pa.us> (raw)
In-Reply-To: <00c801c10152$899d0680$4301a8c0@directi.com>

> No response for my query since yesterday.
> 
> I've changed the code in Connection.escapeSQL() to look for semicolons
> outside '' and ""'s.
> 
> It's not been well tested, but it seems to work. Someone might want to add
> it to the source tree, or to their own local versions if they wish.
> 

OK, here is the diff, I think.  Can jdbc people comment on it?

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Attachments:

/bjm/diff (text/plain, 2.1K) download *** Connection.java Wed Jun 6 20:09:32 2001 --- /bjm/x Sat Jun 30 12:35:39 2001 *************** *** 931,937 **** --- 21,123 ---- index = sql.indexOf("{d"); } //System.out.println ("modified SQL: " + sql); + + + + + //---- Added by Arsalan + String query = sql; + + //2== uninitialised 1==true 0==false + int openTick = 2; + int openQuote = 2; + char oneChar; + + // query = query.toLowerCase(); + + if(query.indexOf(";") == -1) // no semi's at all + { return sql; } + for(int i=0; i<query.length(); i++) + { + oneChar = query.charAt(i); + + if((oneChar == ';' && openTick == 0 && openQuote != 1) || (oneChar == ';' && openQuote == 0 && openTick != 1)) + { + throw new SQLException("Found an external SEMICOLON!! at i = "+i); + } + + if(oneChar == '\'') //is a ' + { + + System.out.println("in '"); + int j = i; + if(++j < query.length()) + { + if(query.charAt(j) == '\'') //is an escape + { + i++; //skip them + continue; + } + else //genuine tick! + { + if(openTick == 0) + { + openTick = 1; + } + else if(openTick == 1) + { + openTick = 0; + } + else if(openTick == 2) //initialise it + { + openTick = 1; + } + } + } + } + + + if(oneChar == '"') //is a " + { + System.out.println("in \""); + int j = i; + if(++j < query.length()) + { + if(query.charAt(j) == '"') //is an escape + { + i++; //skip them + continue; + } + else //genuine quote! + { + if(openQuote == 0) + { + openQuote = 1; + } + else if(openQuote == 1) + { + openQuote = 0; + } + else if(openQuote == 2) //initialise it + { + openQuote = 1; + } + } + } + } + + + } + + + + + //------Addition ends + + + + return sql; }

view thread (17+ messages)  latest in thread

Message-ID: <200106301642.f5UGgkj14915@candle.pha.pa.us>
Permalink:  ../200106301642.f5UGgkj14915@candle.pha.pa.us/
Also on:    postgresql.org/message-id/200106301642.f5UGgkj14915@candle.pha.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: pgman@candle.pha.pa.us, azaidi@directi.com, pgsql-jdbc@postgresql.org
  Subject: Re: [INTERFACES] New code for JDBC driver
  In-Reply-To: <200106301642.f5UGgkj14915@candle.pha.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox