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]<mailto:[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]<mailto:[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]<mailto:[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]<mailto:[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]<mailto:[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]<mailto:djazayeri%[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]<mailto:[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<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> 
from OpenMRS Developers' mailing list


________________________________
Click here to 
unsubscribe<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> 
from OpenMRS Developers' mailing list


________________________________
Click here to 
unsubscribe<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> 
from OpenMRS Developers' mailing list

________________________________
Click here to 
unsubscribe<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> 
from OpenMRS Developers' mailing list
________________________________
Click here to 
unsubscribe<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> 
from OpenMRS Developers' mailing list


________________________________
Click here to 
unsubscribe<mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> 
from OpenMRS Developers' mailing list

Reply via email to