@ -3,6 +3,7 @@
## Schema Mapping
## Schema Mapping
### Current Dexie Schema
### Current Dexie Schema
```typescript
```typescript
// Current Dexie schema
// Current Dexie schema
const db = new Dexie('TimeSafariDB');
const db = new Dexie('TimeSafariDB');
@ -15,6 +16,7 @@ db.version(1).stores({
```
```
### New SQLite Schema
### New SQLite Schema
```sql
```sql
-- New SQLite schema
-- New SQLite schema
CREATE TABLE accounts (
CREATE TABLE accounts (
@ -50,6 +52,7 @@ CREATE INDEX idx_settings_updated_at ON settings(updated_at);
### 1. Account Operations
### 1. Account Operations
#### Get Account by DID
#### Get Account by DID
```typescript
```typescript
// Dexie
// Dexie
const account = await db.accounts.get(did);
const account = await db.accounts.get(did);
@ -62,6 +65,7 @@ const account = result[0]?.values[0];
```
```
#### Get All Accounts
#### Get All Accounts
```typescript
```typescript
// Dexie
// Dexie
const accounts = await db.accounts.toArray();
const accounts = await db.accounts.toArray();
@ -74,6 +78,7 @@ const accounts = result[0]?.values || [];
```
```
#### Add Account
#### Add Account
```typescript
```typescript
// Dexie
// Dexie
await db.accounts.add({
await db.accounts.add({
@ -91,6 +96,7 @@ await db.run(`
```
```
#### Update Account
#### Update Account
```typescript
```typescript
// Dexie
// Dexie
await db.accounts.update(did, {
await db.accounts.update(did, {
@ -109,6 +115,7 @@ await db.run(`
### 2. Settings Operations
### 2. Settings Operations
#### Get Setting
#### Get Setting
```typescript
```typescript
// Dexie
// Dexie
const setting = await db.settings.get(key);
const setting = await db.settings.get(key);
@ -121,6 +128,7 @@ const setting = result[0]?.values[0];
```
```
#### Set Setting
#### Set Setting
```typescript
```typescript
// Dexie
// Dexie
await db.settings.put({
await db.settings.put({
@ -142,6 +150,7 @@ await db.run(`
### 3. Contact Operations
### 3. Contact Operations
#### Get Contacts by Account
#### Get Contacts by Account
```typescript
```typescript
// Dexie
// Dexie
const contacts = await db.contacts
const contacts = await db.contacts
@ -159,6 +168,7 @@ const contacts = result[0]?.values || [];
```
```
#### Add Contact
#### Add Contact
```typescript
```typescript
// Dexie
// Dexie
await db.contacts.add({
await db.contacts.add({
@ -179,6 +189,7 @@ await db.run(`
## Transaction Mapping
## Transaction Mapping
### Batch Operations
### Batch Operations
```typescript
```typescript
// Dexie
// Dexie
await db.transaction('rw', [db.accounts, db.contacts], async () => {
await db.transaction('rw', [db.accounts, db.contacts], async () => {
@ -210,6 +221,7 @@ try {
## Migration Helper Functions
## Migration Helper Functions
### 1. Data Export (Dexie to JSON)
### 1. Data Export (Dexie to JSON)
```typescript
```typescript
async function exportDexieData(): Promise< MigrationData > {
async function exportDexieData(): Promise< MigrationData > {
const db = new Dexie('TimeSafariDB');
const db = new Dexie('TimeSafariDB');
@ -228,6 +240,7 @@ async function exportDexieData(): Promise<MigrationData> {
```
```
### 2. Data Import (JSON to absurd-sql)
### 2. Data Import (JSON to absurd-sql)
```typescript
```typescript
async function importToAbsurdSql(data: MigrationData): Promise< void > {
async function importToAbsurdSql(data: MigrationData): Promise< void > {
await db.exec('BEGIN TRANSACTION;');
await db.exec('BEGIN TRANSACTION;');
@ -264,6 +277,7 @@ async function importToAbsurdSql(data: MigrationData): Promise<void> {
```
```
### 3. Verification
### 3. Verification
```typescript
```typescript
async function verifyMigration(dexieData: MigrationData): Promise< boolean > {
async function verifyMigration(dexieData: MigrationData): Promise< boolean > {
// Verify account count
// Verify account count
@ -307,18 +321,21 @@ async function verifyMigration(dexieData: MigrationData): Promise<boolean> {
## Performance Considerations
## Performance Considerations
### 1. Indexing
### 1. Indexing
- Dexie automatically creates indexes based on the schema
- Dexie automatically creates indexes based on the schema
- absurd-sql requires explicit index creation
- absurd-sql requires explicit index creation
- Added indexes for frequently queried fields
- Added indexes for frequently queried fields
- Use `PRAGMA journal_mode=MEMORY;` for better performance
- Use `PRAGMA journal_mode=MEMORY;` for better performance
### 2. Batch Operations
### 2. Batch Operations
- Dexie has built-in bulk operations
- Dexie has built-in bulk operations
- absurd-sql uses transactions for batch operations
- absurd-sql uses transactions for batch operations
- Consider chunking large datasets
- Consider chunking large datasets
- Use prepared statements for repeated queries
- Use prepared statements for repeated queries
### 3. Query Optimization
### 3. Query Optimization
- Dexie uses IndexedDB's native indexing
- Dexie uses IndexedDB's native indexing
- absurd-sql requires explicit query optimization
- absurd-sql requires explicit query optimization
- Use prepared statements for repeated queries
- Use prepared statements for repeated queries
@ -327,6 +344,7 @@ async function verifyMigration(dexieData: MigrationData): Promise<boolean> {
## Error Handling
## Error Handling
### 1. Common Errors
### 1. Common Errors
```typescript
```typescript
// Dexie errors
// Dexie errors
try {
try {
@ -351,6 +369,7 @@ try {
```
```
### 2. Transaction Recovery
### 2. Transaction Recovery
```typescript
```typescript
// Dexie transaction
// Dexie transaction
try {
try {