1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-WatermelonDB

Клонировать/Скачать
CHANGELOG.md 94 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 24.06.2025 09:12 1747f9a

Журнал изменений

Все значимые изменения в этом проекте будут отражены в этом файле.

Участники: Пожалуйста, добавьте свои изменения в CHANGELOG-Unreleased.md

0.28 - 2025-04-07

КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ

  • [iOS] Целевая версия Podspec была повышена с iOS 11 до iOS 12
  • [Android] Процесс установки Android JSI адаптера изменился. Для миграции удалите getJSIModulePackage() переопределение в вашем MainApplication.{java,kt} и добавьте new WatermelonDBJSIPackage() в getPackages() переопределение вместо него. Подробности см. в документации по установке.

НОВЫЕ ВОЗМОЖНОСТИ

  • Добавлена опция Database#experimentalIsVerbose
  • Поддержка React Native 0.74+

ИСПРАВЛЕНИЯ

  • [ts] Улучшено определение типа LocalStorage
  • [ts] Добавлен недостающий .d.ts для декоратора experimentalFailsafe
  • [migrations] unsafeExecuteSql миграция теперь проверяется для завершения точкой с запятой (#1811)

ИЗМЕНЕНИЯ

  • Минимальная поддерживаемая версия Node.js теперь 18.x
  • Улучшены диагностические ошибки модели так, чтобы они всегда содержали table#id проблемной записи
  • Обновлен better-sqlite3 до версии 11.x
  • Обновлен sqlite (используется Android в режиме JSI) до версии 3.46.0
  • [docs] Улучшена документация по установке Android
  • [docs] Удалены примеры из кодовой базы, так как они были необслуживаемыми

ВНУТРЕННИЕ ИЗМЕНЕНИЯ

  • Обновлены внутренние зависимости

0.27.1 - 2023-10-15

Исправлен пропущенный журнал изменений для выпуска 0.27## 0.27 - 2023-08-29

Высветленные моменты

Удалены устаревшие модули React Native для Swift и Kotlin

После добавления новых Native Modules в версии 0.26 мы удаляем старые реализации. Мы ожидаем, что это упростит процесс установки и устранит множество проблем совместимости и конфигурации из-за несоответствий версий Kotlin и проблем CocoaPods-Swift при использовании use_frameworks! или Expo.

Экспериментальная поддержка React Native для Windows

WatermelonDB теперь имеет экспериментальную поддержку для React Native для Windows. Подробности см. в документации по установке.

Введение Watermelon React

Все помощники React/React Native для Watermelon теперь доступны из нового каталога @nozbe/watermelodb/react:

  • DatabaseProvider, useDatabase, withDatabase
  • НОВОЕ: withObservables - пакет @nozbe/with-observables устарел и теперь включен в WatermelonDB
  • НОВОЕ: HOC-помощники: compose, withHooks
  • НОВОЕ: компонент <WithObservables />, версия компонента для HOC withObservables. Полезно, когда наблюдаемое значение локализовано небольшой частью большого компонента, так как можно легко ограничить перерenderинг части компонента при изменении значения без необходимости выделения нового компонента. Импорты из предыдущего @nozbe/watermelondb/DatabaseProvider и @nozbe/watermelondb/hooks устарели и будут удалены в будущей версии.

Введение Watermelon Diagnostics

Все средства отладки/разработки/диагностики для Watermelon теперь доступны из нового каталога @nozbe/watermelondb/diagnostics:- НОВОЕ: censorRaw — принимает RawRecord/DirtyRaw и цензурирует его строковые значения, сохраняя идентификаторы, _status, _changed и числовые/булевые значения. Полезно при просмотре содержимого базы данных в контексте, который может раскрыть конфиденциальную информацию пользователя.

  • НОВОЕ: diagnoseDatabaseStructure — анализирует базу данных для поиска несоответствий, таких как сиротские записи (belongs_to отношения на модели, указывающие на записи, которые не существуют) или сломанный LokiJS база данных. Используйте это для поиска ошибок в вашей модели данных.
  • НОВОЕ: diagnoseSyncConsistency — сравнивает локальную базу данных с серверной версией (содержимое первого полного синхронизации) для поиска несоответствий, пропущенных и лишних записей. Используйте это для поиска ошибок в реализации вашего синхронного бэкэнда.

КРИТИЧНЫЕ ИЗМЕНЕНИЯ

  • @nozbe/with-observables больше не является зависимостью WatermelonDB. Измените ваши импорты на import { withObservables } from '@nozbe/watermelondb/react'

Изменения, которые маловероятно вызовут проблемы:- [iOS] Если в вашем приложении на Swift используется import WatermelonDB (для Turbo синхронизации), удалите его и замените на #import <WatermelonDB/WatermelonDB.h> в заголовочном файле моста.

  • [iOS] Если вы используете _watermelonDBLoggingHook, удалите его. В настоящее время замена не предоставляется; свободно вносите свой вклад, если вам это нужно.

  • [iOS] Если вы используете -DENABLE_JSLOCK_PERFORMANCE_HACK, удалите его. JSLockPerfHack уже долгое время не работал, и теперь он удален. Пожалуйста, создайте задачу, если вы зависели от него.### Устаревшие импорты

  • Импорты из @nozbe/watermelondb/DatabaseProvider и @nozbe/watermelondb/hooks. Измените на @nozbe/watermelondb/react

Новые возможности

  • Новый декоратор @experimentalFailsafe, который можно применить перед @relation/@immutableRelation, чтобы если отношение указывало на запись, которая не существует, .fetch()/.observe() возвращали undefined вместо выброса ошибки

Исправления

  • [Flow/TS] Улучшен типированный DatabaseContext
  • Исправлено Cannot read property 'getRandomIds' of null. Эта ошибка возникала, если нативные модули были некорректно установлены, однако местоположение ошибки вызывало много путаницы.## 0.26 - 2023-04-28

Выделенные моменты

Новые встроенные модули

Мы переходим к адаптерам SQLite для React Native из Kotlin и Swift к Java и Objective-C.

Это небольшая часть WatermelonDB, но она отвечает за большую долю возникающих проблем, таких как конфликты версий Kotlin, сбои сборки Expo, проблемы с CocoaPods use_frameworks!. Это усложняет установку и обновление библиотеки для пользователей. Это усложняет поддержку. Swift плохо работает с устаревшей системой Native Module React Native, а также не может взаимодействовать чисто с C++ (JSI/Новой архитектурой) без использования Objective-C++.

Другими словами, в контексте библиотеки React Native, преимущества этих современных, более удобных языков значительно перевешивают недостатки. Поэтому мы (@radex & @rozpierog) решили переписать реализации для iOS и Android на Objective-C и Java соответственно.0.26 — это переходный выпуск, содержащий обе реализации. Если вы найдете регрессию, вызванную новым мостом, передайте {disableNewBridge: true} в new SQLiteAdapter() и создайте задачу. Планируется удаление старой реализации в выпусках 0.27 или 0.28.

Новая документация

У нас есть совершенно новая страница документации, созданная с помощью Docusaurus (внесённая @ErickLuizA).

Мы планируем расширить руководства, добавить типы к примерам и добавить полноценную справку по API, но нам нужна ваша помощь для этого! Смотрите: https://github.com/Nozbe/WatermelonDB/issues/1481

КРИТИЧНЫЕ ИЗМЕНЕНИЯ

  • [iOS] Вам следует удалить импорт WatermelonDB's SupportingFiles/Bridging.h из вашего проекта Bridging.h. Если удаление вызывает проблемы сборки, пожалуйста, создайте задачу.

  • [iOS] В вашем Podfile замените предыдущие импорты WatermelonDB следующим образом:

    # Отмените эту строку, если вы не используете автоматическое связывание
    # pod 'WatermelonDB', path: '../node_modules/@nozbe/watermelondb'
    # WatermelonDB зависимость
    pod 'simdjson', path: '../node_modules/@nozbe/simdjson', modular_headers: true
  • Удалены функции, устаревшие более 2 лет:

    • Collection.unsafeFetchRecordsWithSQL(). Используйте .query(Q.unsafeSqlQuery('select * from...')).fetch() вместо.
    • Database.action(). Используйте Database.write() вместо.
    • .subAction(). Используйте .callWriter() вместо.
    • @action декоратор. Используйте @writer вместо.### Устаревшие функции

Новые возможности- [Android] Добавлена опция experimentalUnsafeNativeReuse в SQLiteAdapter. Подробнее см. src/adapters/sqlite/type.js

  • Теперь можно передавать массив в Q.and(conditions), Q.or(conditions), collection.query(conditions), query.extend(conditions) помимо распаковки нескольких аргументов
  • Добавлены JSDoc комментарии к многим API

Исправления

  • Улучшена устойчивость к ошибкам "Maximum call stack size exceeded"
  • [JSI] Улучшена надежность при перезагрузке RCTBridge
  • [iOS] Исправлено предупреждение Xcode "диапазон поддерживаемых целевых версий"
  • randomId использует лучший генератор случайных чисел
  • Исправлено сообщение об ошибке "нет такого индекса" при использовании нестандартных схем и более 1000 массовых обновлений
  • Исправления и изменения включены в @nozbe/with-observables@1.5.0
  • [Flow] query.batch([model, falsy]) больше не вызывает ошибку

Улучшение производительности

  • Предупреждение теперь выдается, если передаются большое количество аргументов в Q.and, Q.or, Collection.query, Database.batch вместо одного массива
  • randomId() теперь в 2 раза быстрее на Chrome, в 10 раз быстрее на Safari, в 2 раза быстрее на iOS (Hermes)

Изменения- randomId: теперь также генерирует заглавные буквы

  • Упрощена интеграция CocoaPods/iOS

  • Улучшены документы: версии SQLite, объявления Flow, установка

  • Улучшены диагностические предупреждения и ошибки: JSI, Writer/Reader

  • Удалены старые диагностические предупреждения, которые больше не актуальны: несколько Q.on(), Database, LokiJSAdapter, SQLiteAdapter

  • Обновлен flow-bin до 0.200. Это не должно повлиять на вас, но может исправить или сломать Flow, если WatermelonDB не установлен в режиме [declarations]

  • Обновлен @babel/runtime до 7.20.13

  • Обновлен rxjs до 7.8.0

  • Обновлен sqlite (SQLite используется на Android в режиме JSI) до 3.40.1

  • Обновлен simdjson до 3.1.0### Внутренние изменения

  • Улучшено QueryDescription, структура папки ios, реализация JSI путём разделения на меньшие части.

  • [Android] [jsi] Упрощена структура CMakeLists

  • Улучшена скрипт выпуска

0.25.5 - 2023-02-01

  • Исправлена автоматическая связь Android

0.25.4 - 2023-01-31

  • [Sync] Улучшено потребление памяти (меньше вероятность получения ошибки "Maximum callstack exceeded")
  • [TypeScript] Исправлен тип DirtyRaw на { [key: string]: any } (от Object)

0.25.3 - 2023-01-30

  • Исправлена регрессия TypeError

0.25.2 - 2023-01-30### Исправления

  • Исправление проблем с TypeScript (@paulrostorp feat. @enahum)
  • Исправление компиляции на Kotlin 1.7
  • Исправление регрессии в Sync, которая могла вызвать ошибку Record ID xxx#yyy был отправлен через мост, но он не кэширован

Внутренние изменения

  • Обновление внутренних зависимостей
  • Исправление Android CI
  • Улучшение TypeScript CI

0.25.1 - 2023-01-23

  • Исправление сломанной сборки React Native 0.71+

0.25 - 2023-01-20

Выделенные изменения

  • Исправление сломанной сборки на React Native 0.71+
  • [Expo] Исправление ошибок сборки Expo SDK 44+ (@Kudo)
  • [JSI] Исправление проблемы, которое иногда приводило к падению приложения при закрытии базы данных

КРИТИЧНЫЕ ИЗМЕНЕНИЯ- [Запрос] Q.where(xxx, undefined) теперь будет выбрасывать ошибку. Это исправление бага, так как сравнение с

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

  • [JSI+Swift] Если вы используете watermelondbProvideSyncJson() native iOS API, вам может потребоваться добавить import WatermelonDB### Новые возможности

  • [adapters] Объекты адаптеров теперь могут быть различены путём проверки их static adapterType

  • [Query] Новый запрос Q.includes('foo') для чувствительного к регистру сравнения строк

  • [adapters] Объекты адаптеров теперь возвращают dbName

  • [Sync] Замена Sync — новая продвинутая функция синхронизации. Сервер теперь может отправить полное набор данных (такое же, как во время первоначальной синхронизации) и указать с помощью { experimentalStrategy: 'replacement' }, что вместо применения разницы, локальная база данных должна быть заменена отправленным набором данных. Локальные записи, отсутствующие в наборе изменений, будут удалены. Однако, в отличие от очистки базы данных и повторного входа, неподтверждённые локальные изменения (к записям, которые сохраняются после замены) сохраняются. Это полезно для восстановления от повреждённой локальной базы данных, или как хак для обработки очень больших состояний изменений, когда сервер не знает, как эффективно отправить инкрементальные изменения, и хочет отправить полный набор данных вместо этого. Смотрите документацию для более подробной информации.

  • [Sync] Добавлен обратный вызов onWillApplyRemoteChanges

Производительность- [LokiJS] Обновление Loki с некоторыми улучшениями производительности

  • [iOS] JSLockPerfHack теперь работает на iOS 15
  • [Sync] Улучшение производительности обработки больших запросов
  • Улучшение декоратора @json, теперь с необязательным параметром { memo: true }

Изменения- [Документация] Добавлен дополнительный шаг установки Android JSI

Исправления

  • [TypeScript] Улучшение типизации: добавлен метод unsafeExecute, свойство localStorage к базе данных
  • [Android] Исправлена компиляция в некоторых конфигурациях из-за отсутствия импорта <cassert>
  • [Синхронизация] Исправлена пометка изменений как синхронизированных для пользователей, которые не используют глобально уникальные (только уникальные для каждой таблицы) ID
  • Исправление ошибки при вызове Model.experimentalMarkAsDeleted/experimentalDestroyPermanently() в некоторых случаях
  • Исправления, включённые в обновлённый withObservables

0.24 - Метод 2021-10-28

КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ

  • Q.experimentalSortBy, Q.experimentalSkip, Q.experimentalTake переименованы соответственно в Q.sortBy, Q.skip, Q.take
  • RxJS обновлен до версии 7.3.0. Если вы не импортируете из rxjs в вашем приложении, это не относится к вам. Если вы импортируете, прочитайте критические изменения RxJS 7: https://rxjs.dev/deprecations/breaking-changes

Новые возможности- Локальное хранилище. Теперь доступен database.localStorage

  • sortBy, skip, take теперь доступны в LokiJSAdapter

  • Недолгоживущие записи. Читаемые только для чтения записи, которые не могут быть сохранены в базе данных, обновлены или удалены и существуют только пока вы сохраняете ссылку на них в памяти, могут быть созданы с помощью collection.disposableFromDirtyRaw(). Это полезно, когда вы добавляете функции, доступные только онлайн, в приложение, которое обычно работает в оффлайн-режиме.

  • [Синхронизация] Параметр experimentalRejectedIds теперь доступен в ответе на отправку для частичного отказа от успешной синхронизации### Исправления

  • Исправление проблемы при использовании Headless JS на Android с включенным режимом JSI — передайте usesExclusiveLocking: true в SQLiteAdapter для включения

  • Исправление аннотаций TypeScript для Collection и адаптеров/sqlite

0.23 - 2021-07-22

Это крупное обновление WatermelonDB с новыми продвинутыми возможностями, значительными улучшениями производительности и важными исправлениями для JSI на Android.

Не бойтесь длинного списка критических изменений — они либо простые замены, либо изменения внутренних механизмов, которые вы, скорее всего, не используете. Обновление до версии 0.23 не должно занять у вас более 15 минут.### КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ- Изменение установки для iOS. Вам нужно добавить эту строку в ваш Podfile: pod 'simdjson', path: '. . /node_modules/@nozbe/simdjson'

  • Устаревший вариант new Database({ actionsEnabled: false }) был удален. Действия всегда включены.
  • Устаревший вариант new SQLiteAdapter({ synchronous: true }) был удален. Вместо этого используйте { jsi: true }.
  • Устаревшая функция Q. unsafeLokiFilter была удалена. Вместо неё используйте Q. unsafeLokiTransform((raws, loki) => raws. filter(raw => . . . )).
  • Устаревшая функция Query. hasJoins была удалена.
  • Изменения в опциях конструктора LokiJSAdapter:
    • indexedDBSerializer -> extraIncrementalIDBOptions: { serializeChunk, deserializeChunk }
    • onIndexedDBFetchStart -> extraIncrementalIDBOptions: { onFetchStart }
    • onIndexedDBVersionChange -> extraIncrementalIDBOptions: { onversionchange }
    • autosave: false -> extraLokiOptions: { autosave: false }
  • Изменения в внутренних API. Эти API никогда не предназначались для публичного использования, поэтому они маловероятно повлияют на вас:
    • Model. _isCommited, . _hasPendingUpdate, . _hasPendingDelete были удалены и заменены на Model. _pendingState
    • Collection. unsafeClearCache() больше не доступен
  • Значения, передаваемые в adapter. setLocal(), теперь проверяются на то, что они являются строками. Это фактический исправление ошибки, так как локальное хранилище всегда было документировано как принимает только строки. Однако приложения могут полагаться на отсутствие этой проверки. Добавление этой проверки было необходимо для обеспечения последовательного поведения между SQLiteAdapter и LokiJSAdapter.- unsafeSql, передаваемое в appSchema, теперь будет вызываться также при удалении и последующем воссоздании всех индексов базы данных в больших пакетах. Был добавлен второй аргумент, чтобы вы могли различать эти случаи. Подробнее см. документацию схемы.
  • Изменения в отслеживании синхронизации. Поведение record._raw._changed и record._raw._status (также известное как record.syncStatus) изменилось. Это маловероятно является разрывом совместимости, если вы не пишете свой собственный модуль синхронизации или не полагаетесь на эти низкоуровневые детали.
    • Ранее, _changed всегда было пустым при _status=created. Теперь, _changed не заполняется во время первоначального создания записи, но последующее обновление добавляет измененные поля в _changed. Это изменение было необходимо для исправления старой ошибки синхронизации. ### Устаревшие функции- database.action(() => {}) теперь устарел. Используйте db.write(() => {}) вместо (или db.read(() => {}), если вам нужна только согласованность, но вы не пишете никаких изменений в БД)
  • @action теперь устарел. Используйте @writer или @reader вместо
  • .subAction() теперь устарел. Используйте .callReader() или .callWriter() вместо
  • Collection.unsafeFetchRecordsWithSQL() теперь устарел. Используйте collection.query(Q.unsafeSqlQuery("select * from...")).fetch() вместо.

Новые возможности- db. write(writer => { ... writer. batch() }) - теперь вы можете вызывать метод batch на интерфейсе, переданном в блок writer

  • Получение ID записей и сырого незащищенного контента. Теперь вы можете оптимизировать получение запросов, которые требуют только ID, а не полных закэшированных записей:

    • await query. fetchIds() вернет массив ID записей
    • await query. unsafeFetchRaw() вернет массив незащищенных, незащищенных объектов (используйте вместе с Q. unsafeSqlQuery для исключения ненужных или включения дополнительных колонок)
    • также доступны продвинутые adapter. queryIds(), adapter. unsafeQueryRaw
  • Сырое SQL-запрос. Новый синтаксис для выполнения незащищенных сырых SQL-запросов:

    • collection. query(Q. unsafeSqlQuery("select * from tasks where foo = ? ", ['bar'])). fetch()
    • Теперь вы можете выполнять . fetchCount(), . fetchIds() на SQL-запросах
    • Вы можете безопасно передавать значения для местоположений SQL-запросов, передавая массив
    • Также можно наблюдать за незащищенным сырым SQL-запросом — с некоторыми ограничениями! Подробнее см. документацию
  • Незащищенное выполнение SQL-запроса. Теперь вы можете выполнять произвольные SQL-запросы (SQLiteAdapter) или прямой доступ к объекту Loki (LokiJSAdapter) с помощью adapter. unsafeExecute — см. документацию для более подробной информации

  • Ускоренный вход. Теперь вы можете ускорить начальную (входную) синхронизацию до 5,3 раз с помощью Turbo Login. Подробнее см. документацию по синхронизации- Новый диагностический инструмент - debugPrintChanges. Подробнее см. документацию по синхронизации### Улучшение производительности — Порядок Q. конструкций в запросе теперь сохраняется — ранее конструкции могли перестраиваться и создавать недопустимый запрос

  • [SQLite] adapter.batch() с большим количеством созданных/обновленных/удаленных записей теперь работает на 16–48% быстрее

  • [LokiJS] Запросы и поиск теперь выполняются быстрее — избыточное копирование данных пропущено

  • [jsi] При большом количестве возвращаемых записей запросы на JSC (iOS) становятся на 15–30% быстрее

  • [jsi] Быстрое создание пакета до 52% — это улучшение сверх того, что указано выше!

  • Устранена производительная проблема, которая вызывала избыточное перерendering наблюдаемых элементов в списке с использованием .observeWithColumns() незадолго до их удаления из списка### Изменения

  • Все логи консоли Watermelon теперь начинаются с тега 🍉

  • Добавлены дополнительные защиты от неправильного использования писателей/читателей (ранее действий)

  • Запросы с несколькими верхнеуровневыми Q.on('table', ...) теперь вызывают предупреждение. Вместо этого используйте синтаксис Q.on('table', [условие1, условие2, ...]).

  • [jsi] Теперь используется режим WAL

Исправления- [jsi] Исправлена проблема гонки, когда команды, отправленные в базу данных сразу после создания SQLiteAdapter, проваливались

  • [jsi] Исправлено некорректное отображение ошибок при некоторых ошибках sqlite

  • [jsi] Исправлена проблема, при которой приложение падало на Android/Hermes при перезагрузке

  • [jsi] Исправлены ошибки ввода-вывода на Android

  • ["sync"] Исправлена долгосрочная ошибка, которая приводила к потере последних изменений записей, созданных до синхронизации и обновленных во время синхронизации, при последующей синхронизации### Внутренние изменения

  • Внутренние изменения в SQLiteAdapter:

    • .batch больше недоступен в реализации для iOS
    • Внутренний формат .batch/.batchJSON изменён
    • .getDeletedRecords, destroyDeletedRecords, setLocal, removeLocal больше недоступны
  • Кодированные схемы SQLiteAdapter изменены

  • В LokiJSAdapter произведено много внутренних изменений

0.22 - OnClickListener 2021-05-07

Критические изменения

  • [SQLite] Опция experimentalUseJSI: true переименована в jsi: true

Устаревшие возможности

  • [LokiJS] Q.unsafeLokiFilter теперь устарел и будет удалён в будущих версиях. Используйте Q.unsafeLokiTransform((raws, loki) => raws.filter(raw => ...)) вместо него.

Новые возможности

  • [SQLite] [JSI] jsi: true теперь работает на Android — см. документацию для информации о настройке

Улучшения производительности

  • Удалена зависимость от rambdax и уменьшен размер библиотеки util
  • Более быстрый withObservables

Изменения- Синхронизация: pushChanges теперь является необязательным, локальные изменения не будут вычисляться, если он не указан.

  • withObservables теперь является зависимостью WatermelonDB для более простой установки и последовательных обновлений. Вы можете (и обычно должны) удалить @nozbe/with-observables из вашего package.json
  • [Документация] Добавлен продвинутый учебник для совместного использования базы данных между целевыми объектами iOS - @thiagobrez
  • [SQLite] Разрешены обратные вызовы (внутри объекта migrationEvents) для отслеживания статуса событий миграции (onStart, onSuccess, onError) - @avinashlng1080
  • [SQLite] Добавлен метод Query._sql() только для разработки для быстрого извлечения SQL из запросов для целей отладки### Исправления- Устранение проблемы с подъемом статических данных в withDatabase() для нереактивных компонентов
  • Исправление некорректной ссылки на process, которая может вызвать ошибки приложения в некоторых окружениях (например, webpack5)
  • [SQLite] [JSI] Исправление режима JSI при работе на Hermes
  • Исправление конкурентной ситуации при использовании стандартных методов загрузки (fetch) вместе с Collection.unsafeFetchRecordsWithSQL — @jspizziri
  • withObservables больше не должна вызывать проблем с RxJS, так как больше не импортирует библиотеку RxJS
  • [Typescript] Добавлены поля onSetUpError и onIndexedDBFetchStart в LokiAdapterOptions; исправлено сообщение об ошибке Typescript — @3DDario
  • [Typescript] Удалены дублированные идентификаторы useWebWorker и useIncrementalIndexedDB из LokiAdapterOptions — @3DDario
  • [Typescript] Исправлено значение по умолчанию в утилите логгера

0.21 - релиз 24 марта 2021

КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ

  • [LokiJS] Опции useWebWorker и useIncrementalIndexedDB теперь обязательны (ранее пропуск этих опций вызывал только предупреждение)

Новые возможности- [Модель] Метод Model.update теперь возвращает обновленную запись

  • [адаптеры] Добавлена опция onSetUpError: Error => void для обоих адаптеров SQLiteAdapter и LokiJSAdapter. Укажите эту опцию для перехвата ошибок инициализации и предложить пользователю перезагрузить или выйти из системы

  • [LokiJS] Добавлены новые опции extraLokiOptions и extraIncrementalIDBOptions

  • [Android] Поддержка автоматической связи теперь доступна.

    • Если Вы обновитесь до <= v0.21.0 И используете версию React Native, поддерживающую автоматическую связь, вам потребуется удалить конфигурацию, связанную с ручной связью WatermelonDB.
    • Вы можете решить эту проблему, УДАЛЯЯ строки конфигурации из вашего проекта, которые были добавлены в разделе «Ручная установка только» документации по установке Android.### Улучшения производительности
  • [LokiJS] Улучшение производительности запуска приложения

Изменения

  • [LokiJS] Опции useWebWorker: true и useIncrementalIndexedDB: false теперь устарели. Если вы используете эти возможности, пожалуйста, создайте задачу!
  • [Sync] Необязательный параметр log, передаваемый в синхронизацию, теперь содержит более полезную диагностическую информацию
  • [Sync] Открытый простой SyncLogger, который можно использовать по желанию. Подробнее см. Документацию.
  • [SQLiteAdapter] Опция synchronous:true теперь устарела и будет заменена на experimentalUseJSI: true в будущем. Пожалуйста, протестируйте, компилируется ли ваше приложение и работает ли оно хорошо с experimentalUseJSI: true, и если нет — создайте задачу!
  • [LokiJS] Изменено значение по умолчанию для интервала автоматического сохранения с 250 до 500 мс
  • [Typescript] Добавлено определение experimentalNestedJoin и раздел unsafeSqlExpr

Исправления

  • [LokiJS] Устранена проблема, при которой IndexedDB могла повредиться со временем

  • [Устойчивость] Добавлены дополнительные диагностики для случаев, когда вы сталкиваетесь с ошибкой Record ID aa#bb был отправлен через мост, но он не кэширован, а также добавлен путь восстановления (только для LokiJSAdapter). Пожалуйста, создайте задачу, если вы столкнетесь с этой проблемой!

  • [TypeScript] Устранена проблема типа для OnFunction, чтобы принимать and в join

  • [TypeScript] Устранена проблема типа database#batch(records) для аргумента records, чтобы принимать смешанные типы### Внутренние изменения

  • Добавлен экспериментальный режим, который обнаруживает поврежденное состояние базы данных, предотвращает дальнейшие изменения и уведомляет пользователя

0.20 - 2020-10-05

КРИТИЧЕСКИЕ ИЗМЕНЕНИЯ

Эта версия случайно сломала RxJS для некоторых приложений, использующих with-observables. Если у вас возникла такая проблема, пожалуйста, обновите @nozbe/with-observables до последней версии.

Новые возможности

  • [Синхронизация] Разрешение конфликтов теперь можно настроить. Подробнее см. документацию
  • [Android] Поддержка автоматической связи теперь доступна
  • [LokiJS] Опция автоматического сохранения адаптера теперь настраиваема

Изменения

  • Внутренние импорты RxJS были переработаны таким образом, что rxjs-compat больше никогда не будет использоваться
  • [Производительность] Настройки Babel были скорректированы для получения более компактного кода
  • [Производительность] Приложения на основе LokiJS будут загружаться базу данных на 30% быстрее (уникальные индексы генерируются лениво)

Исправления

  • [iOS] Устранена ошибка при сбросе базы данных в приложениях, связанных с iOS 14 SDK
  • [LokiJS] Устранена проблема с Q.like для многострочных строк в вебе
  • Устранена предупреждение "циклический импорт" от DialogProvider (#786) автором @gmonte.
  • Устранена проблема с датой кэша как экземпляр Date (#828) автором @djorkaeffalexandre.## 0.19 - 2020-08-17

Новые возможности

  • [iOS] Добавлена поддержка CocoaPods - @leninlin
  • [NodeJS] Введён новый адаптер SQLite для интеграции с NodeJS. Это требует наличия парной зависимости на better-sqlite3 и должен работать с тем же конфигурационным файлом, что и для iOS/Android - @sidferreira
  • [Android] Опция experimentalUseJSI включена на Android. Однако, она требует некоторых настроек приложения, которые ещё не документированы — следите за новыми выпусками.
  • [Схема] [Миграции] Вы можете теперь передавать параметры unsafeSql в схемном билдере и шагах миграций для модификации сгенерированного SQL для установки базы данных или выполнения миграций. Также есть новый шаг миграции unsafeExecuteSql. Пожалуйста, используйте это только если вы знаете, что делаете — вам этого не потребуется в 99% случаев. Подробнее см. документацию по схемам и миграциям.
  • [LokiJS] [Производительность] Добавлены экспериментальные опции onIndexedDBFetchStart и indexedDBSerializer в LokiJSAdapter. Эти опции могут использоваться для улучшения времени запуска приложения. Подробнее см. src/adapters/lokijs/index.js.

Изменения- [Производительность] findAndObserve теперь может отправлять значение синхронно. В результате это позволяет компонентам, добавленным в withObservables, отображаться за один проход. Исключение лишних циклов рендера уменьшает работу с DOM и фазу коммита React, что может увеличить скорость загрузки некоторых представлений на 30%.

  • [Производительность] LokiJS стал быстрее (переоптимизирован encodeQuery, пропущены лишние операции клонирования)## 0.18 - 30 октября 2020

Еще одна версия WatermelonDB после недели? Да! И она полна новых возможностей!

Новые возможности

  • [Запрос] Запросы Q.on стали гораздо гибче. Ранее они могли использоваться только на верхнем уровне запроса. Подробнее см. Документацию. Теперь вы можете:

    • Передавать несколько условий для связанного запроса, например:

      collection.query(Q.on('projects', [Q.where('foo', 'bar'), Q.where('bar', 'baz')]))
    • Размещать Q.on глубже внутри запроса (вложенные внутри Q.and(), Q.or()). Однако вам необходимо явно указать все таблицы, которые вы объединяете, в начале запроса, используя: Q.experimentalJoinTables(['join_table1', 'join_table2']).

    • Вкладывать условия Q.on внутри других Q.on, чтобы сделать условие для внучатого уровня. Для этого требуется передать Q.experimentalNestedJoin('parent_table', 'grandparent_table') в начале запроса.

  • [Запрос] Введены Q.unsafeSqlExpr() и Q.unsafeLokiExpr(), чтобы позволить добавлять части запросов, которые не поддерживаются языком запросов WatermelonDB, без использования unsafeFetchRecordsWithSQL(). Подробнее см. Документацию.

  • [Запрос] Q.unsafeLokiFilter((rawRecord, loki) => boolean) теперь можно использовать как выходной механизм для создания запросов с LokiJSAdapter, которые иначе невозможны (например, сравнение столбцов между несколькими таблицами). Подробнее см. Документацию.

Изменения- [Производительность] [LokiJS] Улучшена производительность запросов, содержащих сравнения запросов на LokiJSAdapter

  • [Документация] Добавлено руководство по вкладам для улучшений языка запросов
  • [Устаревание] Query.hasJoins устарел
  • [UX] Запросы с неправильными ассоциациями теперь показывают более полезное сообщение об ошибке
  • [Запрос] Запросы на подсчет, содержащие Q.experimentalTake / Q.experimentalSkip, в настоящее время сломаны — ранее они возвращали неверные результаты, но теперь они выбрасывают ошибку, чтобы избежать путаницы. Пожалуйста, внесите свой вклад для исправления корневой причины!### Исправления- [TypeScript] Исправлены типы Relation

Внутренние изменения

  • Изменена структура QueryDescription.

0.17.1 - 2020-06-24

  • Исправлена поломанная сборка iOS - @mlecoq

0.17 - 2020-06-22

Новые возможности

  • [Синхронизация] Введены миграционные синхронизации — это позволяет полностью согласованной синхронизации при миграции между версиями схемы. Ранее не было механизма для постепенного получения всех удалённых изменений в новых таблицах и столбцах после миграции — поэтому локальная копия была скорее всего неконсистентной, требуя повторной авторизации. После внедрения миграционных синхронизаций, Watermelon Sync будет запрашивать у сервера все недостающие данные. Подробнее см. документацию по синхронизации.

  • [iOS] Введено новое нативное интегрирование базы данных SQLite, переписанное с нуля на C++, основанное на JavaScript Interface (JSI) React Native. Это следует считать экспериментальным, однако мы планируем сделать его основной (и в конечном итоге единственной) реализацией. В последующих выпусках будет введена версия для Android.

      Новый адаптер до 3 раз быстрее, чем ранее самая быстрая опция `synchronous: true`, однако этот прирост производительности достигается с помощью ещё не опубликованных патчей React Native.
    
      Чтобы попробовать JSI, добавьте `experimentalUseJSI: true` в конструктор `SQLiteAdapter`.- [Запрос] Добавлены методы `Q.experimentalSortBy(sortColumn, sortOrder)`, `Q.experimentalTake(count)`, `Q.experimentalSkip(count)` (доступны только с `SQLiteAdapter`) - @Kenneth-KT
  • Теперь Database.batch() можно вызывать с одним массивом моделей

  • [DX] Database.get(tableName) теперь является сокращением для Database.collections.get(tableName)

  • [DX] Запрос теперь является thenable — вы можете использовать await query и await query.count вместо await query.fetch() и await query.fetchCount()

  • [DX] Отношение теперь является thenable — вы можете использовать await relation вместо await relation.fetch()

  • [DX] Выходные данные collection.db и model.db теперь являются сокращениями для доступа к объекту Database### Изменения

  • [Усиление безопасности] Начальные значения столбцов и таблиц, начинающиеся с __, имена свойств объектов (например, constructor) и некоторые зарезервированные ключевые слова теперь запрещены

  • [UX] [Усиление безопасности] Методы построителя QueryDescription выполняют более строгие проверки типов, что позволяет ловить больше ошибок и предотвращает передачу незащищенных данных пользователя в методы построителя запросов

  • [UX] [Усиление безопасности] Адаптеры проверяют рано, являются ли имена таблиц корректными

  • [UX] Метод Collection.find быстрее отображает ошибку, если передано очевидно некорректное значение ID

  • [UX] Инициализация базы данных с некорректными классами моделей теперь показывает полезное сообщение об ошибке

  • [UX] DatabaseProvider теперь отображает более полезное сообщение об ошибке при некорректном использовании

  • [Синхронизация] Синхронизация больше не завершается ошибкой, если pullChanges возвращает коллекции, которые не существуют на фронтенде — вместо этого отображается предупреждение. Это сделано для уменьшения вероятности ошибок при создании обратно совместимых серверных приложений

  • [Синхронизация] [Документация] Документация по синхронизации переписана и теперь ближе к детализированному формальному спецификации

  • [Усиление безопасности] database.collections.get() лучше проверяет переданные значения- [Усиление безопасности] Предотвращает передачу опасных строковых значений как аргументов имени столбца/таблицы в QueryDescription### Исправления- [Синхронизация] Исправлено исключение RangeError: Maximum call stack size exceeded, возникающее при синхронизации больших объемов данных - @leninlin

  • [iOS] Исправлена ошибка, которая могла привести к завершению операции базы данных с ошибкой (6) SQLITE_LOCKED

  • [iOS] Исправлено сообщение "jsi/jsi.h" file not found при сборке на уровне потребителя. Добавлен путь $(SRCROOT)/../../../../../ios/Pods/Headers/Public/React-jsi в Header Search Paths (issue #691) - @victorbutler

  • [Нативная] Использование ключевых слов SQLite в качестве имен таблиц или колонок больше не приводит к аварийному завершению программы

  • Исправлены потенциальные проблемы при подписке на базу данных, коллекцию, модель, запросы, передача функции подписчика с одинаковым идентификатором более одного раза

Внутренние изменения

  • Исправлены сломанные тесты адаптера

0.15.1, 0.16.1-fix, 0.16.2 - 2020-06-03

Это исправление безопасности для уязвимости, которая может привести к удалению всех или части данных пользователя при использовании специально созданных идентификаторов записей. Более подробная информация доступна через GitHub Security Advisory

0.16.1 - 2020-05-18

Изменения

  • Database.unsafeResetDatabase() теперь менее опасен — выявляет больше ошибок приложения

Исправления- [iOS] Исправлена сборка в приложениях, использующих Flipper

  • [TypeScript] Добавлено определение типа для setGenerator.

  • [TypeScript] Исправлены типы декораторов.

  • [TypeScript] Добавлены тесты для проверки типов.

  • Исправлена ошибка в документации по использованию.

  • [TypeScript] Исправлены типы изменений.### Внутренние изменения

  • [SQLite] Добавлена инфраструктура для будущего адаптера JSI

0.16 - 2020-03-06

⚠️ Нестабильные изменения

  • experimentalUseIncrementalIndexedDB переименован в useIncrementalIndexedDB

Низкий риск изменения

  • [адаптеры] API адаптера изменился с возврата промиса на использование обратного вызова как последнего аргумента. Это не повлияет на вас, если вы не вызываете методы адаптера напрямую. database.adapter возвращает новый DatabaseAdapterCompat, который имеет ту же структуру, что и старый API адаптера. Вы можете использовать database.adapter.underlyingAdapter, чтобы получить обратно SQLiteAdapter / LokiJSAdapter
  • [Коллекция] Collection.fetchQuery и Collection.fetchCount удалены. Пожалуйста, используйте Query.fetch() и Query.fetchCount().### Новые возможности
  • [SQLiteAdapter] [iOS] Добавлена новая опция synchronous в адаптер: new SQLiteAdapter({ ..., synchronous: true }). При включении операций с базой данных будут блокировать поток JavaScript. Действия адаптера завершатся в следующем микроинтервале, что упрощает создание интерфейсов без мерцаний. Адаптер вернётся к асинхронным операциям, когда синхронный адаптер недоступен (например, при удалённой отладке).
  • [LokiJS] В конструктор LokiJSAdapter добавлена новая опция onQuotaExceededError?: (error: Error) => void. Эта функция вызывается, когда основной IndexedDB столкнулся с ошибкой превышения квоты (закончилось выделенное место на диске для приложения). Это означает, что приложение больше не сможет сохранять данные или будет использовать только временную базу данных в памяти. Обратите внимание, что эта опция работает только при useWebWorker: false.### Изменения- [Производительность] Внутренняя реализация Watermelon была переписана так, чтобы не зависеть от Promise и позволять некоторым вызовам fetch/observe разрешаться синхронно. Не полагайтесь на это — внешний API все еще основан на Rx и Promise и может разрешаться как асинхронно, так и синхронно в зависимости от возможностей. Это является внутренней оптимизацией производительности на данный момент.
  • [LokiJS] [Производительность] Улучшена реализация очереди рабочих процессов для повышения производительности
  • [Наблюдение] Переработана реализация наблюдателей для повышения производительности

Исправления

  • Исправлен потенциальный источник ошибки "Record ID xxx#yyy был отправлен через мост, но не кэширован"
  • [LokiJS] Исправлена проблема, препятствующая сохранению базы данных при использовании experimentalUseIncrementalIndexedDB
  • Исправлен потенциальный сценарий ошибки при использовании database.unsafeResetDatabase()
  • [iOS] Исправлена проблема очистки базы данных в экспериментальном синхронном режиме

Новые возможности (Экспериментальные)- [Модель] Добавлен экспериментальный метод model.experimentalSubscribe((isDeleted) => { ... }) как альтернатива на чистом JavaScript к Rx-основному методу model.observe(). В отличие от последнего, он не уведомляет подписчика сразу после подписки.

  • [Коллекция] Добавлен внутренний метод collection.experimentalSubscribe((changeSet) => { ... }) как альтернатива на чистом JavaScript к Rx-основному методу collection.changes (вы, вероятно, не должны использовать этот API вообще).
  • [База данных] Добавлен экспериментальный метод database.experimentalSubscribe(['table1', 'table2'], () => { ... }) как альтернатива на чистом JavaScript к Rx-основному методу database.withChangesForTables(). В отличие от последнего, experimentalSubscribe уведомляет подписчика только один раз после пакета, который делает изменения во множестве подписанных коллекций. Он также не уведомляет подписчика сразу после подписки и не отправляет детали об изменениях, только сигнал.
  • Добавлен метод experimentalDisableObserveCountThrottling() к @nozbe/watermelondb/observation/observeCount, глобально отключающий торможение наблюдения количества. Мы считаем, что торможение на уровне WatermelonDB не является хорошей функцией и будет удалено в будущем выпуске — и будет лучше реализовано на уровне приложения, если это необходимо.
  • [Запрос] Добавлены экспериментальные методы query.experimentalSubscribe(records => { ... }), query.experimentalSubscribeWithColumns(['col1', 'col2'], records => { ... }), и query.experimentalSubscribeToCount(count => { ... }).

0.15 - 2019-11-08### Выдающиеся изменения

Это массовое обновление WatermelonDB! 🍉

  • До 23 раз быстрее синхронизация. Вы правильно это услышали. Мы сделали большие улучшения производительности. В наших тестах, при массовой синхронизации (первый вход, 45 МБ данных / 65 К записей) мы получили ускорение скорости:

    • 5.7с -> 1.2с на вебе (5 раз)
    • 142с -> 6с на iOS (23 раза)

    Ожидайте больше улучшений в последующих выпусках!

  • Улучшенный адаптер LokiJS. Возможность отключения веб-работников, важное исправление для Safari 13, лучшая производительность, и теперь работает в режимах приватного просмотра. Мы рекомендуем добавить опции useWebWorker: false, experimentalUseIncrementalIndexedDB: true к конструктору LokiJSAdapter, чтобы воспользоваться улучшениями, но пожалуйста, прочитайте дальнейший список изменений, чтобы понять последствия этого.

  • Чистые SQL запросы теперь доступны на iOS и Android благодаря сообществу

  • Улучшенная поддержка TypeScript — благодаря сообществу

⚠️ Нестабильные изменения

  • Устаревший тип столбца схемы bool удален — пожалуйста, замените на boolean
  • Экспериментальная API experimentalSetOnlyMarkAsChangedIfDiffers(false) удалена

Новые возможности- [Коллекция] Добавлен метод Collection.unsafeFetchRecordsWithSQL(). Вы можете использовать его для получения записей с помощью

чистых SQL запросов на iOS и Android. Пожалуйста, будьте осторожны, чтобы избежать SQL-инъекций и других проблем чистых запросов.

  • [LokiJS] Введен новый параметр new LokiJSAdapter({ ..., experimentalUseIncrementalIndexedDB: true }). При активации база данных будет сохраняться в IndexedDB браузера с использованием нового адаптера, который сохраняет только измененные записи, а не всю базу данных. Это обходит серьезную ошибку в Safari 13 (https://bugs.webkit.org/show_bug.cgi?id=202137), которая вызывает быстрое увеличение размера базы данных до гигабайт мусора

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

    Это предназначено стать новым стандартным параметром, но он не обратно совместим (если активирован, старая база данных будет потеряна). Вы можете внести свой вклад в автоматическую миграцию кода. Обратите внимание, что этот параметр всё ещё экспериментальный и может измениться в непредсказуемом виде в любое время.

  • [LokiJS] Введена новая опция new LokiJSAdapter({ ..., useWebWorker: false }). Ранее веб-работеры всегда использовались с LokiJSAdapter. Хотя использование веб-работеров может иметь некоторые преимущества по производительности, отключение их может привести к снижению потребления памяти, уменьшению задержек и упрощению отладки. YMMV.

  • [LokiJS] Добавлена опция onIndexedDBVersionChange к LokiJSAdapter. Это обратный вызов, который вызывается, когда внутренняя версия IDB изменяется (скорее всего, база данных была удалена в другом вкладке браузера). Передайте обратный вызов для принудительного выхода из этой копии приложения. Обратите внимание, что это работает только при использовании incrementalIDB и отсутствии использования веб-работеров.

  • [Модель] Добавлен метод Model._dangerouslySetRawWithoutMarkingColumnChange(). Вы, скорее всего, не должны использовать его, но если вы знаете, что делаете и хотите обновлять записи из сервера в реальном времени без отметки записи как изменённой, это полезно.

  • [Коллекция] Добавлен метод Collection.prepareCreateFromDirtyRaw().

  • @json декоративные функции очистки принимают необязательный второй аргумент, содержащий ссылку на модель.### Исправления- Установлена необходимая версия rambdax 2.15.0 для устранения ошибки консольного логирования. В будущих выпусках мы перейдем на свой форк rambdax, чтобы избежать подобных проблем в будущем.

Улучшения- [Производительность] Ускорение работы с большими пакетами данных (время выполнения сокращено на 1,3 секунды для образца вставки 65К записей)

  • [Производительность] [iOS] Ускорение работы с большими пакетами вставок (скорость увеличена в десятки раз)

  • [Производительность] [iOS] Ускорение кодирования очень больших запросов (с тысячами параметров) в 20 раз

  • [Производительность] [LokiJS] Ускорение работы с пакетами вставок (время выполнения сокращено на 1,5 секунды для образца вставки 65К записей)

  • [Производительность] [LokiJS] Различные улучшения производительности

  • [Производительность] [Синхронизация] Ускорение процесса синхронизации

  • [Производительность] Ускорение наблюдений

  • [Производительность] [Android] Ускорение работы с пакетами данных

  • Исправление сбоев приложения и проблем производительности, вызванных условиями гонки в методе Query.observeWithColumns()

  • [LokiJS] Интерфейс адаптера хранения теперь автоматически выбирается на основе доступности. По умолчанию используется IndexedDB. Однако, если он недоступен (например, в режиме приватного браузера), будет использоваться временный адаптер хранения в памяти.

  • Отключение консольных логов, связанных с новыми наблюдениями (он никогда не считал все наблюдения), а также времени выполнения запросов/подсчета/пакетов (меры были крайне неточными из-за асинхронности — фактические времена значительно ниже)- [withObservables] Улучшение производительности и удобства отладки (обновите пакет withObservables отдельно)

  • Улучшение удобства отладки Watermelon — сокращение Rx стеков и добавление имен функций для помощи в понимании стеков вызовов и профилей

  • [адаптеры] Интерфейс адаптеров изменился. Методы query() и count() теперь принимают SerializedQuery, а метод batch() принимает TableName<any> и RawRecord или RecordId вместо Model.

  • [Typescript] Улучшение типизации

    • Добавлены три пропущенные свойства collections, database и asModel в определении типа Model.
    • Удалён опциональный флаг на actionsEnabled в опциях конструктора Database, так как это обязательно с версии 0. 13. 0.
    • Исправлены несколько дальнейших проблем типизации в Model, Relation и ленивом декораторе
  • Изменено, как асинхронные функции транслируются в библиотеке. Это может вызвать проблемы на очень старых устройствах Android, но это должно не иметь значения, если вы используете последнюю версию React Native. Пожалуйста, сообщите об ошибке, если вы заметили проблему.

  • Устранение проброса свойства database в демонстрационном приложении для веба## 0. 14. 1 - 2019-08-31Критическое исправление для аварийного завершения работы rambdax

  • [Schema] Обработка недействительного аргумента схемы таблицы в appSchema

  • [withObservables] Добавлена поддержка TypeScript (история изменений)

  • [Electron] Избежание ошибки Uncaught ReferenceError: global is not defined в среде выполнения Electron (#453)

  • [rambdax] Замена contains на includes из-за устаревания contains https://github.com/selfrefactor/rambda/commit/1dc1368f81e9f398664c9d95c2efbc48b5cdff9b#diff-04c6e90faac2675aa89e2176d2eec7d8R2209

0.14.0 - 2019-08-02

Новые возможности

  • [Query] Добавлена поддержка запросов notLike 🎉
  • [Actions] Теперь можно выполнять пакетное удаление записей вместе со всеми потомками с помощью экспериментальных функций experimentalMarkAsDeleted или experimentalDestroyPermanently

0.13.0 - 2019-07-18

⚠️ Нестабильные изменения

  • [Database] Теперь обязательна передача опции actionsEnabled: в конструктор Database. Рекомендуется включить эту опцию:

    const database = new Database({
      adapter: ...,
      modelClasses: [...],
      actionsEnabled: true
    })

    Подробнее о действиях см. docs/Actions.md. Вы также можете передать false, чтобы сохранить обратную совместимость, но эта опция будет удалена в будущих версиях.

  • [Adapters] Опция migrationsExperimental адаптеров SQLiteAdapter и LokiJSAdapter переименована в migrations.

Новые возможности- [Действия] Теперь можно выполнять пакетное удаление с помощью prepareMarkAsDeleted или prepareDestroyPermanently

  • [Синхронизация] Производительность: synchronize() больше не вызывает вашу функцию pushChanges(), если нет локальных изменений для отправки. Это должно сэкономить ненужный сетевой трафик. ⚠️ Обратите внимание, что это может быть несовместимостью, если вы полагаетесь на то, что она всегда вызывается.
  • [Синхронизация] При установке новых значений для полей записи, поле (и запись) больше не помечаются как измененные, если значение поля такое же. Это должно улучшить производительность и избежать ненужного кода в приложении. ⚠️ Обратите внимание, что это может быть несовместимостью, если вы полагаетесь на старое поведение. В настоящее время вы можете импортировать experimentalSetOnlyMarkAsChangedIfDiffers из @nozbe/watermelondb/Model/index и вызвать его с (false), чтобы вернуть старое поведение, но это будет удалено в будущих версиях -- создайте новый issue, объяснив, почему вам это нужно.
  • [Синхронизация] Мелкие улучшения производительности### Улучшения- [Typescript] Улучшены типы для адаптеров SQLite и LokiJS, миграций, моделей, базы данных и логгера.

0.12.3 - 2019-05-06

Изменения

  • [База данных] Теперь вы можете обновить схему случайного ID, импортировав import { setGenerator } from '@nozbe/watermelondb/utils/common/randomId' и затем вызвав setGenerator(newGenerator). Это позволяет WatermelonDB создавать конкретные ID, например, если ваш сервер использует UUID.
  • [Typescript] Улучшены типы для SQLiteAdapter и Database
  • [Тесты] удалена очистка для совместимости с react-hooks-testing-library@0.5.0

0.12.2 - 2019-04-19

Исправления

  • [TypeScript] 'Не удалось использовать оператор "in" для поиска "initializer"; исправление декоратора

Изменения- [База данных] Теперь вы можете передавать ложные значения в Database.batch(...) (false, null, undefined). Это полезно для поддержания чистого кода при выполнении операций условно. (Также работает с model.batch(...)).

  • [Декораторы]. Теперь вы можете использовать @action на методах любого объекта, который имеет свойство database: Database, и декораторы @field @children @date @relation @immutableRelation @json @text @nochange на любом объекте с свойством asModel: Model.
  • [Синхронизация] Добавлен временный/экспериментальный флаг _unsafeBatchPerCollection: true к synchronize(). Это приводит к тому, что изменения сервера будут применяться к базе данных в нескольких партиях, а не одной. Это НЕ рекомендуется по причинам надежности и производительности, но это помогает решить проблему памяти, которая может привести к аварийному завершению работы вашего приложения при очень больших синхронизациях (>20,000 записей). Используйте этот флаг только при необходимости. Обратите внимание, что эта опция может быть удалена в любое время, если будет найдено лучшее решение.## 0.12.1 - 2019-04-01

⚠️ Частичное исправление

  • [iOS] Исправлена ошибка времени выполнения при сборке с Xcode 10.2 (Swift 5 runtime).

    ⚠️ Примечание: Вам потребуется обновиться до версии React Native 0.59.3 для использования этого исправления. Если вы не можете обновиться до React Native сейчас, либо используйте Xcode 10.1, либо примените этот патч вручную: https://github.com/Nozbe/WatermelonDB/pull/302/commits/aa4e08ad0fa55f434da2a94407c51fc5ff18e506

Изменения

  • [Синхронизация] Добавлена базовая возможность логирования синхронизации. Передайте пустой объект в synchronize() для заполнения его диагностической информацией:
    const log = {}
    await synchronize({ database, log, ...})
    console.log(log.startedAt)
    См. документацию по синхронизации для более подробной информации.

0.12.0 - 2019-03-18

Добавлено

  • [Hooks] новый хук useDatabase для использования контекста базы данных:
    import { useDatabase } from '@nozbe/watermelondb/hooks'
    const Component = () => {
      const database = useDatabase()
    }
  • [TypeScript] добавлены файлы .d.ts. Обратите внимание: типы TypeScript в настоящее время неполные и должны использоваться только как руководство. Вклады по улучшению будут очень полезны!

Улучшение производительности

  • Улучшена производительность интерфейса пользователя путём объединения нескольких эмиссий наблюдений в одну эмиссию пакетной отправки для каждого коллектива при выполнении пакетных изменений## 0.11.0 - 2019-03-12

Нестабильные изменения

  • ⚠️ Возможное НЕСТАБИЛЬНОЕ исправление: поле с атрибутом @date теперь возвращает дату 1 января 1970 года вместо null, если значение поля в сыром виде равно 0. Это считается исправлением ошибки, так как неожиданно получать null от геттера поля, чья схема столбца не указывает на isOptional: true. Однако, если вы полагались на это поведение, это может быть нестабильным изменением.
  • ⚠️ НЕСТАБИЛЬНОЕ: метод Database.unsafeResetDatabase() теперь требует выполнения внутри транзакции

Исправления ошибок

  • [Синхронизация] Исправлено проблему, когда синхронизация продолжала работать, несмотря на вызов unsafeResetDatabase
  • [Android] исправлено ошибочное компилирование для Kotlin 1.3+

Другие изменения

  • Транзакции теперь прерываются при вызове unsafeResetDatabase(), что делает сброс базы данных немного безопаснее
  • Обновлены зависимости демонстрационного проекта
  • LokiJS стал зависимостью WatermelonDB (хотя он требуется только для работы в вебе)
  • [Android] удалён неиспользуемый тестовый класс
  • [Android] обновлен ktlint до версии 0.30.0

0.10.1 - 2019-02-12

Изменения- [Android] заменено compile на implementation в файле Gradle библиотеки

  • ⚠️ может сломать сборку, если используется Android Gradle Plugin <3.0
  • Обновлено peerDependency react-native до версии 0.57.0
  • [Синхронизация] добавлен метод помощник hasUnsyncedChanges()
  • [Синхронизация] улучшена документация для backend, которые не могут различать между created и updated записями
  • [Синхронизация] улучшены диагностика / защита от граничных случаев
  • [iOS] добавлен недостающий header search path для поддержки выбитого проекта Expo.
  • [Android] исправлено падение приложения на Android < 5.0
  • [iOS] путь dbName адаптера SQLiteAdapter теперь позволяет передавать абсолютный путь к файлу, а не имя
  • [Web] добавлен адаптивный макет для примера демонстрации с плавным скроллингом для iOS

0.10.0 - 2019-01-18### Критические изменения

  • КРИТИЧЕСКИЕ: Колонка таблицы last_modified больше не добавляется автоматически ко всем таблицам базы данных. Если вы не используете эту колонку (например, в вашем собственном коде синхронизации), вам ничего делать не нужно. Если же вы используете её, добавьте эту колонку вручную ко всем определениям таблиц в вашей схеме:
    { name: 'last_modified', type: 'number', isOptional: true }
    Не увеличивайте версию схемы или пишите миграцию для этого.

Новые возможности

  • API действий.

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

    Чтобы использовать действия, вызовите await database.action(async () => { /* выполните записи здесь */ }), а в методах экземпляров модели вы можете просто декорировать весь метод с помощью @action.

    Это необходимо для Watermelon Sync, а также для обеспечения большей безопасности и согласованности.

    Чтобы включить действия, добавьте actionsEnabled: true к new Database({ ... }). В будущих выпусках это будет включено по умолчанию, а затем сделано обязательным.

    Подробнее см. документацию.

  • Адаптер Watermelon Sync (Экспериментальный)Добавлена функция synchronize(), которая позволяет легко добавить полные возможности синхронизации к вашему приложению Watermelon. Вам нужно предоставить два запроса к вашему удалённому серверу, который соответствует протоколу синхронизации Watermelon, и вся клиентская обработка (применение удалённых изменений, разрешение конфликтов, поиск локальных изменений и пометка их как синхронизированных) выполняется Watermelon.Подробнее см. документацию.

  • Поддержка кэширования для локальных ID на уровне Native

0.9.0 - 2018-11-23

Новые возможности

  • Добавлен Q.like - теперь можно выполнять запросы, аналогичные SQL LIKE

0.8.0 - 2018-11-16

Новые возможности

  • Добавлен DatabaseProvider и withDatabase - высокоуровневый компонент для снижения передачи пропсов
  • Добавлен экспериментальный API действий. Это будет документировано в будущем выпуске.

Исправления

  • Исправлен сбой на старых целевых платформах Android React Native без установленного jsc-android

0.7.0 - 2018-10-31

Устаревшие возможности

  • [Схема] Тип колонки 'bool' устарел — замените на 'boolean'

Новые возможности

  • Добавлена поддержка миграций схемы. Подробнее см. документацию.
  • Добавлены основы для интеграции Danger с Jest

Изменения

  • Устранено предупреждение "dependency cycle"
  • [SQLite] Устранены редкие случаи, когда база данных могла остаться в неработоспособном состоянии (добавлен недостающий транзакт)
  • [Flow] Исправлены типы oneOf() и некоторые другие ошибки вариативности
  • [React Native] Приложение должно запускаться немного быстрее, так как схема компилируется теперь только по требованию
  • Исправлены опечатки в README.md
  • Обновлен Flow до версии 0.85

0.6.2 - 2018-10-04

Устаревшие возможности- Встроенный плагин Babel @nozbe/watermelondb/babel/cjs / @nozbe/watermelondb/babel/esm, поставляемый вместе с Watermelon, устарел и больше не требуется. Удалите его из конфигурации Babel, так как он будет удалён в будущих обновлениях### Переработка

  • Удалена зависимость от async (Web Worker должен стать примерно на 30КБ меньше)
  • Переработаны Collection и simpleObserver для получения изменений в массиве и также добавлены CollectionChangeTypes для различия между различными изменениями
  • Обновлены зависимости
  • Упрощена система сборки за счет использования относительных импортов
  • Упрощен пакет сборки за счет выгрузки только файлов CJS

0.6.1 - 2018-09-20

Добавлено

  • Добавлены интеграционные тесты для iOS и Android и проверки линтера в TravisCI

Изменено

  • Изменена настройка Flow для приложений, использующих Watermelon - см. docs/Advanced/Flow.md
  • Улучшена документация и демонстрационный код
  • Обновлены зависимости

Исправлено

  • Добавлены кавычки ко всем именам в SQL-запросах для возможности использования ключевых слов в качестве имен таблиц или столбцов
  • Исправлен запуск модульных тестов в приложениях с Watermelon в цикле
  • Исправлен Flow при использовании Watermelon в приложениях

0.6.0 - 2018-09-05

Первое издание WatermelonDB

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-WatermelonDB.git
git@api.gitlife.ru:oschina-mirror/mirrors-WatermelonDB.git
oschina-mirror
mirrors-WatermelonDB
mirrors-WatermelonDB
master