Drizzle <> OP SQLite
**공식 GitHub 페이지**에 따르면, OP-SQLite는 최신 버전의 SQLite를 내장하고 SQL 쿼리를 실행할 수 있는 저수준 API를 제공합니다.
npm
yarn
pnpm
bun
npm i drizzle-orm @op-engineering/op-sqlite
npm i -D drizzle-kit
import { drizzle } from "drizzle-orm/op-sqlite";
import { open } from '@op-engineering/op-sqlite';
const opsqlite = open({
name: 'myDB',
});
const db = drizzle(opsqlite);
await db.select().from(users);SQL 마이그레이션 생성을 위해 Drizzle Kit을 사용할 수 있습니다. 진행하기 전에 Drizzle Kit 마이그레이션 작동 방식을 확인하세요. OP SQLite는 앱에 SQL 마이그레이션을 번들로 포함해야 하며, 이를 위한 방법을 제공합니다.
Babel 플러그인 설치
SQL 마이그레이션 파일을 문자열로 번들에 직접 포함하려면 이 플러그인이 필요합니다.
npm install babel-plugin-inline-import설정 파일 업데이트
babel.config.js, metro.config.js, drizzle.config.ts 파일을 업데이트해야 합니다.
module.exports = {
presets: ['module:@react-native/babel-preset'],
plugins: [
[
'inline-import',
{
extensions: ['.sql'],
},
],
],
};const { getDefaultConfig } = require('@react-native/metro-config');
const config = getDefaultConfig(__dirname);
config.resolver.sourceExts.push('sql');
module.exports = config;Drizzle Kit 설정에 dialect: 'sqlite'와 driver: 'expo'를 포함해야 합니다.
import { defineConfig } from 'drizzle-kit';
export default defineConfig({
schema: './db/schema.ts',
out: './drizzle',
dialect: 'sqlite',
driver: 'expo', // <--- very important
});마이그레이션 생성
SQL 스키마 파일과 drizzle.config.ts 파일을 생성한 후 마이그레이션을 생성할 수 있습니다.
npx drizzle-kit generate앱에 마이그레이션 추가
이제 ./drizzle 폴더에서 Expo/React Native 앱으로 migrations.js 파일을 임포트해야 합니다.
애플리케이션 시작 시 커스텀 useMigrations 훅을 사용하거나 원하는 대로 useEffect 훅에서 수동으로 마이그레이션을 실행할 수 있습니다.
import { drizzle } from "drizzle-orm/op-sqlite";
import { open } from '@op-engineering/op-sqlite';
import { useMigrations } from 'drizzle-orm/op-sqlite/migrator';
import migrations from './drizzle/migrations';
const opsqliteDb = open({
name: 'myDB',
});
const db = drizzle(opsqliteDb);
export default function App() {
const { success, error } = useMigrations(db, migrations);
if (error) {
return (
<View>
<Text>Migration error: {error.message}</Text>
</View>
);
}
if (!success) {
return (
<View>
<Text>Migration is in progress...</Text>
</View>
);
}
return ...your application component;
}