Jean, what you are experiencing is the expected behavior.

In Derby, everything after the comment delimiter which is -- is considered a
comment and not part of the sql. Optimizer override is just a special
comment with it's own syntax rule. And the syntax rule for optimizer
overrides expects propertyname=value.

When a user specifies --derby-properties index=IDX1 order by num, Derby
determines that is an optimizer override. index=IDX1 follows the syntax rule
of optimizer override but the string "order by num" and hence the user will
see a syntax error.

A Jira issue for java example in the docs would be great. If you have any
other feedback on the optimizer override doc page, please post that too.

Thanks,
Mamta

On 3/9/07, Jean T. Anderson <[EMAIL PROTECTED]> wrote:

I got a question today on how to do optimizer overrides in a java app
and thought I would post my answer here to verify what I said was
correct and see if anyone has better ideas on how to do it. The docs [1]
have good examples that can be run from ij, but it wasn't clear to the
user how to execute them in a java app. The main sticking poing was the
optimizer override must be in a comment at the end of the line.

I modified the SimpleApp.java that comes with the Derby distribution to
add two indexes:

  s.execute("create index IDX1 on derbyDB(num)");
  s.execute("create index IDX2 on derbyDB(addr)");

I showed two queries that work (notice how there must be a carriage
return after the comment in the second query):

  ResultSet rs = s.executeQuery(
  "SELECT num, addr FROM derbyDB --derby-properties index=IDX1");

  ResultSet rs = s.executeQuery(
  "SELECT num, addr FROM derbyDB --derby-properties index=IDX1 \r order
by num");

The "\r" worked, but is there a better way to do this?

I also showed two queries that get syntax errors.

This query gets an error because there isn't a carriage return after the
--derby-properties clause and before the "order by" clause:

  ResultSet rs = s.executeQuery(
     "SELECT num, addr FROM derbyDB --derby-properties index=IDX1 order
by num");

This query gets a syntax error because the --derby-properties clause
must come after the table name:

  ResultSet rs = s.executeQuery(
     "SELECT num, addr FROM derbyDB order by num --derby-properties
index=IDX1");

Any suggestions/corrections? I'll open a Jira issue with a java example
to add to the existing docs.

thanks,

-jean

[1] http://db.apache.org/derby/docs/dev/tuning/ctunoptimzoverride.html

Reply via email to