0.0.2 • Published 5 years ago

@sqlm/sqlm v0.0.2

Weekly downloads
1
License
MIT
Repository
github
Last release
5 years ago

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.