storesafe/cordova-sqlite-storage

Major release items

brodybits opened this issue · 3 comments

General

IMPORANT NOTICE: FEATURES SCHEDULED FOR REMOVAL FROM NEXT MAJOR RELEASE:

  • Deprecated "standard" transaction API ref: #720 (will continue to be supported by other plugin versions such as cordova-sqlite-ext and cordova-sqlite-evcore-extbuild-free)
  • Windows platform support (also will continue to be supported by other plugin versions such as cordova-sqlite-ext and cordova-sqlite-evcore-extbuild-free)

NOTE: As discussed here and in #720 it would be problematic to remove the deprecated "standard" transaction API and Windows platform support. I hope to deliver a new express plugin version using internal sqlite3 libraries on Android/iOS/macOS, with Windows platform support, external sqlite3 dependencies, and likely "standard" transaction API removed (#740) within the next couple months or so.

Other general items:

  • Test & document date/time handling along with pitfalls ref: #546
  • Verify that all items in #685 (upcoming minor release items) including "highly desired" items are done

Documentation

Should be documented in #685 (upcoming minor release items):

Possible carryover from #685:

Major release items:

  • Custom fork/build instructions ref: #558
  • More formal API description/documentation ref: #560

Testing

Possible carryover from #685 (upcoming minor release items):

  • Extremely large/small values ref: #627

Fixes & features

Should be fixed in #685 (upcoming minor release items):

  • Function to get database directory path ref: #680 (may be affected by #681: Database storage in arbitrary path Android/iOS/macOS/Windows)

Possible carryover from #685:

  • CREATE database if it does not exist should be optional ref: #212
  • Database storage in arbitrary path (Android/iOS/macOS/Windows) ref: #681
  • Deprecate other iOS database locations ref: #682
  • Use UTF-8 encoding for Windows ref: #652

Major release items:

  • Bind all numbers as REAL numbers ref: #684
  • Browser platform support ref: #297
  • auto-vacuum option ref: #646
  • Safer Android defaults ref: #671
  • Workaround for possible Android data loss (193) should be after every write ref: #672
  • Secure delete by default ref: #645
  • Drop support for deprecated Android pre-4.0 calls to resolve Deprecated API build warning ref: #611
  • Silently stops after first SQL statement in statement list (minor data loss risk), should report error instead ref: #551
  • Fix Windows 10 (UWP) platform version to run in background using web workers ref: #686

ADDED ITEMS:

  • Deprecate standard transaction mechanism ref: #690 (This may go along with the possible redesign discussed in #548.)
  • Plugin should reject attempts to execute BEGIN, COMMIT, or ROLLBACK.
  • Drop support for Android pre-4.0
  • Drop support for iOS pre-9.0 in testing & doc (iOS pre-9.0 is not supported by Cordova 7)
  • Change PRAGMA journal_mode setting to persist on all platform implementations ref: https://sqlite.org/pragma.html#pragma_journal_mode to minimize possible differences and possible ambiguities ref: storesafe/cordova-sqlite-storage-help#10 (comment) WILL NOT BE CHANGED: PRAGMA journal_mode is known to report delete in case of default android.database implementation (same as other platform implementations) on Android 8.1
  • Revisit @synchronized locks in iOS/macOS platform version
  • HIGHLY DESIRED to update SQLite version in new version of cordova-sqlite-storage/cordova-sqlite-ext/...; desired to match sqlite version used by SQLCipher

ADDED ITEMS FOR THIS PLUGIN VERSION ONLY:

  • Use built-in sqlite library on Android/iOS/macOS (planning to do this in a new express plugin version, at some point in the future)
  • Drop support for close and delete calls in this plugin version (support for close and delete calls will be maintained in other versions such as cordova-sqlite-ext and cordova-sqlite-evcore-extbuild-free) (close & delete calls are needed to support selfTest)
  • Drop iOS database location option (again this would continue to be supported in versions such as cordova-sqlite-ext and cordova-sqlite-evcore-extbuild-free)

ADDED FOR OTHER PLUGIN VERSIONS:

OTHER ADDED ITEMS FOR CONSIDERATION:

  • database.dispose() to dispose a single database handle, close database once all handle objects have been disposed
  • Drop Apache 2.0 license option for Android and Windows platforms, MIT only for all platforms
  • SQLITE_LOCKING_STYLE=1 seems to be automatically defined for Apple Darwin platforms (iOS/macOS), see if this would also work on Android/Windows
  • result set with Array [] access but must keep item() function for compatibility ref: #755

GENERAL ADDED DOCUMENTATION ITEM: MAJOR DOCUMENTATION CLEANUP NEEDED ref: storesafe/cordova-sqlite-storage-help#33 & #596 (comment)

TEST and DOCUMENT maximum record size ref: #474, #766

Timeline

At least 2-3 months, possibly longer due to existing backlog and other priority items. Hopefully in January or February 2018. GENERAL COMMENT: Priority goes to paid users. For more information please contact: sales@litehelpers.net

@brodybits Whats the reason to drop Windows platform support? Moving this out of this mainstream repo will greatly diminish this lib's usefulness as true cross-platform database. The windows version is working fine - so in general no need to change this (now)?

Moving this out of this mainstream repo will greatly diminish this lib's usefulness as true cross-platform database.

Thanks @mobidev111 for the feedback. I think I have to agree with you, despite the pain of maintaining support (additional system needed, dealing with VS issues, etc.) I also want to ensure that the common plugin JavaScript will work on all supported platforms, including Windows, without having to test on multiple plugin versions before releasing. So Windows support will stay in this plugin version, new express version will be delivered with Windows support and external sqlite3 library dependencies dropped when I get a chance (#740).

An additional item is that I may merge this plugin version together with cordova-sqlite-ext, as the basis for all other current plugin versions. This should simplify maintenance and support for most plugin users.