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