Thread: [SQLObject] firebird db schema creation bug
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Daniel F. <dn...@ho...> - 2005-05-26 19:20:45
|
I'm using SVN version of Sqlobject. Everything is working fine except for one thing.. I'm using Firebird DB and when I make modifications to my objects and try to use automatic schema creation, it do some weird stuff with my CurrencyCol and DecimalCol fields. Sometimes it creates such columns as Integer others as Date, which seems to be definitively a bug. I can help to fix this up, I just need someone to tell me where to look at, is it a firebirdconnection.py issue or a col.py one or maybe something else. I wish someone could help, I'm a little short of time. Thanks in advance ------------------------------- -- - Daniel Fernandez dnfesp at hotmail.com ------------------------------- -- - |
From: Oleg B. <ph...@ma...> - 2005-05-26 19:42:40
|
On Thu, May 26, 2005 at 07:19:51PM +0000, Daniel FernАndez wrote: > I can help to fix this up, I just need someone to tell me where to look at, > is it a firebirdconnection.py issue or a col.py one or maybe something > else. Probably both. Start with a few short tests that demonstrate the problem. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Daniel F. <dn...@ho...> - 2005-05-27 15:57:08
|
I've resolved the issue and seems to be firebird specific. According to the Firebird Novice's Guide, this is what happen: <quote> DECIMAL and NUMERIC datatypes with precision larger than 9 are stored as 64-bit exact numerics if they are created in dialect 3. </quote> And actually what is happening is that in col.py where CurrencyCol is defined, I've found the following: class SOCurrencyCol(SODecimalCol): def __init__(self, **kw): pushKey(kw, 'size', 10) pushKey(kw, 'precision', 2) SODecimalCol.__init__(self, **kw) Default size of a CurrencyCol is 10 and since 10 is a precision larger than what Decimal or Numeric datatypes can handle without issues in FB (9), then the result becomes unexpected and sometimes an Integer (int64) column gets created or even a date one.. The solution was pretty easy by modifying default size param to 9, I think such size is enough in most situations so it would not be a problem. The affected class would look like this: class SOCurrencyCol(SODecimalCol): def __init__(self, **kw): pushKey(kw, 'size', 9) pushKey(kw, 'precision', 2) SODecimalCol.__init__(self, **kw) pretty easy.. hope someone can make a patch. ------------------------------- -- - Daniel Fernandez dn...@ho... ------------------------------- -- - |