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

