yes, even for HQL... the reason for this is that HQL has no way to
understand...
If you want to send an integer (voided=0) or where as from (voided='1'), how
is HQL or anybody to understand, unless you know the underlying table may be
implemented as a BOOLEAN or CHAR or INT

---
Regards,
Saptarshi PURKAYASTHA

My Tech Blog:  http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE


On 30 August 2011 20:49, Darius Jazayeri <[email protected]> wrote:

> Okay, even for HSQL queries?
>
> -Darius
>
>
> On Tue, Aug 30, 2011 at 11:00 AM, Saptarshi Purkayastha 
> <[email protected]>wrote:
>
>> nope... it won't be a problem with Oracle
>> Liquibase will do the conversion to NUMBER(1) automatically and the JDBC
>> driver will convert setBoolean/getBoolean correctly to match these...
>>
>> So, it is not a problem or case of compatibility. It is only when a
>> database supports BOOLEAN type, it is unfair to treat it as a second-class
>> citizen. If the database treats BOOLEAN as second-class, we can't do much
>> otherwise.
>>
>> ---
>> Regards,
>> Saptarshi PURKAYASTHA
>>
>> My Tech Blog:  http://sunnytalkstech.blogspot.com
>> You Live by CHOICE, Not by CHANCE
>>
>>
>> On 30 August 2011 19:45, Darius Jazayeri <[email protected]> wrote:
>>
>>> Just to clarify, we will be breaking Oracle compatibility, in order to
>>> provide Postgres compatibility, right?
>>>
>>> (I think that's a correct tradeoff, but want to make that explicit if
>>> we're doing it.)
>>>
>>> -Darius
>>>
>>>
>>> On Tue, Aug 30, 2011 at 6:05 AM, Ben Wolfe <[email protected]> wrote:
>>>
>>>> Ok, if backwards compatibility is only broken for people using postgres,
>>>> I'm fine changing the smallint-->boolean.  Modules and core could continue
>>>> to work with voided=1/voided=true in mysql.  You should find/change as many
>>>> places in core and change to just voided=true so that at least core works
>>>> with postgres.  If a module wants to support postgres they'll have to 
>>>> change
>>>> their own sql to voided=true.
>>>>
>>>> Ben
>>>>
>>>>
>>>> On Tue, Aug 30, 2011 at 12:14 PM, Saptarshi Purkayastha <
>>>> [email protected]> wrote:
>>>>
>>>>> Ben,
>>>>>
>>>>> Then we will have to change the other part where instead of true or
>>>>> false, or setBoolean/getBoolean, we will have to change those to
>>>>> setInt/getInt, This will be needed to be done in HSQL, ResultSet and other
>>>>> places because there is inconsistency on either sides. So the changes have
>>>>> to be done one way or the other, if you have to make it work in different
>>>>> database engines.
>>>>>
>>>>> Since our Objects have Boolean properties, I suggested that we make the
>>>>> columns liquibase boolean from smallint. It helps keep someone watching 
>>>>> the
>>>>> columns sane...
>>>>>
>>>>>
>>>>>
>>>>> ---
>>>>> Regards,
>>>>> Saptarshi PURKAYASTHA
>>>>>
>>>>> My Tech Blog:  http://sunnytalkstech.blogspot.com
>>>>> You Live by CHOICE, Not by CHANCE
>>>>>
>>>>>
>>>>> On 30 August 2011 12:33, Ben Wolfe <[email protected]> wrote:
>>>>>
>>>>>> Roger, this is all hidden behind the scenes in the dao layer.  The api
>>>>>> methods and objects do not need to change regardless of what decision is
>>>>>> made.  The conversation you are thinking of was also started by 
>>>>>> Saptarshi:
>>>>>> "Why do we have '(big b) Boolean isVoided()' *AND* '(big b) Boolean
>>>>>> getVoided()'?"
>>>>>>
>>>>>> The best approach really is to just leave it as we have it: store all
>>>>>> booleans as integers and refer to them as integers in the code.  This 
>>>>>> means
>>>>>> we don't break backwards compatibility (which modules developers HATE) 
>>>>>> and
>>>>>> also that we're compatible with all database engines.
>>>>>>
>>>>>> Burke/Saptarshi: That regex won't find queries created with Criteria
>>>>>> queries or with HSQL.
>>>>>>
>>>>>> Ben
>>>>>>
>>>>>>
>>>>>> On Mon, Aug 29, 2011 at 9:20 PM, Friedman, Roger (CDC/CGH/DGHA) (CTR)
>>>>>> <[email protected]> wrote:
>>>>>>
>>>>>>>  Wouldn't this also change all of our get methods to is methods?  I
>>>>>>> know we had a thread about this recently but can't seem to find it.*
>>>>>>> ***
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> *From:* [email protected] [mailto:[email protected]] *On Behalf Of 
>>>>>>> *Saptarshi
>>>>>>> Purkayastha
>>>>>>> *Sent:* Monday, August 29, 2011 1:13 PM
>>>>>>> *To:* [email protected]
>>>>>>> *Subject:* Re: [OPENMRS-DEV] Changes to liquibase xmls****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> Interesting suggestion Burke, to use NOT... and it works for MySQL,
>>>>>>> Postgres and H2... but alas not in SQL Server and Oracle (probably DB2 
>>>>>>> as
>>>>>>> well)!****
>>>>>>>
>>>>>>> The voided='0' seems to be work on all databases****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> Also there are many more boolean columns than retired and voided. We
>>>>>>> also use voided = false at some places. Nonetheless that 
>>>>>>> search-and-replace
>>>>>>> could be the first change.****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> PS: This <http://troels.arvin.dk/db/rdbms/> has been a seminal
>>>>>>> document that I've used lately.****
>>>>>>>
>>>>>>>
>>>>>>> ---
>>>>>>> Regards,
>>>>>>> Saptarshi PURKAYASTHA
>>>>>>>
>>>>>>> My Tech Blog:  http://sunnytalkstech.blogspot.com
>>>>>>> You Live by CHOICE, Not by CHANCE
>>>>>>>
>>>>>>> ****
>>>>>>>
>>>>>>> On 29 August 2011 22:00, Burke Mamlin <[email protected]>
>>>>>>> wrote:****
>>>>>>>
>>>>>>> Is there any reason *not* to be using "where voided" and "where not
>>>>>>> voided" in queries instead of comparing to a number?  Hopefully
>>>>>>> s/(voided|retired)\s*=\s*1/$1/g and s/(voided|retired)\s*=\s*0/not
>>>>>>> $1/g  would be reasonably efficient and specific, making finding and
>>>>>>> fixing most of the code relatively easy.  Checkstyle could look for this
>>>>>>> pattern & throw warnings stating the preferred convention for checking
>>>>>>> boolean values.  I'm sure there are other boolean columns to be 
>>>>>>> addressed
>>>>>>> and a simple search & replace might not fix them all, but there's no 
>>>>>>> reason
>>>>>>> that they need to be all fixed in one step – i.e., (1) fix the 
>>>>>>> low-hanging
>>>>>>> fruit, (2) put conventions ± checkstyle checks to reduce the likelihood 
>>>>>>> that
>>>>>>> the problem will continue to grow, and then (3) seek out and fix the
>>>>>>> remaining cases focusing on core & distributed modules first.****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> -Burke****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> On Mon, Aug 29, 2011 at 9:26 AM, Michael Seaton <[email protected]>
>>>>>>> wrote:****
>>>>>>>
>>>>>>> I share Saptarshi's concern, particularly if there are lots of
>>>>>>> modules out there that may be making the "voided = 0" assumptions in 
>>>>>>> direct
>>>>>>> SQL queries.  Will this be something that is not backwards compatible 
>>>>>>> and
>>>>>>> requires lots of module changes in order to successfully upgrade?***
>>>>>>> *
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 08/29/2011 02:18 AM, Ben Wolfe wrote: ****
>>>>>>>
>>>>>>> The changes should be down at the db layer, right?  I think that
>>>>>>> should be fine.
>>>>>>>
>>>>>>> Is there a way to tell postgres to treat 0 like a 'false'?  Perhaps
>>>>>>> with a db connection string property?
>>>>>>>
>>>>>>> Ben****
>>>>>>>
>>>>>>> On Sun, Aug 28, 2011 at 5:42 AM, Saptarshi Purkayastha <
>>>>>>> [email protected]> wrote:****
>>>>>>>
>>>>>>> One of the big problems that I'm encountering at the moment for
>>>>>>> making OpenMRS run on most database servers is with our assumption of 
>>>>>>> the
>>>>>>> BOOLEAN type. Because MySQL stores BOOLEAN as TINYINT(1), we have made 
>>>>>>> the
>>>>>>> assumption that BOOLEAN will be represented as 0 or 1. Thus, the column 
>>>>>>> type
>>>>>>> for (retired, voided etc) in liquibase was using smallint (to make it
>>>>>>> ANSI-SQL :D) as the type and default as 0 (FALSE). This was fairly easy 
>>>>>>> to
>>>>>>> change in the liquibase xmls by a search-and-replace (but still looking 
>>>>>>> up
>>>>>>> all the columns) ****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> The bigger issue surrounding this assumption is in code, where we
>>>>>>> have made voided=0 in queries or getInt() from ResultSet. These are 
>>>>>>> fine for
>>>>>>> the MySQL assumption, but doesn't work with other databases. This is a
>>>>>>> fairly big change to do, with changes at many places in code...****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> Are we ready?? ****
>>>>>>>
>>>>>>>   ****
>>>>>>>
>>>>>>> ---
>>>>>>> Regards,
>>>>>>> Saptarshi PURKAYASTHA
>>>>>>>
>>>>>>> My Tech Blog:  http://sunnytalkstech.blogspot.com
>>>>>>> You Live by CHOICE, Not by CHANCE
>>>>>>>
>>>>>>> ****
>>>>>>>
>>>>>>> On 18 August 2011 15:59, Ben Wolfe <[email protected]> wrote:****
>>>>>>>
>>>>>>> The funny thing is that the liquibase changeset files were used for
>>>>>>> the initial scripts was for database portability.  If you can export 
>>>>>>> them as
>>>>>>> standard sql files and run those just as easily as the liquibase ones, 
>>>>>>> go
>>>>>>> for it.  The tricky thing to solve would be how to get the progress 
>>>>>>> bars to
>>>>>>> work in the initialization wizard.
>>>>>>>
>>>>>>> You can either change the datatypes to a generic ansi standard ones,
>>>>>>> or change to something that liquibase knows about and converts to each
>>>>>>> different datatype on the different dbms's correctly.
>>>>>>>
>>>>>>> Ben ****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> On Wed, Aug 17, 2011 at 10:47 PM, Saptarshi Purkayastha <
>>>>>>> [email protected]> wrote:****
>>>>>>>
>>>>>>> MySQL longtext is the same as the TEXT of postgresql... for the
>>>>>>> others we have to make database specific options between the data types
>>>>>>> ****
>>>>>>>
>>>>>>> tinyint to smallint in the liquibase-schema-only****
>>>>>>>
>>>>>>> there are many similar difference that are database specific and we
>>>>>>> have to make database specific datatypes.****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> I'm yet to go through all the changes required... but will make as
>>>>>>> these come. But for datatypes that are incompatible, probably be 
>>>>>>> database
>>>>>>> specific.****
>>>>>>>
>>>>>>> Is that ok?? or we should move those to ANSI-standard ones only??***
>>>>>>> *
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>>
>>>>>>> ---
>>>>>>> Regards,
>>>>>>> Saptarshi PURKAYASTHA
>>>>>>>
>>>>>>> My Tech Blog:  http://sunnytalkstech.blogspot.com
>>>>>>> You Live by CHOICE, Not by CHANCE
>>>>>>>
>>>>>>> ****
>>>>>>>
>>>>>>> On 18 August 2011 00:48, Darius Jazayeri <[email protected]>
>>>>>>> wrote:****
>>>>>>>
>>>>>>> Hi Saptarshi, ****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> In principle I'm fine with these, but let's get at the specifics of
>>>>>>> datatypes.****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> We probably use the mysql text, mediumtext, and longtext types a lot,
>>>>>>> because they're really usefully-sized datatypes. What will we replace 
>>>>>>> those
>>>>>>> with?****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> What other datatypes are you expecting to change?****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> -Darius****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> On Wed, Aug 17, 2011 at 11:25 AM, Saptarshi Purkayastha <
>>>>>>> [email protected]> wrote:****
>>>>>>>
>>>>>>>  Hi, ****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> While we were recently discussing that OpenMRS should run on multiple
>>>>>>> database servers, I started working on Support Multiple Databases in
>>>>>>> OpenMRS Installation and 
>>>>>>> Update<https://tickets.openmrs.org/browse/TRUNK-1925>
>>>>>>> .****
>>>>>>>
>>>>>>> There are some of the following broad changes that need to be made
>>>>>>> the the liquibase xml so that we can install OpenMRS on different 
>>>>>>> databases
>>>>>>> (target MySQL, Postgres, MsSQL... and may be later Oracle).****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> 1.) Change datatypes and create tables that are compatible with all
>>>>>>> the databases (directly for compatible types or database specific for
>>>>>>> non-compatible types)****
>>>>>>>
>>>>>>> 2.) Remove precision from many columns which are not compatible
>>>>>>> across all those database servers****
>>>>>>>
>>>>>>> 3.) Divide a larger changeset into smaller changeset so that they can
>>>>>>> be done commonly (by changing syntax) across multiple database servers.
>>>>>>> ****
>>>>>>>
>>>>>>> 4.) Due to move to liquibase 2.0, all checksums for changesets have
>>>>>>> been NULL'd and then changed to the new format. This should happen
>>>>>>> automatically, but if anyone depends on these checksums, then you should
>>>>>>> reply to this email :)****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> We may also have to change if anywhere non-ANSI syntax or
>>>>>>> MySQL-syntax has been used in the DAO. I haven't reached that far to 
>>>>>>> tell
>>>>>>> how many such instances exist, but I hope there aren't many such places
>>>>>>> ****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> What do other developers think about these changes? Any suggestions
>>>>>>> on the way?? Anything that u think should be avoided or done?? These are
>>>>>>> fairly large changes and may result in incompatible checksums for 
>>>>>>> already
>>>>>>> run changesets.****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> PS: On a sidenote, I would like to highlight that for new
>>>>>>> installations it is silly that we are doing changesets based 
>>>>>>> installations.
>>>>>>> While the world has moved to image based deployments for OS and
>>>>>>> large-software packages, we did the reverse and moved to changesets 
>>>>>>> based
>>>>>>> installations. Upgrades are easier through changesets, but for new
>>>>>>> installations they are lengthy and boring. I would like to propose the 
>>>>>>> for
>>>>>>> new installations, just an sqldump deploy is easy and fast, while 
>>>>>>> keeping to
>>>>>>> changesets for upgrades.****
>>>>>>>
>>>>>>>
>>>>>>> ---
>>>>>>> Regards,
>>>>>>> Saptarshi PURKAYASTHA
>>>>>>>
>>>>>>> My Tech Blog:  http://sunnytalkstech.blogspot.com
>>>>>>> You Live by CHOICE, Not by CHANCE****
>>>>>>>   ------------------------------
>>>>>>>
>>>>>>> Click here to 
>>>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>>>>  OpenMRS Developers' mailing list
>>>>>>> ****
>>>>>>>
>>>>>>>  ** **
>>>>>>>
>>>>>>> ** **
>>>>>>>     ------------------------------
>>>>>>>
>>>>>>> Click here to 
>>>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>>>>  OpenMRS Developers' mailing list
>>>>>>> ****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> ** **
>>>>>>>     ------------------------------
>>>>>>>
>>>>>>> Click here to 
>>>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>>>>  OpenMRS Developers' mailing list
>>>>>>> ****
>>>>>>>
>>>>>>> ** **
>>>>>>>  ------------------------------
>>>>>>>
>>>>>>> Click here to 
>>>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>>>>  OpenMRS Developers' mailing list
>>>>>>> ****
>>>>>>>    ------------------------------
>>>>>>>
>>>>>>> Click here to 
>>>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>>>>  OpenMRS Developers' mailing list
>>>>>>> ****
>>>>>>>
>>>>>>> ** **
>>>>>>>
>>>>>>> ** **
>>>>>>>   ------------------------------
>>>>>>>
>>>>>>> Click here to 
>>>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>>>>  OpenMRS Developers' mailing list
>>>>>>> ****
>>>>>>>
>>>>>>
>>>>>>
>>>>> ------------------------------
>>>>> Click here to 
>>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>>  OpenMRS Developers' mailing list
>>>>>
>>>>
>>>> ------------------------------
>>>> Click here to 
>>>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from
>>>>  OpenMRS Developers' mailing list
>>>>
>>>
>>>
>> ------------------------------
>> Click here to 
>> unsubscribe<[email protected]?body=SIGNOFF%20openmrs-devel-l>from 
>> OpenMRS Developers' mailing list
>>
>
>

_________________________________________

To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to 
[email protected] with "SIGNOFF openmrs-devel-l" in the  body (not 
the subject) of your e-mail.

[mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l]

Reply via email to