Why can't you use "where voided" & "where not voided" in HQL and then use
Hibernate's configuration to manage the translation to the appropriate
dialect -- e.g. using hibernate.query.substitutions or some other setting?
I would much rather have some well-defined conventions for OpenMRS on how to
properly handle booleans & work to get our code to follow the convention
(even if it means that there are a few simple configuration steps needed to
make the system work with Oracle) vs. abandoning any hope of support for one
of the major database engines.

-Burke

On Tue, Aug 30, 2011 at 12:01 PM, Saptarshi Purkayastha <[email protected]>wrote:

> 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
>>>
>>
>>
>   ------------------------------
> 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