Hi Kathey,

This is definitely on my plate of to-do things. I will address this after I debug my tests and would definitelt wan to help people who start off.

thanks
Shreyas

Kathey Marsden wrote:

Jack Klebanoff wrote:



Kathey Marsden wrote:



Shreyas Kaushik wrote:





Hi Kathey,

Thanks for all the guidance and help. Yes got one of my implicit
questions right :-) of how to debug the tests in the framework.
I would definitely do a wrie up for this and put it up on the web when
I am comfortable doing this.
Yes this sort of information would definitely hep users debug the
tests in the framework.

Evan after running the tests with the properties that you had
mentioned the tmp file did not have any major changes ( no stack
tarces for the error I got ),
except for a few warning message relating to empty tables.

One interesting I noticed is that the select statement in the test
that is prior to this is, does a  similar operation and the result
fetches two rows.
So I presume the delte should delete two rows am I missing something
obvious here ?

I did a pass of code that I have changed, I just pull the correlation
name from the query and pass it to the DeleteNode. Could this be a
binding problem?
Looks like that from the error I am getting. I will look at this
aspect more, any more pointers/comments on my code changes will
definitely help.

~ Shreyas

Kathey Marsden wrote:



Hi Shreyas,

I am glad you are back on the trail with this issue and have some
ideas.    I really can't answer your specific question at all because I
don't know *what* SQL we are talking about here,  but if after some more
research, you are still  stuck,  feel free to post a question.  Don't
forget to include the five key ingredients to getting answers from busy
people on the list.

1) The small bit of sql or java code in question.
2) A description of the old and new behaviour and what you think the
right behavior should be.
3) The stack trace if there is one.
4) What you have learned so far from your own evaluation of 1-3 above.
5) A specific question that is not going to take a lot of research for
someone to answer that you think might send you back along your way if
answered.


For this post I think you would have done a pretty good job with 4 and 5 if 1, 2, and 3 were here too. I think you forgot 1 and 2. below are some tips for step 3 to get a stack trace.

        a)  Create a small repro.sql script
              Take just enough sql to get the specific sql from step 1
working.                 (Usually some ddl some inserts and then the
trouble maker)
        b)    start ij with  -Dij.exceptionTrace=true and execute
the sql.

Here is an example.    Looks like I need help with my select
statement #:)
$ java -Dij.exceptionTrace=true org.apache.derby.tools.ij
ij version 10.1
ij> run 'repro.sql';
ij> connect 'jdbc:derby:wombat;create=true';
ij> create table mytab(i int);
0 rows inserted/updated/deleted
ij> insert into mytab values(1);
1 row inserted/updated/deleted
ij> selectoops from mytab;
ERROR 42X01: Syntax error: Encountered "selectoops" at line 1, column 1.
ERROR 42X01: Syntax error: Encountered "selectoops" at line 1, column 1.
      at
org.apache.derby.iapi.error.StandardException.newException(StandardException.java:311)

      at
org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(ParserImpl.java:156)

      at
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:298)

      at
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:107)

      at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:688)

      at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:501)

      at
org.apache.derby.impl.jdbc.EmbedStatement.execute(EmbedStatement.java:475)

      at
org.apache.derby.impl.tools.ij.ij.executeImmediate(ij.java:299)
      at
org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:433)
      at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:310)
      at org.apache.derby.impl.tools.ij.Main.go(Main.java:209)
      at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:175)
      at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:55)
      at org.apache.derby.tools.ij.main(ij.java:60)
ij>

As for reviewing your code so far, I am sorry, but I don't think I have
time to do that right now. Just too busy,  but perhaps someone else from
the community can.  I  have noticed others from your company on the
list.  I  know that a lot of times when I need a review,  I ping someone
that I work with and have pretty good results that way.
Kathey





Another good place to look for debugging information is the derb.log
file. When a test is run using the Derby test harness this file is
found one level down from the test output. If the test output is in
file dir/test.out then the log file is in dir/test/derby.log. The
derby.log file has a record of the SQLExceptions, the statement that
caused them, and the stack traces. I often look in derby.log first,
though if the test does a lot of negative testing derby.log may  be
cluttered with a lot of expected SQLExceptions.

Jack Klebanoff




Excellent point Jack.

If you running outside of the test harness you probably want to put
these in your  derby.properties to get the errors in your derby.log

derby.language.logStatementText=true
derby.stream.error.logSeverityLevel=0

Shreyas, I think your "How To Analyze a Test Failure" page is going to
be a big hit and a valuable resource to the community. It would be
great if you could get an initial draft posted to the list within the
next few weeks while you still have your fresh perspective. (I think
some of us that have been working on these kinds of issues for a while,
start to forget to mention the things that have become automatic.) Then over time folks can iterate over it, expand and improve. I'd be
more than happy to review and will try to gather together some more tips
for you. Over time you could produce a whole "How To" series for
beginners.


On your questions, I want to make sure I am in no way discouraging
questions, but just before you hit send take a look at the post from
the audience's perspective. A good question to ask yourself is, "If I
were a Derby expert, could I effectively answer this question given the
information provided?" If we are talking about the behaviour of a
particular SQL statement, it is really critical to include the SQL
statement in question and probably the ddl that is necessary to run
it. Typically, your audience wouldn't have time to apply an entire
in progress patch, figure out what you are doing. So, you have to
summarize effectively, it is usually not the quantity but the quality of
information that is key. Let's take a look at your refeactions1 diff again, Here is the diff you were asking about for those just joining.


** Start: refActions1 jdk1.5.0 derbyall:derbylang 2005-04-04 15:53:53 ***
6009 del
< ERROR 42X01: Syntax error: Encountered "d" at line 1, column 26.
6009a6009



ERROR 42X04: Column 'DB2TEST.DEPT.DNO' is not in any table in the FROM



list or it appears within a join specification and is outside the scope of the join specification or it appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE statement then 'DB2TEST.DEPT.DNO' is not a column in the target table.





Here is how you can  form your next question on this issue so that  busy
people in the community might able to help.   Fill in the  <>'s  with
the missing information.

I am implementing delete with alias,
  < insert SQL Syntax from the SQL spec here >


I almost have it working but am stuck on this case. < insert general description of the case in question here>

This was disallowed before becuase <... >and gave a Syntax error. Now it <{should work | should still give a syntax error | something
else}> , but with my changes I get an error that the column is not
in any table in the from list.


My general strategy in this case was to
   < ....>
   pull the correlation  name from the query and pass it to the DeleteNode.
   <....>

I thought in this case there might be a binding problem because <...>. In debugging that I found <....>



Here is an example of the SQL for this case and the trace I get with my
changes.

create table <...>.
insert into <....>
<select | delete ...>

<   A question that someone could answer given just the information you
have provided >

It's ok to post your patch so far for reference, but you can't really
expect that anyone is going to have time to apply it and debug the
problem themselves.  You can see I never even needed to know that
refactions1 failed, but I really do need to know what SQL you are trying
to execute and how you expect it to behave.   The great thing about
composing your question in this way is that you will probably find out
what's wrong yourself along the way #:).

Dan, was mentioning an article on "How To Ask Questions the Right Way",
but I am having trouble finding it.  Dan could you post a link?


Kathey






Reply via email to