2
- An IStatEvent is now logged when a store is opened.
3
- Different schema versions of the same item type now no longer
4
compare equal, which fixes some breakage in the upgrade system,
6
- Significantly reduce the runtime cost of opening a store by
7
reducing the amount of work spent to verify schema correctness.
10
- Fixed a _SubSchedulerParentHook bug where a transient run failure
11
would cause future event scheduling in the relevant substore to
15
- Added 'requiresFromSite' to axiom.dependency, expressing a
16
requirement on the site store for the successful installation of
17
an item in a user store.
18
- Made errors from duplicate item type definition friendlier.
21
- Upgraders can now safely upgrade reference attributes.
22
- The batch process is no longer started unless it's needed.
23
- Removed use of private Decimal APIs that changed in Python 2.5.2.
25
- "axiomatic start" changed to use the public interface to twistd's
26
behaviour instead of relying on internal details.
27
- Store now uses FilePaths to refer to its database or files directory.
28
- Automatic powerup discovery is now a feature of powerups rather
29
than of axiom.dependency.
30
- Stores now record the released versions of code used to open them.
31
- "axiomatic upgrade" added, a command for completely upgrading a store.
32
- Removed no-longer-working APSW support code.
35
- Substores and file storage for in-memory stores are now supported.
38
- A bug where exceptions were raised when tables were created concurrently is
42
- Added the beginnings of a query introspection API.
45
- Added a 'postCopy' argument to
46
upgrade.registerAttributeCopyingUpgrader, a callable run
47
with the new item after upgrading.
50
- Fixed a bug where user store insertion/extraction failed if a
51
SubScheduler was installed but no TimedEvents existed.
54
- Fixed docstrings in axiom.dependency.
55
- Scheduler and SubScheduler now declared to implement IScheduler.
58
- Multi-version upgraders are now supported: an upgrader function
59
can upgrade items more than a single version at a time.
60
- Multi-item-class queries now supported: Store.query takes a tuple
61
as its first argument, similar to a comma-separated column clause
62
for a SELECT statement in SQL.
63
- Empty textlists are now properly distinguished from a textlist
64
containing a single empty string.
65
- Handling of items scheduled to run with axiom.scheduler being
66
deleted before they run has been fixed.
69
- AxiomaticCommand is no longer itself an axiom plugin.
70
- axiom.test.historic.stubloader.StubbedTest now has an
71
'openLegacyStore' method, for opening the unupgraded store
73
- The default argument to Store.getItemByID is now respected in the
74
case where an attempt is made to load an item which was created
75
and deleted within a single transaction.
78
- A new method, axiom.store.ItemQuery.paginate, has been added, which splits
79
a query's result-gathering work into multiple "pages" so that we can deal
80
with extremely large result sets.
81
- A dependency management system for Items has been added in
82
axiom.dependency. InstallableMixin has been removed;
83
axiom.dependency.installOn is now used to install Items and connect powerups.
84
Items can declare their dependence on another item by declaring attributes
85
with axiom.dependency.dependsOn. When items are installed, their dependencies
86
will be created and installed as well. Installation is no longer tracked by
87
'installedOn' attributes but by _DependencyConnector items.
88
- A bug preventing 'axiomatic userbase list' from working on a fresh
89
mantissa database has been fixed.
92
- Change ItemQuery.deleteFromStore so that it will call deleteFromStore on an
93
Item subclass if it has overridden that method.
96
- Added fullyQualifiedName to IColumn, _StoreIDComparer, and _PlaceholderColumn.
97
- Added support for distinct Item queries and for counting distinct attribute
99
- Exceptions raised by Axiom upgrade methods are logged instead of silently
103
- Updated axiomatic to work with Twisted trunk.
107
- Raise a more informative exception when accessing Item references pointing
108
to nonexistent items.
109
- Enforce prevention of deletion of items referred to by references set to
111
- Tables in the FROM clause of SQL generated by queries are now ordered by the
112
order of the Item subclasses in the comparisons used to generate them.
113
- A new IComparison implementation has been added to allow application-level
114
code to explicitly specify the order of types in the join.
117
- Added a 'batchInsert' method to Store, allowing insertion of items without
118
loading them into memory.
119
- Change ItemQuery.deleteFromStore to delete items without loading them if
123
- Changed userbase.getLoginMethods to return LoginMethods rather than
124
(localpart, domain) tuples.
127
- Fixed a scheduler bug that would cause tasks scheduled in a substore to be
128
removed from the scheduler.
131
- dependency.dependsOn now takes similar arguments to attributes.reference.
134
- The axiomatic commands "insert-user" and "extract-user" now interact with
135
the scheduler properly.
138
- A new dependency-management system has been added, in axiom.dependency.
141
- The upgrader added in the previous release has been fixed.
144
- item.Item has a new method, stored, which will be called the first time an
145
item is added to a store, in the same transaction as it is added.
146
- A new class, item.Placeholder, has been added to assist in self-join
150
- userbase.LoginSystem now raises a new exception type when login is attempted
151
using a username with no domain part.
154
- SubStoreStartupService was removed; user stores' services are no longer
155
incorrectly started when the Mantissa administrative powerup is installed.
156
- IPowerupIndirector was added, allowing for installation of SubStore items
157
as powerups on other items.
160
- Items with attributes.path attributes can now be upgraded.
161
- axiom.scheduler has been improved to make clock-related tests easier to write.
162
- Improved test coverage and various bugfixes.
165
- A bug causing the table name cache to grow too large was fixed.
168
- Type names are now determined on a per-store basis, rather than cached
169
globally on the Item.
172
- axiom.slotmachine._structlike removed in favor of the implementation in
173
Epsilon, epsilon.structlike.record.
174
- The batch process has been adjusted to do more work per iteration.
178
- Fixed several bugs, including several potential data-corruption issues.
179
All users are recommended to upgrade, but back up your data and test your
181
- There is now a 'money' attribute type which uses fixed-precision math in
182
the database specifically designed for dealing with the types of issues
183
associated with database-persistent financial data.
184
- Some simple relational constraints (the equivalent of ON DELETE CASCADE)
185
have been implemented using the 'whenDeleted' keyword argument.
186
- Indexes which are created in your code will now automatically be added to
187
opened databases without requiring an upgrader or a change to your Item's
189
- You can now use 'declareLegacyItem' to declare legacy schemas to record the
190
schema of older versions of your software -- this enables upgrading of more
191
than one step per release of your application code.
192
- You can now create multi-column indexes using attributes.compoundIndex.
194
- Made Item.typeName and Item.schemaVersion optional in most cases.
195
- Added axiom.batch for reliably operating on large groups of items.
196
- Removed all usages of util.wait from tests
197
- added 'queryutil.contains' utility query method, for testing when a value
198
is between two attributes.
199
- Added 'negate' argument to oneOf, allowing for issing SQL 'NOT IN' queries.
200
- Improved reliability of the scheduler. Errors are now logged in a
202
- Added helper classes for writing axiomatic plug-in commands; see
203
documentation for axiomatic.scripts.axiomatic.AxiomaticCommand and
205
- AttributeQuery now provides .min() and .max() methods which return the
207
- Transactions are more managed more conservatively; BEGIN IMMEDIATE
208
TRANSACTION is used at the beginning of each transact() call, to guarantee
209
that concurrent access is safe, if sometimes slightly slower.
210
- SQL generation has been deferred to query time, which means that there is a
211
more complete API for manipulating Query objects.
212
- repr() of various objects has been improved for easier debugging.
213
- Axiom now emits various log events which you can observe if you wish to
214
analyze query statistics in real-time. These events don't go to the text log by
215
default: Mantissa, for example, uses them to display a pie chart of the
216
most expensive queries on a running system.
219
- Fixed sum() in the case of a table with no rows.
220
- LoginAccount no longer contains authentication information, but may be
221
referred to by one or more LoginMethods, which do.
222
- Added an attribute type for floats: ieee754_double.
223
- Enhanced functionality in axiom.sequence.List.
224
- Added support for SQL DISTINCT queries.
225
- On the command line, axiomatic will attempt to automatically discover
226
the correct database to use, if one is not specified.
227
- PID and logfiles are now kept in a subdirectory of the database
229
- The "start" axiomatic subcommand now works on Windows.
230
- Two new axiomatic subcommands have been added related to running servers
231
from Axiom database: "stop" and "status".
232
- Two new axiomatic subcommands have been added related to user
233
management: "extract-user" and "insert-user" for removing users from and
234
adding users to an existing credentials database, along with all of
236
- Axiom queries can now be sorted by a tuple of columns.
239
- Removed Axiom/axiom/examples/axiom.tac
240
- Added 'axiomatic start'
241
- added 'hyper', a 'super' capable of working with Item mixins
242
- added check to make sure Unicode strings won't be misleadingly persisted as
244
>>> str(buffer(u'hello'))
245
'h\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00'
246
- formalized and improved query result to be an object with its own interface
247
rather than a generator
248
- correctly call activate() on items after they have been upgraded
251
- Removed accidental Mantissa dependency
252
- Automatic upgrade service added
253
- Lots of new docstrings
254
- Query utility module added, with a function for finding overlapping
256
- Added formal interface for the `where' argument to Store.query()
257
- Added 'oneOf' attribute