0.1 Changelog

0.1.7

Released: Fri May 05 2006
  • [no_tags]

    некоторые исправления в алгоритме топологической сортировки

  • [no_tags]

    В Postgres добавлена поддержка DISTINCT ON (достаточно указать distinct=[col1,col2…])

  • [no_tags]

    добавлено __mod__ (оператор %) в sql-выражения

  • [no_tags]

    Свойство mapper «order_by», унаследованное от наследующего mapper

  • [no_tags]

    Исправление типа столбца, используемого при обновлении/удалении в mapper

  • [no_tags]

    с convert_unicode=True, отражение происходило с ошибкой, исправлено

  • [no_tags]

    types types types! все равно не работает…. приходится снова использовать TypeDecorator :(

  • [no_tags]

    Двоичный тип mysql преобразует вывод массива в буфер, исправление PickleType

  • [no_tags]

    Раз и навсегда исправлена утечка памяти в attributes.py

  • [no_tags]

    Унитесты квалифицируются на основе баз данных, которые поддерживают каждый из них

  • [no_tags]

    Исправлена ошибка, при которой значения столбцов по умолчанию приводили к потере предложения VALUES в объектах вставки

  • [no_tags]

    Исправлена ошибка, при которой определение таблицы с именем схемы приводило к принудительному подключению к движку

  • [no_tags]

    исправление корректной работы круглых скобок с подзапросами в INSERT/UPDATE

  • [no_tags]

    HistoryArraySet получает метод extend()

  • [no_tags]

    Исправлена поддержка lazyload для других операторов сравнения, кроме =

  • [no_tags]

    Исправление ленивой загрузки, когда два сравнения в условии объединения указывали на один и тот же столбец

  • [no_tags]

    добавлен флаг «construct_new» в маппер, который будет использовать __new__ для создания экземпляров вместо __init__ (стандарт в 0.2)

  • [no_tags]

    Добавил selectresults.py в SVN, пропустив его в прошлый раз

  • [no_tags]

    настройка, позволяющая создавать отношения «многие-ко-многим» от таблицы к самой себе через ассоциативную таблицу

  • [no_tags]

    Небольшое исправление функции «translate_row», используемой в полиморфном примере

  • [no_tags]

    create_engine использует cgi.parse_qsl для чтения строки запроса (в 0.2 это уже не работает)

  • [no_tags]

    изменения в операторе CAST

  • [no_tags]

    исправлены имена функций LOCAL_TIME/LOCAL_TIMESTAMP -> LOCALTIME/LOCALTIMESTAMP

  • [no_tags]

    исправлен порядок ORDER BY/HAVING при компиляции

0.1.6

Released: Wed Apr 12 2006
  • [no_tags]

    добавлена поддержка MS-SQL, любезно предоставленная Риком Моррисоном, Рунаром Петурссоном

  • [no_tags]

    последний SQLSoup от Дж. Эллиса

  • [no_tags]

    В ActiveMapper появилась предварительная поддержка наследования (Джефф Уоткинс)

  • [no_tags]

    добавлена система «модов», позволяющая подключать модули, изменяющие/дополняющие основную функциональность, с помощью функции «install_mods(*modnames)».

  • [no_tags]

    добавлен первый «мод», SelectResults, который модифицирует селекты маппера для возврата генераторов, превращающих диапазоны в запросы LIMIT/OFFSET (Jonas Borgstr?

  • [no_tags]

    Вынесены возможности запросов к Mapper в отдельный объект Query, ориентированный на сессию. Это повышает производительность mapper.using(session) и делает возможным другие действия.

  • [no_tags]

    рефакторинг objectstore/Session, официальным способом сохранения объектов теперь является метод flush(). Функциональность begin/commit из Session перенесена в LegacySession, которая до выхода версии 0.2 остается поведением по умолчанию.

  • [no_tags]

    Система типов привязывается к движку во время компиляции запроса, а не во время построения схемы. Это упрощает как систему типов, так и ProxyEngine.

  • [no_tags]

    В mapper добавлен ключевой аргумент „version_id“. Этот ключевой аргумент должен ссылаться на объект Column с типом Integer, желательно non-nullable, который будет использоваться в сопоставленной таблице для отслеживания номеров версий. Этот номер увеличивается при каждой операции сохранения и указывается в условиях UPDATE/DELETE, чтобы он учитывался в возвращаемом количестве строк, что приводит к ошибке ConcurrencyError, если полученное значение не соответствует ожидаемому количеству.

  • [no_tags]

    Теперь mapper ассоциируется с классом через объект class, а также необязательный параметр entity_name, который представляет собой строку, по умолчанию равную None. Для класса может быть создано любое количество первичных mappers, квалифицированных по имени сущности. Экземпляры этих классов будут выполнять все свои операции загрузки и сохранения через mapper, квалифицированный по имени сущности, и поддерживать отдельную идентификацию в identity map для эквивалентного объекта.

  • [no_tags]

    Пересмотрена система атрибутов. Уточнен код, а также исправлена поддержка корректного полиморфного поведения атрибутов объектов.

  • [no_tags]

    добавлен флаг «for_update» для объектов Select

  • [no_tags]

    некоторые исправления в обратных ссылках

  • [no_tags]

    исправление для типа DateTime в postgres1

  • [no_tags]

    страницы документации в основном перешли на синтаксис Markdown

0.1.5

Released: Mon Mar 27 2006
  • [no_tags]

    В SQLEngine добавлена концепция SQLSession. Этот объект отслеживает получение соединения из пула соединений, а также текущую транзакцию. В SQLEngine добавлены методы push_session() и pop_session(), которые проталкивают/запускают новую SQLSession на движок, позволяя работать со вторым соединением, «вложенным» в предыдущее, что позволяет выполнять вложенные транзакции. В дальнейшем будут добавлены и другие трюки, связанные с SQLSession.

  • [no_tags]

    добавлен аргумент nest_on в objectstore.Session. Это один SQLEngine или список движков, для которых push_session()/pop_session() будет вызываться каждый раз, когда эта сессия становится активной (через objectstore.push_session() или эквивалентно). Это позволяет использовать преимущества вложенных транзакций в сессиях без явного вызова push_session/pop_session на движке.

  • [no_tags]

    разделение objectstore/unitofwork на части, чтобы отделить «сортировку сессий» от «тяжелой работы по фиксации uow»

  • [no_tags]

    добавлен метод populate_instance() в MapperExtension. позволяет расширению изменять популяцию атрибутов объектов. этот метод может вызывать метод populate_instance() на другом маппере для передачи популяции атрибутов от одного маппера к другому; для этого также встроена логика перевода строк.

  • [no_tags]

    исправлен флаг Oracle8-совместимости «use_ansi», который преобразует JOINы в сравнения с операторами = и (+), проходит основные unittests

  • [no_tags]

    исправления в поддержке Oracle LIMIT/OFFSET

  • [no_tags]

    Oracle reflection использует представления ALL_** вместо USER_** для получения большего списка объектов для отражения

  • [no_tags]

    исправления в отражении внешних ключей Oracle

    References: #105

  • [no_tags]

    objectstore.commit(obj1, obj2,…) добавляет дополнительный шаг для поиска частных отношений в свойствах и удаления дочерних объектов, хотя это и не глобальная фиксация

  • [no_tags]

    Исправлены многие и многие ошибки в мапперах, использующих наследование, усилена концепция того, что отношения на маппере создаются к «локальной» таблице этого маппера, а не к таблицам, которые он наследует. позволяет более сложным композиционным паттернам работать с ленивой/медленной загрузкой.

  • [no_tags]

    добавлена поддержка наследования мапперов от других на основе одной и той же таблицы, достаточно указать ту же таблицу, что и у родительского/дочернего маппера.

  • [no_tags]

    незначительные улучшения скорости работы системы атрибутов при инстанцировании и заполнении новых объектов.

  • [no_tags]

    исправлен бинарный модульный тест MySQL

  • [no_tags]

    INSERT может принимать в качестве аргументов VALUES элементы клаузы, а не только литеральные значения

  • [no_tags]

    поддержка вызова многотоковых функций, т.е. schema.mypkg.func()

  • [no_tags]

    В пакет расширений добавлен модуль SQLSoup Дж. Эллиса

  • [no_tags]

    добавлены «полиморфные» примеры, иллюстрирующие методы загрузки нескольких типов объектов из одного маппера, во втором из которых используется новый метод populate_instance(). небольшие улучшения в маппере, конструкция UNION для облегчения работы с примерами

  • [no_tags]

    улучшения/исправления в работе session.refresh()/session.expire() (которая ранее могла называться «invalidate»…)

  • [no_tags]

    добавлена функция session.expunge(), которая полностью удаляет объект из текущей сессии

  • [no_tags]

    добавлена передача *args, **kwargs в engine.transaction(func), что позволяет проще создавать транзакционные функции-декораторы

  • [no_tags]

    добавлен интерфейс итератора для ResultProxy: «for row in result:…»

  • [no_tags]

    добавлено утверждение tx = session.begin(); tx.rollback(); tx.begin(), т.е. его нельзя использовать после rollback()

  • [no_tags]

    в SQLite добавлено преобразование даты в параметре bind, позволяющее работать с pysqlite1

  • [no_tags]

    усовершенствования в подзапросах для более интеллектуального построения предложений FROM

    References: #116

  • [no_tags]

    добавлена функция PickleType в типы.

  • [no_tags]

    Исправлены две ошибки с метками столбцов в отношении параметров привязки: ключевые имена параметров привязки теперь генерируются из столбца «label» во всех соответствующих случаях, чтобы воспользоваться правилами избыточной длины имен, и добавлена проверка на своеобразную коллизию со столбцом, названным так же, как «tablename_colname».

  • [no_tags]

    капитальный ремонт рабочей документации, других разделов документации.

  • [no_tags]

    Исправлена ошибка с атрибутами, когда при фиксации объекта его список ленивой загрузки сдувался, если он не был загружен

  • [no_tags]

    добавлен метод unique_connection() в движок, пул соединений для возврата соединения, которое не является частью потоково-локального контекста или какой-либо текущей транзакции

  • [no_tags]

    Добавлена функция invalidate() для пула соединений. Она удаляет соединение из пула. Однако все еще требуется доработка движков для автоматического переподключения к устаревшей БД.

  • [no_tags]

    Добавлена функция distinct() для элементов столбцов, чтобы можно было выполнять func.count(mycol.distinct())

  • [no_tags]

    добавлен флаг «always_refresh» для Mapper, создающий маппер, который будет всегда обновлять атрибуты объектов, получаемых/выбираемых из БД, перезаписывая все сделанные изменения.

0.1.4

Released: Mon Mar 13 2006
  • [no_tags]

    create_engine() теперь использует обобщенные параметры: host/hostname, db/dbname/database, password/passwd и т.д. для всех подключений к движку. это делает URI движка более «универсальными».

  • [no_tags]

    добавлена поддержка операторов SELECT, встроенных в предложение column, с использованием флага «scalar=True».

  • [no_tags]

    Очередная доработка EagerLoading при использовании в связке с наследованными мэпперами; улучшена корректная работа eager load с aliased-запросами, также отношения, установленные на мэппер с наследованными мэпперами, будут создавать соединения с таблицей, характерной для самого мэппера (т.е. не с таблицами, которые наследуются/находятся дальше по цепочке наследования), это можно отменить, используя пользовательские первичные/вторичные соединения.

  • [no_tags]

    В mapper.py добавлен патч J.Ellis, в соответствии с которым selectone() выбрасывает исключение, если запрос возвращает более одной строки объектов, selectfirst() не выбрасывает исключение. также добавлены selectfirst_by (синоним get_by) и selectone_by

  • [no_tags]

    Добавлен параметр onupdate для Column, который будет выполнять SQL/python при обновлении. Также добавлен параметр «for_update=True» во все подклассы DefaultGenerator

  • [no_tags]

    добавлена поддержка отражения таблиц Oracle, предоставленная Андреем Заричем; еще предстоит решить некоторые проблемы, связанные с составными первичными ключами/выбором словаря

  • [no_tags]

    проверен начальный модуль Firebird, ожидающий тестирования.

  • [no_tags]

    добавлен объект словаря sql.ClauseParameters в качестве результата для compiled.get_params(), выполняющий позднюю типовую обработку параметров связывания, чтобы исходные значения были более доступны

  • [no_tags]

    больше документации по индексам, значениям столбцов по умолчанию, объединению соединений, построению движков

  • [no_tags]

    Пересмотр построения системы типов. Используется более простая схема наследования, так что любой из общих типов может быть легко подклассифицирован, без использования TypeDecorator.

  • [no_tags]

    В SQLEngine добавлен параметр «convert_unicode=False», который заставляет все типы String выполнять кодирование/декодирование в Unicode (заставляет строки вести себя как Unicodes)

  • [no_tags]

    В движок добавлен параметр „encoding=»utf8»“. Указанная кодировка будет использоваться для всех вызовов кодирования/декодирования внутри типов Unicode, а также строк при convert_unicode=True.

  • [no_tags]

    Улучшена поддержка отображения на UNION, добавлен пример polymorph.py, иллюстрирующий отображение нескольких классов на UNION

  • [no_tags]

    исправление синтаксиса LIMIT/OFFSET в SQLite

  • [no_tags]

    исправление синтаксиса Oracle LIMIT

  • [no_tags]

    добавлена функция backref(), позволяющая обратным ссылкам иметь аргументы в виде ключевых слов, которые будут передаваться обратным ссылкам.

  • [no_tags]

    Последовательности и объекты ColumnDefault могут выполнять execute()/scalar() автономно

  • [no_tags]

    SQL-функции (например, func.foo()) могут выполнять execute()/scalar() автономно

  • [no_tags]

    исправление функций SQL таким образом, чтобы в стандартных функциях ANSI, т.е. current_timestamp и т.д., не указывались круглые скобки. во всех остальных функциях они указываются.

  • [no_tags]

    В SmartProperty добавлены settattr_clean и append_clean, которые устанавливают атрибуты, не вызывая события «dirty» или какой-либо истории. используется как: myclass.prop1.setattr_clean(myobject, „hi“)

  • [no_tags]

    Улучшена поддержка умолчаний столбцов при использовании мапперами; мапперы будут извлекать предварительно выполненные умолчания из выполненных параметров привязки оператора (до преобразования), чтобы заполнить ими атрибуты сохраненного объекта; если сработали какие-либо PassiveDefaults, то вместо этого будет выполняться пост-выборка строки из БД, чтобы заполнить объект.

  • [no_tags]

    в хранилище объектов добавлен метод „get_session().invalidate(*obj)“, экземпляры будут сами обновляться() при следующем обращении к атрибуту.

  • [no_tags]

    Улучшения в вызовах SQL func, включая ключевой аргумент «engine», чтобы они могли быть execute()d или scalar()ed автономно, также добавлен аксессор func для SQLEngine

  • [no_tags]

    исправление для пользовательских движков таблиц MySQL4, т.е. TYPE вместо ENGINE

  • [no_tags]

    Несколько расширенное протоколирование, включающее временные метки и несколько настраиваемую систему форматирования, вместо полноценной системы протоколирования

  • [no_tags]

    улучшения в классе ActiveMapper от группы TG, включая отношения «многие-ко-многим

  • [no_tags]

    В mysql добавлена поддержка Double и TinyInt

0.1.3

Released: Thu Mar 02 2006
  • [no_tags]

    Дополненная функция «post_update» добавляет второй оператор обновления перед вставками и после удалений для согласования отношений без создания зависимостей; используется при сохранении двух строк, зависящих друг от друга

  • [no_tags]

    Доработана функция mapper.using(session), локализована функциональность сессий для каждого объекта; объекты могут быть объявлены и управляться как локальные для любой пользовательской сессии

  • [no_tags]

    Исправление предложения Oracle «row_number over» при работе с несколькими таблицами

  • [no_tags]

    mapper.get() не выбирал объекты с несколькими ключами, если таблица маппера представляла собой объединение, например, в отношениях наследования; это исправлено.

  • [no_tags]

    Пересмотр пакетов sql/schema таким образом, чтобы пакет sql мог работать самостоятельно, производя селекты, вставки и т.д. без каких-либо зависимостей от движка. построен на новых лексических объектах TableClause/ColumnClause. Объекты Table/Column в Schema являются их «физическими» подклассами. упрощает отношения schema/sql, расширения (например, proxyengine) и значительно повышает общую производительность. удаляет все поведение getattr(), которое было характерно для 0.1.1.

  • [no_tags]

    Рефакторинг того, как маппер «синхронизирует» данные между двумя объектами в отдельный модуль, лучше работает со свойствами, прикрепленными к мапперу, который имеет дополнительные отношения наследования с одной из связанных таблиц, также та же методология, которая используется для синхронизации родительских/дочерних объектов, теперь используется маппером для синхронизации между наследуемыми и наследующими мапперами.

  • [no_tags]

    Сделана более агрессивной функция objectstore «check for out-of-identitymap», проверка будет выполняться при изменении атрибутов объекта или его удалении

  • [no_tags]

    Объект Index полностью реализован, может быть построен как самостоятельно, так и с помощью аргументов «index» и «unique» в Columns.

  • [no_tags]

    добавлен флаг «convert_unicode» в SQLEngine, который будет рассматривать все типы String/CHAR как типы Unicode, с трансляцией raw-byte/utf-8 на стороне параметра связывания и набора результатов.

  • [no_tags]

    postgres ведет список ANSI-функций, которые не должны содержать круглых скобок, поэтому вызовы функций без аргументов работают последовательно

  • [no_tags]

    Таблицы могут быть созданы без указания движка. В этом случае их движком по умолчанию будет скопированный в модуль «движок по умолчанию», который является ProxyEngine. Этот движок может быть подключен с помощью функции «global_connect».

  • [no_tags]

    добавлен метод «refresh(*obj)» в objectstore / Session для безусловной перезагрузки атрибутов любого набора объектов из базы данных

0.1.2

Released: Fri Feb 24 2006
  • [no_tags]

    Исправлен рекурсивный вызов в schema, который почему-то выполнялся 994 раза, а затем возвращался нормально. ничего не сломалось, все замедлилось. спасибо jpellerin за находку.

0.1.1

Released: Thu Feb 23 2006
  • [no_tags]

    небольшое исправление в классе Function, чтобы выражения с func.foo() использовали тип объекта Function (т.е. левую часть) в качестве типа булевого выражения, а не другую сторону, которая является более подвижной целью (changeset 1020).

  • [no_tags]

    создание самоссылающихся мапперов с обратными ссылками стало немного проще (но все еще не так просто - changeset 1019)

  • [no_tags]

    исправления в отображениях «один к одному» (changeset 1015)

  • [no_tags]

    psycopg1 исправлена проблема с датой/временем в None (changeset 1005)

  • [no_tags]

    две проблемы, связанные с postgres, который не хочет давать вам «lastrowid», поскольку oids устарели:

    • Умолчания со стороны базы данных postgres, относящиеся к столбцам первичного ключа, должны выполняться явно заранее, хотя это и не является идеей PassiveDefault. Это происходит потому, что последовательности на столбцах отражаются как PassiveDefault, но должны быть явно выполнены на столбце первичного ключа, чтобы мы знали, что мы только что вставили.

    • Если вы добавили строку с кучей умолчаний на стороне базы данных, а PassiveDefault работает по-старому, т.е. просто выполняется на стороне БД, то возникшее исключение «невозможно получить строку обратно без OID» также не произойдет, пока кто-то (обычно ORM) явно не попросит об этом.

  • [no_tags]

    исправлена ошибка в engine.execute_compiled, когда он создавал второй ResultProxy, который просто выбрасывался.

  • [no_tags]

    Теперь можно сказать myclass.attr.property, что даст вам PropertyLoader, соответствующий этому атрибуту, т.е. myclass.mapper.props[„attr“].

  • [no_tags]

    Теперь можно создавать более сложные цепочки ускоренных загрузок, не прибегая к явным инструкциям типа «use aliases». Код EagerLoader также стал намного проще.

  • [no_tags]

    Новый, несколько экспериментальный флаг «use_update», добавленный к отношениям, указывает, что данное отношение должно обрабатываться вторым оператором UPDATE, либо после первичного INSERT, либо перед первичным DELETE. Работает с круговыми зависимостями строк.

  • [no_tags]

    добавлен модуль exceptions, все поднимаемые исключения (за исключением некоторых исключений KeyError/AttributeError) происходят из этих классов.

  • [no_tags]

    исправление типов дат в MySQL, возвращаемая timedelta преобразуется в datetime.time

  • [no_tags]

    Двухфазные операции objectstore.commit (т.е. begin/commit) теперь возвращают транзакционный объект (SessionTrans), чтобы более четко обозначить границы транзакций.

  • [no_tags]

    В схему добавлен индексный объект с поддержкой создания/удаления

  • [no_tags]

    исправление в postgres, при котором он будет явно предварительно выполнять PassiveDefault для таблицы, если это столбец с первичным ключом, в соответствии с текущей проблемой «мы не можем получить вставленные строки обратно из postgres».

  • [no_tags]

    изменение в запросе information_schema, который возвращает defs таблиц postgres, теперь используется явное ключевое слово JOIN, так как один пользователь получил более высокую производительность в 8.1

  • [no_tags]

    исправление в engine.process_defaults, чтобы он корректно работал с таблицей, имеющей разные имена столбцов/ключи столбцов (changeset 982)

  • [no_tags]

    столбец может быть привязан только к одной таблице - теперь это утверждается

  • [no_tags]

    Типы времени postgres происходят от типа Time

  • [no_tags]

    исправление в alltests, чтобы он запускал тест типов (теперь он называется testtypes)

  • [no_tags]

    исправление объекта Join, чтобы он корректно экспортировал свои внешние ключи (cs 973)

  • [no_tags]

    создание отношений с картографами, использующими фиксированное наследование (cs 973)

Вернуться на верх