db-ojb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carlos Chávez <ccha...@agssa.net>
Subject Re: Junit Issues
Date Tue, 05 Feb 2008 06:36:55 GMT
Hi Armin.

Armin Waibel Escribio :-)
> Hi Carlos,
>
> thanks for testing the RC using postgresql (I don't use this DB for
> testing) and the detailed feedback.
> The main test database is hsql and some tests use specific
> syntax/keywords not supported by all databases.
> My local test-suit results against different databases are:
>
> database    PB   ODMG
> ----------------------
> hsql        0    0
> mysql       0    0
> oracleXE    0/1  0
> maxDB       5/3  0
>
> oracle fail on a locking test because of a date/timestamp issue (oracle
> specific date/timestamp precision).
> maxDB fail/errors are caused by the jdbc-driver which show bad paging
> support (seems that maxDB returns wrong results when using 'offset')
> I don't want to fix these issues, because the tests will became too
> complex if we always check for the current database.
>
> Carlos Chávez wrote:
>> Hello Armin,
>> Hello All.
>>
>>  I ran the junit test cases of OJB, i found some issues; my environment
>> is: postgresql 8.2.6, java 1.5.0_14, ant 1.7.0, branch OJB_1_0_RELEASE
>> revision 616989.
>>
>> 1. In the profile for postgresql (profile/postgresql.profile) the
>> variables torque.database.createUrl and torque.database.buildUrl have
>> the
>> wrong values.
>>
>>  the value of torque.database.createUrl is
>> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/template1,
>> but
>> it shoul be
>> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/${urlDbalias}.
>>
>>  the value of torque.database.buildUrl is
>> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/${urlDbalias},
>> but it should be
>> ${urlProtocol}:${urlSubprotocol}://${torque.database.host}/template1
>>
>>  Basically the torque.database.createUrl is used to indicate the
>> database
>> test to create and torque.database.buildUrl looks like we need to
>> indicate some other database via ODBC in order to create a database as
>> far i understand, so the test try to create the database template1, but
>> this is wrong because that database already exists and is created by
>> postgresql.
>
> Did you run the OJB test suite with default call
> 'ant junit'?
> In this case ddlutils is used to setup the database.
> Only if you call
> 'ant -Duse-torque=y junit'
> torque is used.
> The ddlutils task only use the torque.database.createUrl property. I
> don't know why we need both properties (buildUrl/createUrl), seems that
> except of postgresql they are always the same.
>
   Yes, with torque the junit test case works fine.

   With ddlutils does not work, throw an out of memory error and added the
tables to the database template1 instead the ojbtest (which is not
created) what i think is wrong because the template1 in postgresql is
used as a template for create new databases.

   I think the following will to fix the issue:

   As i said before set in the profile/postgresql.profile the following:
torque.database.createUrl =
${urlProtocol}:${urlSubprotocol}://${torque.database.host}/${urlDbalias}

torque.database.buildUrl =
${urlProtocol}:${urlSubprotocol}://${torque.database.host}/template1

   in the file build-torque.xml, we need to change the following:
   line 393: change torque.database.createUrl to torque.database.buildUrl
   line 411: change torque.database.buildUrl to torque.database.createUrl
   line 421: change torque.database.buildUrl to torque.database.createUrl

the ddlutils build file does not need any modification.

I tested again torque and ddlutils.

