~ubuntu-branches/debian/sid/sqlalchemy/sid

« back to all changes in this revision

Viewing changes to doc/_sources/changelog/changelog_02.txt

  • Committer: Package Import Robot
  • Author(s): Piotr Ożarowski
  • Date: 2014-06-27 20:17:13 UTC
  • mfrom: (1.4.28)
  • Revision ID: package-import@ubuntu.com-20140627201713-g6p1kq8q1qenztrv
Tags: 0.9.6-1
* New upstream release
* Remove Python 3.X build tag files, thanks to Matthias Urlichs for the
  patch (closes: #747852)
* python-fdb isn't in the Debian archive yet so default dialect for firebird://
  URLs is changed to obsolete kinterbasdb, thanks to Russell Stuart for the
  patch (closes: #752145)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
==============
3
 
0.2 Changelog
4
 
==============
5
 
 
6
 
 
7
 
.. changelog::
8
 
    :version: 0.2.8
9
 
    :released: Tue Sep 05 2006
10
 
 
11
 
    .. change::
12
 
        :tags:
13
 
        :tickets:
14
 
 
15
 
      cleanup on connection methods + documentation.  custom DBAPI
16
 
      arguments specified in query string, 'connect_args' argument
17
 
      to 'create_engine', or custom creation function via 'creator'
18
 
      function to 'create_engine'.
19
 
 
20
 
    .. change::
21
 
        :tags:
22
 
        :tickets: 274
23
 
 
24
 
      added "recycle" argument to Pool, is "pool_recycle" on create_engine,
25
 
      defaults to 3600 seconds; connections after this age will be closed and
26
 
      replaced with a new one, to handle db's that automatically close
27
 
      stale connections
28
 
 
29
 
    .. change::
30
 
        :tags:
31
 
        :tickets: 121
32
 
 
33
 
      changed "invalidate" semantics with pooled connection; will
34
 
      instruct the underlying connection record to reconnect the next
35
 
      time its called.  "invalidate" will also automatically be called
36
 
      if any error is thrown in the underlying call to connection.cursor().
37
 
      this will hopefully allow the connection pool to reconnect to a
38
 
      database that had been stopped and started without restarting
39
 
      the connecting application
40
 
 
41
 
    .. change::
42
 
        :tags:
43
 
        :tickets:
44
 
 
45
 
      eesh !  the tutorial doctest was broken for quite some time.
46
 
 
47
 
    .. change::
48
 
        :tags:
49
 
        :tickets:
50
 
 
51
 
      add_property() method on mapper does a "compile all mappers"
52
 
      step in case the given property references a non-compiled mapper
53
 
      (as it did in the case of the tutorial !)
54
 
 
55
 
    .. change::
56
 
        :tags:
57
 
        :tickets: 277
58
 
 
59
 
      check for pg sequence already existing before create
60
 
 
61
 
    .. change::
62
 
        :tags:
63
 
        :tickets:
64
 
 
65
 
      if a contextual session is established via MapperExtension.get_session
66
 
      (as it is using the sessioncontext plugin, etc), a lazy load operation
67
 
      will use that session by default if the parent object is not
68
 
      persistent with a session already.
69
 
 
70
 
    .. change::
71
 
        :tags:
72
 
        :tickets:
73
 
 
74
 
      lazy loads will not fire off for an object that does not have a
75
 
      database identity (why?
76
 
      see http://www.sqlalchemy.org/trac/wiki/WhyDontForeignKeysLoadData)
77
 
 
78
 
    .. change::
79
 
        :tags:
80
 
        :tickets:
81
 
 
82
 
      unit-of-work does a better check for "orphaned" objects that are
83
 
      part of a "delete-orphan" cascade, for certain conditions where the
84
 
      parent isnt available to cascade from.
85
 
 
86
 
    .. change::
87
 
        :tags:
88
 
        :tickets:
89
 
 
90
 
      mappers can tell if one of their objects is an "orphan" based
91
 
      on interactions with the attribute package. this check is based
92
 
      on a status flag maintained for each relationship
93
 
      when objects are attached and detached from each other.
94
 
 
95
 
    .. change::
96
 
        :tags:
97
 
        :tickets:
98
 
 
99
 
      it is now invalid to declare a self-referential relationship with
100
 
      "delete-orphan" (as the abovementioned check would make them impossible
101
 
      to save)
102
 
 
103
 
    .. change::
104
 
        :tags:
105
 
        :tickets:
106
 
 
107
 
      improved the check for objects being part of a session when the
108
 
      unit of work seeks to flush() them as part of a relationship..
109
 
 
110
 
    .. change::
111
 
        :tags:
112
 
        :tickets: 280
113
 
 
114
 
      statement execution supports using the same BindParam
115
 
      object more than once in an expression; simplified handling of positional
116
 
      parameters.  nice job by Bill Noon figuring out the basic idea.
117
 
 
118
 
    .. change::
119
 
        :tags:
120
 
        :tickets: 60, 71
121
 
 
122
 
      postgres reflection moved to use pg_schema tables, can be overridden
123
 
      with use_information_schema=True argument to create_engine.
124
 
 
125
 
    .. change::
126
 
        :tags:
127
 
        :tickets: 155
128
 
 
129
 
      added case_sensitive argument to MetaData, Table, Column, determines
130
 
      itself automatically based on if a parent schemaitem has a non-None
131
 
      setting for the flag, or if not, then whether the identifier name is all lower
132
 
      case or not.  when set to True, quoting is applied to identifiers with mixed or
133
 
      uppercase identifiers.  quoting is also applied automatically in all cases to
134
 
      identifiers that are known to be reserved words or contain other non-standard
135
 
      characters. various database dialects can override all of this behavior, but
136
 
      currently they are all using the default behavior.  tested with postgres, mysql,
137
 
      sqlite, oracle.  needs more testing with firebird, ms-sql. part of the ongoing
138
 
      work with
139
 
 
140
 
    .. change::
141
 
        :tags:
142
 
        :tickets:
143
 
 
144
 
      unit tests updated to run without any pysqlite installed; pool
145
 
      test uses a mock DBAPI
146
 
 
147
 
    .. change::
148
 
        :tags:
149
 
        :tickets: 281
150
 
 
151
 
      urls support escaped characters in passwords
152
 
 
153
 
    .. change::
154
 
        :tags:
155
 
        :tickets:
156
 
 
157
 
      added limit/offset to UNION queries (though not yet in oracle)
158
 
 
159
 
    .. change::
160
 
        :tags:
161
 
        :tickets:
162
 
 
163
 
      added "timezone=True" flag to DateTime and Time types.  postgres
164
 
      so far will convert this to "TIME[STAMP] (WITH|WITHOUT) TIME ZONE",
165
 
      so that control over timezone presence is more controllable (psycopg2
166
 
      returns datetimes with tzinfo's if available, which can create confusion
167
 
      against datetimes that dont).
168
 
 
169
 
    .. change::
170
 
        :tags:
171
 
        :tickets: 287
172
 
 
173
 
      fix to using query.count() with distinct, \**kwargs with SelectResults
174
 
      count()
175
 
 
176
 
    .. change::
177
 
        :tags:
178
 
        :tickets: 289
179
 
 
180
 
      deregister Table from MetaData when autoload fails;
181
 
 
182
 
    .. change::
183
 
        :tags:
184
 
        :tickets: 293
185
 
 
186
 
      import of py2.5s sqlite3
187
 
 
188
 
    .. change::
189
 
        :tags:
190
 
        :tickets: 296
191
 
 
192
 
      unicode fix for startswith()/endswith()
193
 
 
194
 
.. changelog::
195
 
    :version: 0.2.7
196
 
    :released: Sat Aug 12 2006
197
 
 
198
 
    .. change::
199
 
        :tags:
200
 
        :tickets:
201
 
 
202
 
      quoting facilities set up so that database-specific quoting can be
203
 
      turned on for individual table, schema, and column identifiers when
204
 
      used in all queries/creates/drops.  Enabled via "quote=True" in
205
 
      Table or Column, as well as "quote_schema=True" in Table.  Thanks to
206
 
      Aaron Spike for the excellent efforts.
207
 
 
208
 
    .. change::
209
 
        :tags:
210
 
        :tickets:
211
 
 
212
 
      assignmapper was setting is_primary=True, causing all sorts of mayhem
213
 
      by not raising an error when redundant mappers were set up, fixed
214
 
 
215
 
    .. change::
216
 
        :tags:
217
 
        :tickets:
218
 
 
219
 
      added allow_null_pks option to Mapper, allows rows where some
220
 
      primary key columns are null (i.e. when mapping to outer joins etc)
221
 
 
222
 
    .. change::
223
 
        :tags:
224
 
        :tickets:
225
 
 
226
 
      modifcation to unitofwork to not maintain ordering within the
227
 
      "new" list or within the UOWTask "objects" list; instead, new objects
228
 
      are tagged with an ordering identifier as they are registered as new
229
 
      with the session, and the INSERT statements are then sorted within the
230
 
      mapper save_obj.  the INSERT ordering has basically been pushed all
231
 
      the way to the end of the flush cycle. that way the various sorts and
232
 
      organizations occuring within UOWTask (particularly the circular task
233
 
      sort) dont have to worry about maintaining order (which they werent anyway)
234
 
 
235
 
    .. change::
236
 
        :tags:
237
 
        :tickets:
238
 
 
239
 
      fixed reflection of foreign keys to autoload the referenced table
240
 
      if it was not loaded already
241
 
 
242
 
    .. change::
243
 
        :tags:
244
 
        :tickets: 256
245
 
 
246
 
      - pass URL query string arguments to connect() function
247
 
 
248
 
    .. change::
249
 
        :tags:
250
 
        :tickets: 257
251
 
 
252
 
      - oracle boolean type
253
 
 
254
 
    .. change::
255
 
        :tags:
256
 
        :tickets:
257
 
 
258
 
      custom primary/secondary join conditions in a relation *will* be propagated
259
 
      to backrefs by default.  specifying a backref() will override this behavior.
260
 
 
261
 
    .. change::
262
 
        :tags:
263
 
        :tickets:
264
 
 
265
 
      better check for ambiguous join conditions in sql.Join; propagates to a
266
 
      better error message in PropertyLoader (i.e. relation()/backref()) for when
267
 
      the join condition can't be reasonably determined.
268
 
 
269
 
    .. change::
270
 
        :tags:
271
 
        :tickets:
272
 
 
273
 
      sqlite creates ForeignKeyConstraint objects properly upon table
274
 
      reflection.
275
 
 
276
 
    .. change::
277
 
        :tags:
278
 
        :tickets: 224
279
 
 
280
 
      adjustments to pool stemming from changes made for.
281
 
      overflow counter should only be decremented if the connection actually
282
 
      succeeded.  added a test script to attempt testing this.
283
 
 
284
 
    .. change::
285
 
        :tags:
286
 
        :tickets:
287
 
 
288
 
      fixed mysql reflection of default values to be PassiveDefault
289
 
 
290
 
    .. change::
291
 
        :tags:
292
 
        :tickets: 263, 264
293
 
 
294
 
      added reflected 'tinyint', 'mediumint' type to MS-SQL.
295
 
 
296
 
    .. change::
297
 
        :tags:
298
 
        :tickets:
299
 
 
300
 
      SingletonThreadPool has a size and does a cleanup pass, so that
301
 
      only a given number of thread-local connections stay around (needed
302
 
      for sqlite applications that dispose of threads en masse)
303
 
 
304
 
    .. change::
305
 
        :tags:
306
 
        :tickets: 267, 265
307
 
 
308
 
      fixed small pickle bug(s) with lazy loaders
309
 
 
310
 
    .. change::
311
 
        :tags:
312
 
        :tickets:
313
 
 
314
 
      fixed possible error in mysql reflection where certain versions
315
 
      return an array instead of string for SHOW CREATE TABLE call
316
 
 
317
 
    .. change::
318
 
        :tags:
319
 
        :tickets: 1770
320
 
 
321
 
      fix to lazy loads when mapping to joins
322
 
 
323
 
    .. change::
324
 
        :tags:
325
 
        :tickets:
326
 
 
327
 
      all create()/drop() calls have a keyword argument of "connectable".
328
 
      "engine" is deprecated.
329
 
 
330
 
    .. change::
331
 
        :tags:
332
 
        :tickets:
333
 
 
334
 
      fixed ms-sql connect() to work with adodbapi
335
 
 
336
 
    .. change::
337
 
        :tags:
338
 
        :tickets:
339
 
 
340
 
      added "nowait" flag to Select()
341
 
 
342
 
    .. change::
343
 
        :tags:
344
 
        :tickets: 271
345
 
 
346
 
      inheritance check uses issubclass() instead of direct __mro__ check
347
 
      to make sure class A inherits from B, allowing mapper inheritance to more
348
 
      flexibly correspond to class inheritance
349
 
 
350
 
    .. change::
351
 
        :tags:
352
 
        :tickets: 252
353
 
 
354
 
      SelectResults will use a subselect, when calling an aggregate (i.e.
355
 
      max, min, etc.) on a SelectResults that has an ORDER BY clause
356
 
 
357
 
    .. change::
358
 
        :tags:
359
 
        :tickets: 269
360
 
 
361
 
      fixes to types so that database-specific types more easily used;
362
 
      fixes to mysql text types to work with this methodology
363
 
 
364
 
    .. change::
365
 
        :tags:
366
 
        :tickets:
367
 
 
368
 
      some fixes to sqlite date type organization
369
 
 
370
 
    .. change::
371
 
        :tags:
372
 
        :tickets: 263
373
 
 
374
 
      added MSTinyInteger to MS-SQL
375
 
 
376
 
.. changelog::
377
 
    :version: 0.2.6
378
 
    :released: Thu Jul 20 2006
379
 
 
380
 
    .. change::
381
 
        :tags:
382
 
        :tickets: 76
383
 
 
384
 
      big overhaul to schema to allow truly composite primary and foreign
385
 
      key constraints, via new ForeignKeyConstraint and PrimaryKeyConstraint
386
 
      objects.
387
 
      Existing methods of primary/foreign key creation have not been changed
388
 
      but use these new objects behind the scenes.  table creation
389
 
      and reflection is now more table oriented rather than column oriented.
390
 
 
391
 
    .. change::
392
 
        :tags:
393
 
        :tickets:
394
 
 
395
 
      overhaul to MapperExtension calling scheme, wasnt working very well
396
 
      previously
397
 
 
398
 
    .. change::
399
 
        :tags:
400
 
        :tickets:
401
 
 
402
 
      tweaks to ActiveMapper, supports self-referential relationships
403
 
 
404
 
    .. change::
405
 
        :tags:
406
 
        :tickets:
407
 
 
408
 
      slight rearrangement to objectstore (in activemapper/threadlocal)
409
 
      so that the SessionContext is referenced by '.context' instead
410
 
      of subclassed directly.
411
 
 
412
 
    .. change::
413
 
        :tags:
414
 
        :tickets:
415
 
 
416
 
      activemapper will use threadlocal's objectstore if the mod is
417
 
      activated when activemapper is imported
418
 
 
419
 
    .. change::
420
 
        :tags:
421
 
        :tickets:
422
 
 
423
 
      small fix to URL regexp to allow filenames with '@' in them
424
 
 
425
 
    .. change::
426
 
        :tags:
427
 
        :tickets:
428
 
 
429
 
      fixes to Session expunge/update/etc...needs more cleanup.
430
 
 
431
 
    .. change::
432
 
        :tags:
433
 
        :tickets:
434
 
 
435
 
      select_table mappers *still* werent always compiling
436
 
 
437
 
    .. change::
438
 
        :tags:
439
 
        :tickets:
440
 
 
441
 
      fixed up Boolean datatype
442
 
 
443
 
    .. change::
444
 
        :tags:
445
 
        :tickets:
446
 
 
447
 
      added count()/count_by() to list of methods proxied by assignmapper;
448
 
      this also adds them to activemapper
449
 
 
450
 
    .. change::
451
 
        :tags:
452
 
        :tickets:
453
 
 
454
 
      connection exceptions wrapped in DBAPIError
455
 
 
456
 
    .. change::
457
 
        :tags:
458
 
        :tickets:
459
 
 
460
 
      ActiveMapper now supports autoloading column definitions from the
461
 
      database if you supply a __autoload__ = True attribute in your
462
 
      mapping inner-class.  Currently this does not support reflecting
463
 
      any relationships.
464
 
 
465
 
    .. change::
466
 
        :tags:
467
 
        :tickets:
468
 
 
469
 
      deferred column load could screw up the connection status in
470
 
      a flush() under some circumstances, this was fixed
471
 
 
472
 
    .. change::
473
 
        :tags:
474
 
        :tickets:
475
 
 
476
 
      expunge() was not working with cascade, fixed.
477
 
 
478
 
    .. change::
479
 
        :tags:
480
 
        :tickets:
481
 
 
482
 
      potential endless loop in cascading operations fixed.
483
 
 
484
 
    .. change::
485
 
        :tags:
486
 
        :tickets:
487
 
 
488
 
      added "synonym()" function, applied to properties to have a
489
 
      propname the same as another, for the purposes of overriding props
490
 
      and allowing the original propname to be accessible in select_by().
491
 
 
492
 
    .. change::
493
 
        :tags:
494
 
        :tickets:
495
 
 
496
 
      fix to typing in clause construction which specifically helps
497
 
      type issues with polymorphic_union (CAST/ColumnClause propagates
498
 
      its type to proxy columns)
499
 
 
500
 
    .. change::
501
 
        :tags:
502
 
        :tickets:
503
 
 
504
 
      mapper compilation work ongoing, someday it'll work....moved
505
 
      around the initialization of MapperProperty objects to be after
506
 
      all mappers are created to better handle circular compilations.
507
 
      do_init() method is called on all properties now which are more
508
 
      aware of their "inherited" status if so.
509
 
 
510
 
    .. change::
511
 
        :tags:
512
 
        :tickets:
513
 
 
514
 
      eager loads explicitly disallowed on self-referential relationships, or
515
 
      relationships to an inheriting mapper (which is also self-referential)
516
 
 
517
 
    .. change::
518
 
        :tags:
519
 
        :tickets: 244
520
 
 
521
 
      reduced bind param size in query._get to appease the picky oracle
522
 
 
523
 
    .. change::
524
 
        :tags:
525
 
        :tickets: 234
526
 
 
527
 
      added 'checkfirst' argument to table.create()/table.drop(), as
528
 
      well as table.exists()
529
 
 
530
 
    .. change::
531
 
        :tags:
532
 
        :tickets: 245
533
 
 
534
 
      some other ongoing fixes to inheritance
535
 
 
536
 
    .. change::
537
 
        :tags:
538
 
        :tickets:
539
 
 
540
 
      attribute/backref/orphan/history-tracking tweaks as usual...
541
 
 
542
 
.. changelog::
543
 
    :version: 0.2.5
544
 
    :released: Sat Jul 08 2006
545
 
 
546
 
    .. change::
547
 
        :tags:
548
 
        :tickets:
549
 
 
550
 
      fixed endless loop bug in select_by(), if the traversal hit
551
 
      two mappers that referenced each other
552
 
 
553
 
    .. change::
554
 
        :tags:
555
 
        :tickets:
556
 
 
557
 
      upgraded all unittests to insert './lib/' into sys.path,
558
 
      working around new setuptools PYTHONPATH-killing behavior
559
 
 
560
 
    .. change::
561
 
        :tags:
562
 
        :tickets:
563
 
 
564
 
      further fixes with attributes/dependencies/etc....
565
 
 
566
 
    .. change::
567
 
        :tags:
568
 
        :tickets:
569
 
 
570
 
      improved error handling for when DynamicMetaData is not connected
571
 
 
572
 
    .. change::
573
 
        :tags:
574
 
        :tickets:
575
 
 
576
 
      MS-SQL support largely working (tested with pymssql)
577
 
 
578
 
    .. change::
579
 
        :tags:
580
 
        :tickets:
581
 
 
582
 
      ordering of UPDATE and DELETE statements within groups is now
583
 
      in order of primary key values, for more deterministic ordering
584
 
 
585
 
    .. change::
586
 
        :tags:
587
 
        :tickets:
588
 
 
589
 
      after_insert/delete/update mapper extensions now called per object,
590
 
      not per-object-per-table
591
 
 
592
 
    .. change::
593
 
        :tags:
594
 
        :tickets:
595
 
 
596
 
      further fixes/refactorings to mapper compilation
597
 
 
598
 
.. changelog::
599
 
    :version: 0.2.4
600
 
    :released: Tue Jun 27 2006
601
 
 
602
 
    .. change::
603
 
        :tags:
604
 
        :tickets:
605
 
 
606
 
      try/except when the mapper sets init.__name__ on a mapped class,
607
 
      supports python 2.3
608
 
 
609
 
    .. change::
610
 
        :tags:
611
 
        :tickets:
612
 
 
613
 
      fixed bug where threadlocal engine would still autocommit
614
 
      despite a transaction in progress
615
 
 
616
 
    .. change::
617
 
        :tags:
618
 
        :tickets:
619
 
 
620
 
      lazy load and deferred load operations require the parent object
621
 
      to be in a Session to do the operation; whereas before the operation
622
 
      would just return a blank list or None, it now raises an exception.
623
 
 
624
 
    .. change::
625
 
        :tags:
626
 
        :tickets:
627
 
 
628
 
      Session.update() is slightly more lenient if the session to which
629
 
      the given object was formerly attached to was garbage collected;
630
 
      otherwise still requires you explicitly remove the instance from
631
 
      the previous Session.
632
 
 
633
 
    .. change::
634
 
        :tags:
635
 
        :tickets:
636
 
 
637
 
      fixes to mapper compilation, checking for more error conditions
638
 
 
639
 
    .. change::
640
 
        :tags:
641
 
        :tickets:
642
 
 
643
 
      small fix to eager loading combined with ordering/limit/offset
644
 
 
645
 
    .. change::
646
 
        :tags:
647
 
        :tickets: 206
648
 
 
649
 
      utterly remarkable:  added a single space between 'CREATE TABLE'
650
 
      and '(<the rest of it>' since *thats how MySQL indicates a non-
651
 
      reserved word tablename.....*
652
 
 
653
 
    .. change::
654
 
        :tags:
655
 
        :tickets:
656
 
 
657
 
      more fixes to inheritance, related to many-to-many relations
658
 
      properly saving
659
 
 
660
 
    .. change::
661
 
        :tags:
662
 
        :tickets:
663
 
 
664
 
      fixed bug when specifying explicit module to mysql dialect
665
 
 
666
 
    .. change::
667
 
        :tags:
668
 
        :tickets:
669
 
 
670
 
      when QueuePool times out it raises a TimeoutError instead of
671
 
      erroneously making another connection
672
 
 
673
 
    .. change::
674
 
        :tags:
675
 
        :tickets:
676
 
 
677
 
      Queue.Queue usage in pool has been replaced with a locally
678
 
      modified version (works in py2.3/2.4!) that uses a threading.RLock
679
 
      for a mutex.  this is to fix a reported case where a ConnectionFairy's
680
 
      __del__() method got called within the Queue's get() method, which
681
 
      then returns its connection to the Queue via the put() method,
682
 
      causing a reentrant hang unless threading.RLock is used.
683
 
 
684
 
    .. change::
685
 
        :tags:
686
 
        :tickets:
687
 
 
688
 
      postgres will not place SERIAL keyword on a primary key column
689
 
      if it has a foreign key constraint
690
 
 
691
 
    .. change::
692
 
        :tags:
693
 
        :tickets: 221
694
 
 
695
 
      cursor() method on ConnectionFairy allows db-specific extension
696
 
      arguments to be propagated
697
 
 
698
 
    .. change::
699
 
        :tags:
700
 
        :tickets: 225
701
 
 
702
 
      lazy load bind params properly propagate column type
703
 
 
704
 
    .. change::
705
 
        :tags:
706
 
        :tickets:
707
 
 
708
 
      new MySQL types: MSEnum, MSTinyText, MSMediumText, MSLongText, etc.
709
 
      more support for MS-specific length/precision params in numeric types
710
 
      patch courtesy Mike Bernson
711
 
 
712
 
    .. change::
713
 
        :tags:
714
 
        :tickets: 224
715
 
 
716
 
      some fixes to connection pool invalidate()
717
 
 
718
 
.. changelog::
719
 
    :version: 0.2.3
720
 
    :released: Sat Jun 17 2006
721
 
 
722
 
    .. change::
723
 
        :tags:
724
 
        :tickets:
725
 
 
726
 
      overhaul to mapper compilation to be deferred.  this allows mappers
727
 
      to be constructed in any order, and their relationships to each
728
 
      other are compiled when the mappers are first used.
729
 
 
730
 
    .. change::
731
 
        :tags:
732
 
        :tickets:
733
 
 
734
 
      fixed a pretty big speed bottleneck in cascading behavior particularly
735
 
      when backrefs were in use
736
 
 
737
 
    .. change::
738
 
        :tags:
739
 
        :tickets:
740
 
 
741
 
      the attribute instrumentation module has been completely rewritten; its
742
 
      now a large degree simpler and clearer, slightly faster.  the "history"
743
 
      of an attribute is no longer micromanaged with each change and is
744
 
      instead part of a "CommittedState" object created when the
745
 
      instance is first loaded.  HistoryArraySet is gone, the behavior of
746
 
      list attributes is now more open ended (i.e. theyre not sets anymore).
747
 
 
748
 
    .. change::
749
 
        :tags:
750
 
        :tickets:
751
 
 
752
 
      py2.4 "set" construct used internally, falls back to sets.Set when
753
 
      "set" not available/ordering is needed.
754
 
 
755
 
    .. change::
756
 
        :tags:
757
 
        :tickets:
758
 
 
759
 
      fix to transaction control, so that repeated rollback() calls
760
 
      dont fail (was failing pretty badly when flush() would raise
761
 
      an exception in a larger try/except transaction block)
762
 
 
763
 
    .. change::
764
 
        :tags:
765
 
        :tickets: 151
766
 
 
767
 
      "foreignkey" argument to relation() can also be a list.  fixed
768
 
      auto-foreignkey detection
769
 
 
770
 
    .. change::
771
 
        :tags:
772
 
        :tickets:
773
 
 
774
 
      fixed bug where tables with schema names werent getting indexed in
775
 
      the MetaData object properly
776
 
 
777
 
    .. change::
778
 
        :tags:
779
 
        :tickets: 207
780
 
 
781
 
      fixed bug where Column with redefined "key" property wasnt getting
782
 
      type conversion happening in the ResultProxy
783
 
 
784
 
    .. change::
785
 
        :tags:
786
 
        :tickets:
787
 
 
788
 
      fixed 'port' attribute of URL to be an integer if present
789
 
 
790
 
    .. change::
791
 
        :tags:
792
 
        :tickets:
793
 
 
794
 
      fixed old bug where if a many-to-many table mapped as "secondary"
795
 
      had extra columns, delete operations didnt work
796
 
 
797
 
    .. change::
798
 
        :tags:
799
 
        :tickets:
800
 
 
801
 
      bugfixes for mapping against UNION queries
802
 
 
803
 
    .. change::
804
 
        :tags:
805
 
        :tickets:
806
 
 
807
 
      fixed incorrect exception class thrown when no DB driver present
808
 
 
809
 
    .. change::
810
 
        :tags:
811
 
        :tickets: 138
812
 
 
813
 
      added NonExistentTable exception thrown when reflecting a table
814
 
      that doesnt exist
815
 
 
816
 
    .. change::
817
 
        :tags:
818
 
        :tickets:
819
 
 
820
 
      small fix to ActiveMapper regarding one-to-one backrefs, other
821
 
      refactorings
822
 
 
823
 
    .. change::
824
 
        :tags:
825
 
        :tickets:
826
 
 
827
 
      overridden constructor in mapped classes gets __name__ and
828
 
      __doc__ from the original class
829
 
 
830
 
    .. change::
831
 
        :tags:
832
 
        :tickets: 200
833
 
 
834
 
      fixed small bug in selectresult.py regarding mapper extension
835
 
 
836
 
    .. change::
837
 
        :tags:
838
 
        :tickets:
839
 
 
840
 
      small tweak to cascade_mappers, not very strongly supported
841
 
      function at the moment
842
 
 
843
 
    .. change::
844
 
        :tags:
845
 
        :tickets: 202
846
 
 
847
 
      some fixes to between(), column.between() to propagate typing
848
 
      information better
849
 
 
850
 
    .. change::
851
 
        :tags:
852
 
        :tickets: 203
853
 
 
854
 
      if an object fails to be constructed, is not added to the
855
 
      session
856
 
 
857
 
    .. change::
858
 
        :tags:
859
 
        :tickets:
860
 
 
861
 
      CAST function has been made into its own clause object with
862
 
      its own compilation function in ansicompiler; allows MySQL
863
 
      to silently ignore most CAST calls since MySQL
864
 
      seems to only support the standard CAST syntax with Date types.
865
 
      MySQL-compatible CAST support for strings, ints, etc. a TODO
866
 
 
867
 
.. changelog::
868
 
    :version: 0.2.2
869
 
    :released: Mon Jun 05 2006
870
 
 
871
 
    .. change::
872
 
        :tags:
873
 
        :tickets: 190
874
 
 
875
 
      big improvements to polymorphic inheritance behavior, enabling it
876
 
      to work with adjacency list table structures
877
 
 
878
 
    .. change::
879
 
        :tags:
880
 
        :tickets:
881
 
 
882
 
      major fixes and refactorings to inheritance relationships overall,
883
 
      more unit tests
884
 
 
885
 
    .. change::
886
 
        :tags:
887
 
        :tickets:
888
 
 
889
 
      fixed "echo_pool" flag on create_engine()
890
 
 
891
 
    .. change::
892
 
        :tags:
893
 
        :tickets:
894
 
 
895
 
      fix to docs, removed incorrect info that close() is unsafe to use
896
 
      with threadlocal strategy (its totally safe !)
897
 
 
898
 
    .. change::
899
 
        :tags:
900
 
        :tickets: 188
901
 
 
902
 
      create_engine() can take URLs as string or unicode
903
 
 
904
 
    .. change::
905
 
        :tags:
906
 
        :tickets:
907
 
 
908
 
      firebird support partially completed;
909
 
      thanks to James Ralston and Brad Clements for their efforts.
910
 
 
911
 
    .. change::
912
 
        :tags:
913
 
        :tickets:
914
 
 
915
 
      Oracle url translation was broken, fixed, will feed host/port/sid
916
 
      into cx_oracle makedsn() if 'database' field is present, else uses
917
 
      straight TNS name from the 'host' field
918
 
 
919
 
    .. change::
920
 
        :tags:
921
 
        :tickets:
922
 
 
923
 
      fix to using unicode criterion for query.get()/query.load()
924
 
 
925
 
    .. change::
926
 
        :tags:
927
 
        :tickets:
928
 
 
929
 
      count() function on selectables now uses table primary key or
930
 
      first column instead of "1" for criterion, also uses label "rowcount"
931
 
      instead of "count".
932
 
 
933
 
    .. change::
934
 
        :tags:
935
 
        :tickets:
936
 
 
937
 
      got rudimental "mapping to multiple tables" functionality cleaned up,
938
 
      more correctly documented
939
 
 
940
 
    .. change::
941
 
        :tags:
942
 
        :tickets:
943
 
 
944
 
      restored global_connect() function, attaches to a DynamicMetaData
945
 
      instance called "default_metadata".  leaving MetaData arg to Table
946
 
      out will use the default metadata.
947
 
 
948
 
    .. change::
949
 
        :tags:
950
 
        :tickets:
951
 
 
952
 
      fixes to session cascade behavior, entity_name propigation
953
 
 
954
 
    .. change::
955
 
        :tags:
956
 
        :tickets:
957
 
 
958
 
      reorganized unittests into subdirectories
959
 
 
960
 
    .. change::
961
 
        :tags:
962
 
        :tickets:
963
 
 
964
 
      more fixes to threadlocal connection nesting patterns
965
 
 
966
 
.. changelog::
967
 
    :version: 0.2.1
968
 
    :released: Mon May 29 2006
969
 
 
970
 
    .. change::
971
 
        :tags:
972
 
        :tickets:
973
 
 
974
 
      "pool" argument to create_engine() properly propagates
975
 
 
976
 
    .. change::
977
 
        :tags:
978
 
        :tickets:
979
 
 
980
 
      fixes to URL, raises exception if not parsed, does not pass blank
981
 
      fields along to the DB connect string (a string such as
982
 
      user:host@/db was breaking on postgres)
983
 
 
984
 
    .. change::
985
 
        :tags:
986
 
        :tickets:
987
 
 
988
 
      small fixes to Mapper when it inserts and tries to get
989
 
      new primary key values back
990
 
 
991
 
    .. change::
992
 
        :tags:
993
 
        :tickets:
994
 
 
995
 
      rewrote half of TLEngine, the ComposedSQLEngine used with
996
 
      'strategy="threadlocal"'.  it now properly implements engine.begin()/
997
 
      engine.commit(), which nest fully with connection.begin()/trans.commit().
998
 
      added about six unittests.
999
 
 
1000
 
    .. change::
1001
 
        :tags:
1002
 
        :tickets:
1003
 
 
1004
 
      major "duh" in pool.Pool, forgot to put back the WeakValueDictionary.
1005
 
      unittest which was supposed to check for this was also silently missing
1006
 
      it.  fixed unittest to ensure that ConnectionFairy properly falls out
1007
 
      of scope.
1008
 
 
1009
 
    .. change::
1010
 
        :tags:
1011
 
        :tickets:
1012
 
 
1013
 
      placeholder dispose() method added to SingletonThreadPool, doesnt
1014
 
      do anything yet
1015
 
 
1016
 
    .. change::
1017
 
        :tags:
1018
 
        :tickets:
1019
 
 
1020
 
      rollback() is automatically called when an exception is raised,
1021
 
      but only if theres no transaction in process (i.e. works more like
1022
 
      autocommit).
1023
 
 
1024
 
    .. change::
1025
 
        :tags:
1026
 
        :tickets:
1027
 
 
1028
 
      fixed exception raise in sqlite if no sqlite module present
1029
 
 
1030
 
    .. change::
1031
 
        :tags:
1032
 
        :tickets:
1033
 
 
1034
 
      added extra example detail for association object doc
1035
 
 
1036
 
    .. change::
1037
 
        :tags:
1038
 
        :tickets:
1039
 
 
1040
 
      Connection adds checks for already being closed
1041
 
 
1042
 
.. changelog::
1043
 
    :version: 0.2.0
1044
 
    :released: Sat May 27 2006
1045
 
 
1046
 
    .. change::
1047
 
        :tags:
1048
 
        :tickets:
1049
 
 
1050
 
      overhaul to Engine system so that what was formerly the SQLEngine
1051
 
      is now a ComposedSQLEngine which consists of a variety of components,
1052
 
      including a Dialect, ConnectionProvider, etc. This impacted all the
1053
 
      db modules as well as Session and Mapper.
1054
 
 
1055
 
    .. change::
1056
 
        :tags:
1057
 
        :tickets:
1058
 
 
1059
 
      create_engine now takes only RFC-1738-style strings:
1060
 
      driver://user:password@host:port/database
1061
 
 
1062
 
    .. change::
1063
 
        :tags:
1064
 
        :tickets: 152
1065
 
 
1066
 
      total rewrite of connection-scoping methodology, Connection objects
1067
 
      can now execute clause elements directly, added explicit "close" as
1068
 
      well as support throughout Engine/ORM to handle closing properly,
1069
 
      no longer relying upon __del__ internally to return connections
1070
 
      to the pool.
1071
 
 
1072
 
    .. change::
1073
 
        :tags:
1074
 
        :tickets:
1075
 
 
1076
 
      overhaul to Session interface and scoping.  uses hibernate-style
1077
 
      methods, including query(class), save(), save_or_update(), etc.
1078
 
      no threadlocal scope is installed by default.  Provides a binding
1079
 
      interface to specific Engines and/or Connections so that underlying
1080
 
      Schema objects do not need to be bound to an Engine.  Added a basic
1081
 
      SessionTransaction object that can simplistically aggregate transactions
1082
 
      across multiple engines.
1083
 
 
1084
 
    .. change::
1085
 
        :tags:
1086
 
        :tickets:
1087
 
 
1088
 
      overhaul to mapper's dependency and "cascade" behavior; dependency logic
1089
 
      factored out of properties.py into a separate module "dependency.py".
1090
 
      "cascade" behavior is now explicitly controllable, proper implementation
1091
 
      of "delete", "delete-orphan", etc.  dependency system can now determine at
1092
 
      flush time if a child object has a parent or not so that it makes better
1093
 
      decisions on how that child should be updated in the DB with regards to deletes.
1094
 
 
1095
 
    .. change::
1096
 
        :tags:
1097
 
        :tickets:
1098
 
 
1099
 
      overhaul to Schema to build upon MetaData object instead of an Engine.
1100
 
      Entire SQL/Schema system can be used with no Engines whatsoever, executed
1101
 
      solely by an explicit Connection object.  the "bound" methodlogy exists via the
1102
 
      BoundMetaData for schema objects.  ProxyEngine is generally not needed
1103
 
      anymore and is replaced by DynamicMetaData.
1104
 
 
1105
 
    .. change::
1106
 
        :tags:
1107
 
        :tickets: 167
1108
 
 
1109
 
      true polymorphic behavior implemented, fixes
1110
 
 
1111
 
    .. change::
1112
 
        :tags:
1113
 
        :tickets: 147
1114
 
 
1115
 
      "oid" system has been totally moved into compile-time behavior;
1116
 
      if they are used in an order_by where they are not available, the order_by
1117
 
      doesnt get compiled, fixes
1118
 
 
1119
 
    .. change::
1120
 
        :tags:
1121
 
        :tickets:
1122
 
 
1123
 
      overhaul to packaging; "mapping" is now "orm", "objectstore" is now
1124
 
      "session", the old "objectstore" namespace gets loaded in via the
1125
 
      "threadlocal" mod if used
1126
 
 
1127
 
    .. change::
1128
 
        :tags:
1129
 
        :tickets:
1130
 
 
1131
 
      mods now called in via "import <modname>".  extensions favored over
1132
 
      mods as mods are globally-monkeypatching
1133
 
 
1134
 
    .. change::
1135
 
        :tags:
1136
 
        :tickets: 154
1137
 
 
1138
 
      fix to add_property so that it propagates properties to inheriting
1139
 
      mappers
1140
 
 
1141
 
    .. change::
1142
 
        :tags:
1143
 
        :tickets:
1144
 
 
1145
 
      backrefs create themselves against primary mapper of its originating
1146
 
      property, priamry/secondary join arguments can be specified to override.
1147
 
      helps their usage with polymorphic mappers
1148
 
 
1149
 
    .. change::
1150
 
        :tags:
1151
 
        :tickets: 31
1152
 
 
1153
 
      "table exists" function has been implemented
1154
 
 
1155
 
    .. change::
1156
 
        :tags:
1157
 
        :tickets: 98
1158
 
 
1159
 
      "create_all/drop_all" added to MetaData object
1160
 
 
1161
 
    .. change::
1162
 
        :tags:
1163
 
        :tickets:
1164
 
 
1165
 
      improvements and fixes to topological sort algorithm, as well as more
1166
 
      unit tests
1167
 
 
1168
 
    .. change::
1169
 
        :tags:
1170
 
        :tickets:
1171
 
 
1172
 
      tutorial page added to docs which also can be run with a custom doctest
1173
 
      runner to ensure its properly working.  docs generally overhauled to
1174
 
      deal with new code patterns
1175
 
 
1176
 
    .. change::
1177
 
        :tags:
1178
 
        :tickets:
1179
 
 
1180
 
      many more fixes, refactorings.
1181
 
 
1182
 
    .. change::
1183
 
        :tags:
1184
 
        :tickets:
1185
 
 
1186
 
      migration guide is available on the Wiki at
1187
 
      http://www.sqlalchemy.org/trac/wiki/02Migration