Hi Eike!

Thx for the detailed description. Maybe I am allowed to add my 2 cents. As it 
is an HSQL thing I believe the only place to issue "DROP SCHEMA PUBLIC CASCADE" 
is the HSQLDDLGenerator having a propper dropDatabase method (which indeed 
should be used by the generic DDL class) :-) 


Jens



Sent from my iPhone

On 09.08.2012, at 17:51, Eike Kettner <[email protected]> wrote:

> Hi all,
> 
> Thank you Jens for clarifying. I could now reproduce this exception!
> The issue is, that the database is not instantiated with a schema name.
> I noticed that none of the examples is doing this. If I call the super
> constructor of "SampleDB" with a schema name of "public" there is no
> exception, but nothing is dropped either. Now, that's even worse :) The
> database is obviously happy with this instruction but it won't do what's
> expected.
> 
> The script that's created by getDDLScript(DBCmdType.DROP, db, script) is
> 
>    DROP USER public                                                    
> 
> where "public" is the schema name. As Jens already pointed out, that
> happens on DBDDLGenerator:219 (v2.4.0). This is probably doing something
> else than dropping a database, but syntactically correct as HSQL doesn't
> complain.
> 
> I suppose that needs to be fixed in either HSqlDDLGenerator or
> DBDDLGenerator. I'm not quite sure what to do, but I found some
> "inconsistencies":
> 
> * DBDDLGenerator has a protected method "dropDatabase" that is unused
>  (reported in IDEA) but overriden in OracleDDLGenerator. So maybe line
>  219 in DBDDLGenerator should call "dropDatabase" instead? This could
>  then be overriden in HSqlDDLGenerator.
> 
> * right now line 219 in DBDDLGenerator says
> 
>     dropObject(((DBDatabase) dbo).getSchema(), "USER", script);
> 
>  which is exactly how the `dropDatabase` method is overriden in
>  OracleDDLGenerator. I suspect this is the correct way to drop a
>  database in oracle?
> 
> I created a Jira issue for this now:
> https://issues.apache.org/jira/browse/EMPIREDB-155
> 
> best regards
> Eike
> 
> On [Thu, 09.08.2012 14:17], [email protected] wrote:
>> Hi Eike, hi Francis!
>> 
>> A) sorry, I did not mention clearly I use Empire in a spring env based on 
>> the sample.
>> 
>> B) I am not dropping tables (this works, but misses to drop sequences, 
>> indexes and other constraints), I am dropping a Database. See 
>> DBDDLGenerator:218. In case the HSQL DDL generator executes "DROP SCHEMA 
>> PUBLIC CASCADE" this might be a workaround. Or maybe the schema name is set 
>> to "PUBLIC" on creation time (did not try this honestly)
>> 
>> C) code: driver.getDDLScript(DBCmdType.DROP, db, script); // db is a 
>> DBDatabase
>> 
>> D) I will download the latest 2.4 and retest. 
>> 
>> Jens
>> 
>> Sent from my iPhone
>> 
>> On 09.08.2012, at 12:43, Eike Kettner <[email protected]> wrote:
>> 
>>> Hi all,
>>> 
>>> I'm looking into this today and a few questions popped up :)
>>> 
>>> At first, I thought it got forgotten to set the schema name into the
>>> driver in the EmpireDriverFactory class (as most drivers support this).
>>> But I found out that the HSql-driver does not. Unfortunately I don't
>>> have any knowledge about HSQL, so I cannot comment this any further. Is
>>> it correct for HSQL that its driver is not using a schema name?
>>> 
>>> I then added DROP TABLE code to the spring example project and started
>>> it using HSQL driver. It worked nicely (using the same lines of code
>>> Francis showed in his last mail from the DBDatabaseDriverHSqlTest).
>>> 
>>> @Jens, as Francis already asked, could you provide any stack-trace
>>> and/or a bit of code that shows this behaviour?
>>> 
>>> Best regards
>>> Eike
>>> 
>>> On [Wed, 08.08.2012 22:36], Francis De Brabandere wrote:
>>>> Hi Jens,
>>>> 
>>>> Would you mind creating an issue for this on
>>>> https://issues.apache.org/jira/browse/EMPIREDB - so we make sure this
>>>> is fixed and tracked in the release notes?
>>>> 
>>>> Thanks,
>>>> Francis
>>>> 
>>>> On 8 August 2012 16:57, [email protected] <[email protected]> wrote:
>>>>> HI Eike!
>>>>> 
>>>>> I buy this! I started with this sample and in the meantime figured out we 
>>>>> can use "DROP SCHEMA PUBLIC CASCADE" in the driver in case it is HSQL and 
>>>>> dropping a database is needed.
>>>>> 
>>>>> A fix will be nice. But I can also try to write my own driver factory 
>>>>> class...
>>>>> 
>>>>> Sent from my iPhone
>>>>> 
>>>>> On 08.08.2012, at 15:42, Eike Kettner <[email protected]> wrote:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> I think that's a bug in the EmpireDriverFactory class. This class is
>>>>>> part of the sample project and was created as an example on how it could
>>>>>> work with spring. Well..., do you actually mean this class from the
>>>>>> example-spring project?
>>>>>> 
>>>>>> If so, I would recommend to not depend on this jar file but rather
>>>>>> create a new DriverFactory (without that bug :)) class in your project.
>>>>>> But, of course, the EmpireDriverFactory class in the samples should be
>>>>>> fixed. I can do that the next days.
>>>>>> 
>>>>>> best regards
>>>>>> Eike
>>>>>> 
>>>>>> On [Wed, 08.08.2012 14:51], [email protected] wrote:
>>>>>>> Hi Francis!
>>>>>>> 
>>>>>>> I digged a bit deeper: the schema name is avail as param in the 
>>>>>>> EmpireDriverFactory, but not used at all in case of HSQL (see :65 in 
>>>>>>> the factory). This at least explains the IllegalArgumentEx. Any ideas?
>>>>>>> 
>>>>>>> Jens
>>>>>>> 
>>>>>>> Sent from my iPhone
>>>>>>> 
>>>>>>> On 07.08.2012, at 11:44, Francis De Brabandere <[email protected]> 
>>>>>>> wrote:
>>>>>>> 
>>>>>>>> Hi Jens,
>>>>>>>> 
>>>>>>>> In DBDatabaseDriverHSqlTest this code is in use:
>>>>>>>> 
>>>>>>>>     script = new DBSQLScript();
>>>>>>>>     db.getDriver().getDDLScript(DBCmdType.DROP, db.EMPLOYEE, script);
>>>>>>>>     db.getDriver().getDDLScript(DBCmdType.DROP, db.DEPARTMENT, script);
>>>>>>>>     script.run(db.getDriver(), conn, true);
>>>>>>>> 
>>>>>>>> As far as I know this is working correctly, would you mind providing
>>>>>>>> us with some stacktrace or test to reproduce your issue? What sources
>>>>>>>> are you talking about?
>>>>>>>> 
>>>>>>>> Cheers,
>>>>>>>> Francis
>>>>>>>> 
>>>>>>>> On 6 August 2012 15:15, [email protected] <[email protected]> 
>>>>>>>> wrote:
>>>>>>>>> Hi All!
>>>>>>>>> 
>>>>>>>>> I am working with empire 2.3.0 + spring and got everything working 
>>>>>>>>> incl
>>>>>>>>> transactions. For testing purposes I want to drop my database (hsql in
>>>>>>>>> memory) between test runs. The "database" getCreateDDLScript method 
>>>>>>>>> creates
>>>>>>>>> all tables and I am looking for a DropDDLScript method but can't 
>>>>>>>>> figure it
>>>>>>>>> out. The method exists on the driver (OracleDDLGenerator for example) 
>>>>>>>>> and I
>>>>>>>>> can call it like:
>>>>>>>>> db.getDriver().getDDLScript(DBCmdType.DROP,..) but this fails with an
>>>>>>>>> exception "Invalid Argument null for parameter name". From the 
>>>>>>>>> sources a
>>>>>>>>> schema name is missing so I am a little confused..,
>>>>>>>>> 
>>>>>>>>> Can you point me to the right direction?
>>>>>>>>> Thx in advance
>>>>>>>>> 
>>>>>>>>> Jens
>>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> email: [email protected]   https://eknet.org  pgp: 481161A0
>>>> 
>>> 
>>> -- 
>>> email: [email protected]   https://eknet.org  pgp: 481161A0
>> 
> 
> -- 
> email: [email protected]   https://eknet.org  pgp: 481161A0

Reply via email to