>
>>
>> 2. The other issue is related to the table/field name quoted, in the
>> file
>> src/test/org/apache/ojb/repository_junit.xml, we are quoting the table
>> name QUOTED_ARTICLE, in posrtgresql when we quote a identifier this
>> become
>> case sensitive, so if we have the table quoted_article and we try for
>> example select * from "QUOTED_ARTICLE", the identifier is not the same
>> because the quote, without the quote QUOTED_ARTICLE and quoted_article
>> are
>> the same, but they are not the same if we use the quote. so the test
>> cases
>> fail because the table "QUOTED_ARTICLE" does not exists. we are quoting
>> the fields ARTICLE_ID, ARTICLE_NAME and UNIT in the same descriptor.
>
> This sounds strange. In file src/schema/ojbtest-schema.xml (this file
> contains the sql metadata to create the test database tables) all names
> are in upper case:
>
> <table name="QUOTED_ARTICLE">
>          <column name="ARTICLE_ID" required="true" primaryKey="true"
> type="INTEGER"/>
>          <column name="ARTICLE_NAME" type="VARCHAR" size="150"/>
>          <column name="GROUP_ID" type="INTEGER"/>
>          <column name="UNIT" type="VARCHAR" size="150"/>
>          <column name="PRICE" type="FLOAT"/>
>          <column name="STOCK" type="INTEGER"/>
>          <foreign-key foreignTable="Kategorien">
>            <reference local="GROUP_ID" foreign="Kategorie_Nr"/>
>          </foreign-key>
>      </table>
>
> and in the repository file the quoted name is in upper case too:
> <class-descriptor
>     	  class="org.apache.ojb.broker.QuotedTest$QuotedArticle"
>     	  proxy="dynamic"
>     	  table="'QUOTED_ARTICLE'"
>     >
> Does ddlutils/torque create the table QUOTED_ARTICLE in upper case or is
> the upper case ignored?
>

 I think is a postgresql feature, if you create the table without the
quoted the identifier will be lowercase, so if in the script have CREATE
TABLE QUOTED_ARTICLE, the QUOTED_ARTICLE will be lowercases, if we want
as is we need to quoted the table name or any identifier, like CREATE
TABLE "QUOTED_ARTICLE", this preserve the uppercase.

>
>>
>>
>> 3. The following test case fail because the function curdate() does not
>> exists in postgresql, the correct function is CURRENT_DATE.
>
> The test pass with the function CURRENT_DATE? As said above I don't want
> to write database tests for all databases.

   Yes, the test passed.

>
>
>>
>> 4. The following test case fail because the argument for the abs()
>> function is a string variable:
>>
>> testQuery	Error	 * SQLException during execution of sql-statement: * sql
>> statement: SELECT
>> A0.IDENTITY_,A0.MOD_,A0.MAX_,A0.AVG_,A0.DISTINCT_,A0.HOUR_,A0.AS_,A0.NAME_,A0.FK_ONE_
>> FROM FUNCTION_TEST_KEY A0 INNER JOIN (FUNCTION_TEST_ONE A1 INNER JOIN
>> FUNCTION_TEST_MANY A2 ON A1.ABS_=A2.FK_ONE_) ON A0.FK_ONE_=A1.ABS_ WHERE
>> ((A2.SUM_ = ?) AND mod(A0.MAX_, A0.MOD_) < ?) AND abs(A0.AS_) > ? *
>> Exception message: ERROR: no existe la función abs(character varying) *
>> Vendor error code: 0 * SQL state code: 42883 **
>
> This seems to be a bug in the test. Querying for the absolute value of a
> string is absolute nonsense (written by myself ;-)). I will fix this ASAP!
>
  great.

>
>> 5. some other test that is failing:
>>
>> at
>> org.apache.ojb.broker.accesslayer.ReportQueryRsIterator.getObjectFromResultSet(ReportQueryRsIterator.java:89)
>> at
>> org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:282)
>> at org.apache.ojb.broker.lob.LOBTest.testReportQuery(LOBTest.java:120)
>> Caused by: org.postgresql.util.PSQLException: Bad value for type long :
>
> All other failures are Blob/Clob and Java_Object type related failures.
> Seems that the postgresql Platform implementation class doesn't proper
> support these types.
> I will start working on this ASAP - help is welcome.

  ok, i'll to see what i can do.

  Cheers,
  Carlos Chávez.


>
> regards,
> Armin
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-dev-help@db.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org


Mime
View raw message