@sqlm/sqlm
v0.0.2
Published
Sqlm is an SQLite wrapper to manage databases for mobile: inspirate by Realm
Downloads
2
Maintainers
Readme
WORK IN PROGRESS
Getting Started
Introduction
Sqlm is an SQLite wrapper to manage databases for mobile: inspirate by Realm
Installation
npm:
npm - @sqlm/sqlm
yarn:
yarn add @sqlm/sqlm
No linking requiered since there is no native modules.
Sqlm
Models
Sqlm use models statics to define table, column properties can be defined by SqlmType
(wich looks like PropTypes).
import SqlmTypes from "Sqlm-types";
class User {
get fullname() {
return `${this.firstname} ${this.lastname}`;
}
}
User.name = "User";
User.version = 1;
User.properties = {
id: SqlmTypes.string.isPrimary,
lastname: SqlmTypes.string,
firstname: SqlmTypes.string,
birthday: SqlmTypes.date
};
export default User;
Opening Database
Opening an Sqlite Database through Sqlm is done by calling the static open method on the Sqlm class with associated configuration object.
import Sqlm, { setSQLite } from "sqlm";
import { SQLite } from "expo";
import User from "./User";
setSQLite(SQLite); // Set which SQLite to use, it's could come from 'expo', 'expo-sqlite'.
const config = {
path: "db.sqlite", // Optional: Path and name of the DB.
models: [User] // Required available models for this instance.
};
Sqlm.open(config)
.then(sqlm => {
// ...have fun with your sqlm instance
})
.catch(error => {
// ...handle error as you wish
});
Writes
Creating
import User from "./User";
const update = true; // Optional: will update data, or throw an error if already exist.
const users = {
id: "1",
lastname: "Team",
firstname: "Sqlm",
birthday: new Date("2019-01-01")
};
sqlm.create(User, user, update);
Queries
Object queries
const users = sqlm
.from(User)
.where()
.column("lastname")
.beginWith("T")
.and.column("birthdate")
.before(Date.now())
.limit(1)
.getAll();
// getAll will give the whole result
// but it's will be replace with proxy, then iterator could access it lazy
Raw queries
Alternatively, you can still use raw query for SQlite, but used at your own risk, result won't be managed by Sqlm.
const query = "SELECT * FROM User";
const ResultSet = sqlm.executeQuery(query);
Features
KeyExtractor
List like Flatlist use keyExtractor to extract a unique key for a given item at the specified index. Key is used for caching and as the react key to track item re-ordering. The default extractor checks item.key
, then falls back to using the index, like React does.
To make things easier, Sqlm can handle it for you by adding a .key
to each items queried.
const enabled = true;
Sqlm.useKeyExtractor(enabled);
Alternatively, you can provide a custom keyExtractor.
const keyExtractor = (item, model, table) => {
// ...return the string to use by keyExtractor
};
Sqlm.setKeyExtractor(keyExtractor);
⚠️ useKeyExtractor
& setKeyExtractor
are overriding each other.