Pony ORM Release 0.6.3
This release was intended to fix the behavior of obj.flush(), but failed to do it in a proper way.
Please skip this release and update to 0.6.4 if you are using obj.flush() method.
- Fixed #138: Incorrect behavior of
obj.flush()
: assertion failed after exception - Fixed #157: Incorrect transaction state after
obj.flush()
caused “release unlocked lock” error in SQLite - Fixed #151: SQLite +
upper()
orlower()
does not work as expected
#138: Incorrect behavior of obj.flush(): assertion failed after exception,
#157: Incorrect transaction state after obj.flush() caused “release unlocked lock” error in SQLite
These are long-standing bugs, but they were discovered just recently. The bugs were caused by incorrect implementation of obj.flush()
method. In the same time the global flush()
function worked correctly. Before this fix the method obj.flush()
didn’t call before_xxx
and after_xxx
hooks. In some cases it led to assertion error or some other errors when using SQLite.
Now both bugs are fixed and the method obj.flush()
works properly.
#151: SQLite + upper() or lower() does not work as expected
Since SQLite does not support Unicode operations, the upper()
and lower()
SQL functions do not work for non-ascii symbols.
Starting with this release Pony registers two additional unicode-aware functions in SQLite: py_upper()
and py_lower()
, and uses these functions instead of the standard upper()
and lower()
functions:
>>> select(p.id for p in Person if p.name.upper() == 'John')[:]
SQLite query:
SELECT "p"."id"
FROM "Person" "p"
WHERE py_upper("p"."name") = 'John'
For other databases Pony still uses standard upper()
and lower()
functions.