Обсуждение: "{ OJ " group outer joins in queries from OpenOffice.org?

Поиск
Список
Период
Сортировка

"{ OJ " group outer joins in queries from OpenOffice.org?

От
Palle Girgensohn
Дата:
Hi,

This was discussed on the pgsql-sql list. Tom Lane asked if someone knows
about this, no answer at that list, so I guess I'll ask here:

OpeoOffice adds "{ OJ " .., "}" around outer joins. Apparently, as Tom
recalls, the ODBC standard expects this, since ODBC rephrases the query to
be compatible with different db servers. I don't think this construct
exists in JDBC? Anyone knows?

Two bug reports on OO.org with the same matter, only seem to involve
postgresql jdbc driver?

http://www.openoffice.org/issues/show_bug.cgi?id=14296
http://www.openoffice.org/issues/show_bug.cgi?id=22355

See (parts of) my original mail below:

>> Palle Girgensohn <girgen@pingpong.net> writes:
>>> Here's their code snippet (from
>>> oo_1.1_src/dbaccess/source/ui/querydesign/QueryDesignView.cxx):
>>
>>> if(aJoin.getLength())
>>> {
>>>     ::rtl::OUString aStr = ::rtl::OUString::createFromAscii("{ OJ ");
>>>     aStr += aJoin;
>>>     aStr += ::rtl::OUString::createFromAscii(" },");
>>>     aTableListStr += aStr;
>>> }
>>
>> Now that I look at it, I bet that they are expecting the ODBC driver to
>> translate "{ OJ ... }" into the appropriate syntax for the database
>> (either SQL standard or not, depending on the DB :-().
>>
>> There are a number of ODBC brace-constructs that our driver knows how to
>> translate, but I don't think that's one of them.  You should bug the
>> ODBC guys about it.
>>
>>             regards, tom lane

Palle Girgensohn <girgen@pingpong.net> writes:
> Hi!
>
> I just tried using openoffice to create a SQL query, but it failed when I
> tried using left outer joins. The contructed query from OO contains curly
> braces to group things. I've never seen this construct before. Is it OO
> doing bad things, or does postgresql not understand it? It's on pg-7.3.4.
> Perhaps 7.4 behaves differently?
>
> SELECT "personer"."foretag", "personer"."fnamn", "personer"."enamn",
> "befattningnamn"."namn" FROM  { OJ "public"."befattning" "befattning"
>   LEFT OUTER JOIN "public"."personer" "personer" ON
> "befattning"."personid" = "personer"."personid" },   "public"."kommentar"
> "kommentar", "public"."personer" "personer", "public"."befattning"
> "befattning",   "public"."befattningnamn" "befattningnamn" WHERE  0 = 1
>
>
> ERROR:  parser: parse error at or near "{" at character 100
>
> (The WHERE 0 = 1 seems to be OO's way of checking the query syntax.)
>
> Thanks
> Palle


Re: "{ OJ " group outer joins in queries from

От
Dave Cramer
Дата:
Definitely not, we do not intercept the query and modify it other than
escaping some characters.

Why would they think that JDBC is similiar to ODBC?

Dave
On Wed, 2003-11-12 at 22:50, Palle Girgensohn wrote:
> Hi,
>
> This was discussed on the pgsql-sql list. Tom Lane asked if someone knows
> about this, no answer at that list, so I guess I'll ask here:
>
> OpeoOffice adds "{ OJ " .., "}" around outer joins. Apparently, as Tom
> recalls, the ODBC standard expects this, since ODBC rephrases the query to
> be compatible with different db servers. I don't think this construct
> exists in JDBC? Anyone knows?
>
> Two bug reports on OO.org with the same matter, only seem to involve
> postgresql jdbc driver?
>
> http://www.openoffice.org/issues/show_bug.cgi?id=14296
> http://www.openoffice.org/issues/show_bug.cgi?id=22355
>
> See (parts of) my original mail below:
>
> >> Palle Girgensohn <girgen@pingpong.net> writes:
> >>> Here's their code snippet (from
> >>> oo_1.1_src/dbaccess/source/ui/querydesign/QueryDesignView.cxx):
> >>
> >>> if(aJoin.getLength())
> >>> {
> >>>     ::rtl::OUString aStr = ::rtl::OUString::createFromAscii("{ OJ ");
> >>>     aStr += aJoin;
> >>>     aStr += ::rtl::OUString::createFromAscii(" },");
> >>>     aTableListStr += aStr;
> >>> }
> >>
> >> Now that I look at it, I bet that they are expecting the ODBC driver to
> >> translate "{ OJ ... }" into the appropriate syntax for the database
> >> (either SQL standard or not, depending on the DB :-().
> >>
> >> There are a number of ODBC brace-constructs that our driver knows how to
> >> translate, but I don't think that's one of them.  You should bug the
> >> ODBC guys about it.
> >>
> >>             regards, tom lane
>
> Palle Girgensohn <girgen@pingpong.net> writes:
> > Hi!
> >
> > I just tried using openoffice to create a SQL query, but it failed when I
> > tried using left outer joins. The contructed query from OO contains curly
> > braces to group things. I've never seen this construct before. Is it OO
> > doing bad things, or does postgresql not understand it? It's on pg-7.3.4.
> > Perhaps 7.4 behaves differently?
> >
> > SELECT "personer"."foretag", "personer"."fnamn", "personer"."enamn",
> > "befattningnamn"."namn" FROM  { OJ "public"."befattning" "befattning"
> >   LEFT OUTER JOIN "public"."personer" "personer" ON
> > "befattning"."personid" = "personer"."personid" },   "public"."kommentar"
> > "kommentar", "public"."personer" "personer", "public"."befattning"
> > "befattning",   "public"."befattningnamn" "befattningnamn" WHERE  0 = 1
> >
> >
> > ERROR:  parser: parse error at or near "{" at character 100
> >
> > (The WHERE 0 = 1 seems to be OO's way of checking the query syntax.)
> >
> > Thanks
> > Palle
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend
>
>


Re: "{ OJ " group outer joins in queries from

От
Paul Thomas
Дата:
On 13/11/2003 13:21 Dave Cramer wrote:
> Definitely not, we do not intercept the query and modify it other than
> escaping some characters.
>
> Why would they think that JDBC is similiar to ODBC?

Its actually covered in section 13.4 of the JDBC 3 specification.

--
Paul Thomas
+------------------------------+---------------------------------------------+
| Thomas Micro Systems Limited | Software Solutions for the Smaller
Business |
| Computer Consultants         |
http://www.thomas-micro-systems-ltd.co.uk   |
+------------------------------+---------------------------------------------+

Re: "{ OJ " group outer joins in queries

От
Palle Girgensohn
Дата:
--On torsdag, november 13, 2003 08.21.31 -0500 Dave Cramer
<pg@fastcrypt.com> wrote:

> Definitely not, we do not intercept the query and modify it other than
> escaping some characters.

Cool. As you can see in the issuezilla records, they state that they use
non-standard jdbc. just too true... :-/

> Why would they think that JDBC is similiar to ODBC?

I don't think they do, really, they just made it work for ODBC and didn't
think enough about JDBC...

/Palle

>
> Dave
> On Wed, 2003-11-12 at 22:50, Palle Girgensohn wrote:
>> Hi,
>>
>> This was discussed on the pgsql-sql list. Tom Lane asked if someone
>> knows  about this, no answer at that list, so I guess I'll ask here:
>>
>> OpeoOffice adds "{ OJ " .., "}" around outer joins. Apparently, as Tom
>> recalls, the ODBC standard expects this, since ODBC rephrases the query
>> to  be compatible with different db servers. I don't think this
>> construct  exists in JDBC? Anyone knows?
>>
>> Two bug reports on OO.org with the same matter, only seem to involve
>> postgresql jdbc driver?
>>
>> http://www.openoffice.org/issues/show_bug.cgi?id=14296
>> http://www.openoffice.org/issues/show_bug.cgi?id=22355
>>
>> See (parts of) my original mail below:
>>
>> >> Palle Girgensohn <girgen@pingpong.net> writes:
>> >>> Here's their code snippet (from
>> >>> oo_1.1_src/dbaccess/source/ui/querydesign/QueryDesignView.cxx):
>> >>
>> >>> if(aJoin.getLength())
>> >>> {
>> >>>     ::rtl::OUString aStr = ::rtl::OUString::createFromAscii("{ OJ ");
>> >>>     aStr += aJoin;
>> >>>     aStr += ::rtl::OUString::createFromAscii(" },");
>> >>>     aTableListStr += aStr;
>> >>> }
>> >>
>> >> Now that I look at it, I bet that they are expecting the ODBC driver
>> >> to translate "{ OJ ... }" into the appropriate syntax for the database
>> >> (either SQL standard or not, depending on the DB :-().
>> >>
>> >> There are a number of ODBC brace-constructs that our driver knows how
>> >> to translate, but I don't think that's one of them.  You should bug
>> >> the ODBC guys about it.
>> >>
>> >>             regards, tom lane
>>
>> Palle Girgensohn <girgen@pingpong.net> writes:
>> > Hi!
>> >
>> > I just tried using openoffice to create a SQL query, but it failed
>> > when I tried using left outer joins. The contructed query from OO
>> > contains curly braces to group things. I've never seen this construct
>> > before. Is it OO doing bad things, or does postgresql not understand
>> > it? It's on pg-7.3.4. Perhaps 7.4 behaves differently?
>> >
>> > SELECT "personer"."foretag", "personer"."fnamn", "personer"."enamn",
>> > "befattningnamn"."namn" FROM  { OJ "public"."befattning" "befattning"
>> >   LEFT OUTER JOIN "public"."personer" "personer" ON
>> > "befattning"."personid" = "personer"."personid" },
>> > "public"."kommentar" "kommentar", "public"."personer" "personer",
>> > "public"."befattning" "befattning",   "public"."befattningnamn"
>> > "befattningnamn" WHERE  0 = 1
>> >
>> >
>> > ERROR:  parser: parse error at or near "{" at character 100
>> >
>> > (The WHERE 0 = 1 seems to be OO's way of checking the query syntax.)
>> >
>> > Thanks
>> > Palle
>>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 8: explain analyze is your friend
>>
>>
>





Re: "{ OJ " group outer joins in queries from

От
Barry Lind
Дата:

Dave Cramer wrote:
> Definitely not, we do not intercept the query and modify it other than
> escaping some characters.

Not entirely true.  The driver does support the ODBC escape syntax for
dates and stored procedures/functions but not for outer joins, likes and
scalar functions.

>
> Why would they think that JDBC is similiar to ODBC?
>

Perhaps because the JDBC spec says so:

11.1 SQL Escape Syntax
JDBC supports the same DBMS-independent escape syntax as ODBC for stored
procedures, scalar functions, dates, times, and outer joins. A driver
maps this escape syntax into DBMSspecific syntax, allowing portability
of application programs that require these features. The
DBMS-independent syntax is based on an escape clause demarcated by curly
braces and a keyword:
    {keyword ... parameters ...}
This ODBC-compatible escape syntax is in general not the same as has
been adopted by ANSI in SQL-2 Transitional Level for the same
functionality. In cases where all of the desired DBMSs support the
standard SQL-2 syntax, the user is encouraged to use that syntax instead
of these escapes. When enough DBMSs support the more advanced SQL-2
syntax and semantics these escapes should no longer be necessary.



The logic that is currently supported by the driver (i.e. the date
stuff) is implemented in AbstractJdbc1Statement.replaceProcessing().
This would be where handling the outer join syntax should be added, if
anyone so desired.

thanks,
--Barry



Re: "{ OJ " group outer joins in queries from

От
Palle Girgensohn
Дата:
--On torsdag, november 13, 2003 08.48.17 -0800 Barry Lind
<blind@xythos.com> wrote:

> The logic that is currently supported by the driver (i.e. the date stuff)
> is implemented in AbstractJdbc1Statement.replaceProcessing(). This would
> be where handling the outer join syntax should be added, if anyone so
> desired.

Ah, cool. And handling this should simple be done by removing "{ OJ" and
"}", or is there more to it?

/Palle




Re: "{ OJ " group outer joins in queries from

От
Tom Lane
Дата:
Palle Girgensohn <girgen@pingpong.net> writes:
> Ah, cool. And handling this should simple be done by removing "{ OJ" and
> "}", or is there more to it?

I think you might want to translate them to "(" and ")"; not sure if
there are cases where it will matter or not, but it can't hurt.

            regards, tom lane

Re: "{ OJ " group outer joins in queries from

От
Xavier Poinsard
Дата:
Barry Lind wrote:
> Not entirely true.  The driver does support the ODBC escape syntax for
> dates and stored procedures/functions but not for outer joins, likes and
> scalar functions.
Would a patch that add support for some scalar functions have a chance
to be accepted ?