Skip to content

Commit

Permalink
fix(sqlite): create, update using params, fix tests (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
Hieuzest authored Dec 5, 2023
1 parent 3ec3436 commit 618884b
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 25 deletions.
2 changes: 1 addition & 1 deletion packages/postgres/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ function getTypeDef(field: Field & { autoInc?: boolean }) {
def += `VARCHAR(${length || 255})`
if (!isNullable(initial)) def += ` DEFAULT '${initial.replace(/'/g, "''")}'`
} else if (type === 'text') {
def += `VARCHAR(${length || 65535})`
def += `TEXT`
if (!isNullable(initial)) def += ` DEFAULT '${initial.replace(/'/g, "''")}'`
} else if (type === 'boolean') {
def += 'BOOLEAN'
Expand Down
8 changes: 4 additions & 4 deletions packages/sqlite/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,10 +372,10 @@ export class SQLiteDriver extends Driver {
const modified = !deepEqual(clone(data), executeUpdate(data, update, ref))
if (!modified) return 0
const row = this.sql.dump(model, data)
const assignment = updateFields.map((key) => `${escapeId(key)} = ${this.sql.escape(row[key])}`).join(',')
const assignment = updateFields.map((key) => `${escapeId(key)} = ?`).join(',')
const query = Object.fromEntries(indexFields.map(key => [key, row[key]]))
const filter = this.sql.parseQuery(query)
this.#run(`UPDATE ${escapeId(table)} SET ${assignment} WHERE ${filter}`)
this.#run(`UPDATE ${escapeId(table)} SET ${assignment} WHERE ${filter}`, updateFields.map((key) => row[key]))
return 1
}

Expand All @@ -398,8 +398,8 @@ export class SQLiteDriver extends Driver {
const model = this.model(table)
data = this.sql.dump(model, data)
const keys = Object.keys(data)
const sql = `INSERT INTO ${escapeId(table)} (${this.#joinKeys(keys)}) VALUES (${keys.map(key => this.sql.escape(data[key])).join(', ')})`
return this.#run(sql, [], () => this.#get(`SELECT last_insert_rowid() AS id`))
const sql = `INSERT INTO ${escapeId(table)} (${this.#joinKeys(keys)}) VALUES (${Array(keys.length).fill('?').join(', ')})`
return this.#run(sql, keys.map(key => data[key]), () => this.#get(`SELECT last_insert_rowid() AS id`))
}

async create(sel: Selection.Mutable, data: {}) {
Expand Down
32 changes: 16 additions & 16 deletions packages/tests/src/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ namespace TransactionOperations {
return data.id
})
await expect(database.withTransaction(async (database) => {
await expect(database.set('temptx', {
await database.set('temptx', {
$or: [
{ id: magicIds },
{ timestamp: magicBorn },
],
}, { list: ['2', '3', '3'] })).to.eventually.have.shape({ matched: 3 })
}, { list: ['2', '3', '3'] })
await expect(database.get('temptx', {})).to.eventually.have.shape(table)
})).to.be.fulfilled
await expect(database.get('temptx', {})).to.eventually.have.shape(table)
Expand All @@ -101,7 +101,7 @@ namespace TransactionOperations {
{ id: table[table.length - 1].id + 2, text: 'by\'tower' },
]
table.push(...data.map(bar => merge(database.tables.temptx.create(), bar)))
await expect(database.upsert('temptx', data)).to.eventually.have.shape({ inserted: 2, matched: 0 })
await database.upsert('temptx', data)
})).to.be.fulfilled
await expect(database.get('temptx', {})).to.eventually.have.length(9)
})
Expand All @@ -116,11 +116,11 @@ namespace TransactionOperations {
expect(data9).to.be.undefined
table.push({ id: 9, num: 999 })
await expect(database.withTransaction(async (database) => {
await expect(database.upsert('temptx', row => [
await database.upsert('temptx', row => [
{ id: 2, num: $.multiply(2, row.id) },
{ id: 3, num: $.add(3, row.num) },
{ id: 9, num: 999 },
])).to.eventually.have.shape({ inserted: 1, matched: 2 })
])
await expect(database.get('temptx', {})).to.eventually.have.shape(table)
})).to.be.fulfilled
await expect(database.get('temptx', {})).to.eventually.have.shape(table)
Expand All @@ -129,11 +129,11 @@ namespace TransactionOperations {
it('remove', async () => {
await setup(database, 'temptx', barTable)
await expect(database.withTransaction(async (database) => {
await expect(database.remove('temptx', { id: 2 })).to.eventually.deep.equal({ removed: 1 })
await database.remove('temptx', { id: 2 })
await expect(database.get('temptx', {})).eventually.length(6)
await expect(database.remove('temptx', { id: 2 })).to.eventually.deep.equal({ removed: 0 })
await database.remove('temptx', { id: 2 })
await expect(database.get('temptx', {})).eventually.length(6)
await expect(database.remove('temptx', {})).to.eventually.deep.equal({ removed: 6 })
await database.remove('temptx', {})
await expect(database.get('temptx', {})).eventually.length(0)
})).to.be.fulfilled
await expect(database.get('temptx', {})).eventually.length(0)
Expand Down Expand Up @@ -167,12 +167,12 @@ namespace TransactionOperations {
return data.id
})
await expect(database.withTransaction(async (database) => {
await expect(database.set('temptx', {
await database.set('temptx', {
$or: [
{ id: magicIds },
{ timestamp: magicBorn },
],
}, { list: ['2', '3', '3'] })).to.eventually.have.shape({ matched: 3 })
}, { list: ['2', '3', '3'] })
await expect(database.get('temptx', {})).to.eventually.have.shape(table)
throw new Error('oops')
})).to.be.rejected
Expand All @@ -188,7 +188,7 @@ namespace TransactionOperations {
{ id: table[table.length - 1].id + 2, text: 'by\'tower' },
]
table.push(...data.map(bar => merge(database.tables.temptx.create(), bar)))
await expect(database.upsert('temptx', data)).to.eventually.have.shape({ inserted: 2, matched: 0 })
await database.upsert('temptx', data)
throw new Error('oops')
})).to.be.rejected
await expect(database.get('temptx', {})).to.eventually.have.length(0)
Expand All @@ -204,11 +204,11 @@ namespace TransactionOperations {
expect(data9).to.be.undefined
table.push({ id: 9, num: 999 })
await expect(database.withTransaction(async (database) => {
await expect(database.upsert('temptx', row => [
await database.upsert('temptx', row => [
{ id: 2, num: $.multiply(2, row.id) },
{ id: 3, num: $.add(3, row.num) },
{ id: 9, num: 999 },
])).to.eventually.have.shape({ inserted: 1, matched: 2 })
])
await expect(database.get('temptx', {})).to.eventually.have.shape(table)
throw new Error('oops')
})).to.be.rejected
Expand All @@ -218,11 +218,11 @@ namespace TransactionOperations {
it('remove', async () => {
await setup(database, 'temptx', barTable)
await expect(database.withTransaction(async (database) => {
await expect(database.remove('temptx', { id: 2 })).to.eventually.deep.equal({ removed: 1 })
await database.remove('temptx', { id: 2 })
await expect(database.get('temptx', {})).eventually.length(6)
await expect(database.remove('temptx', { id: 2 })).to.eventually.deep.equal({ removed: 0 })
await database.remove('temptx', { id: 2 })
await expect(database.get('temptx', {})).eventually.length(6)
await expect(database.remove('temptx', {})).to.eventually.deep.equal({ removed: 6 })
await database.remove('temptx', {})
await expect(database.get('temptx', {})).eventually.length(0)
throw new Error('oops')
})).to.be.rejected
Expand Down
30 changes: 26 additions & 4 deletions packages/tests/src/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ interface Bar {
timestamp?: Date
date?: Date
time?: Date
bigtext?: string
}

interface Baz {
Expand All @@ -34,6 +35,7 @@ function OrmOperations(database: Database<Tables>) {
timestamp: 'timestamp',
date: 'date',
time: 'time',
bigtext: 'text',
}, {
autoInc: true,
})
Expand Down Expand Up @@ -122,6 +124,12 @@ namespace OrmOperations {
expect(ids.map(id => id - min + 1)).shape([1, 2, 3, 4, 5])
await database.remove('temp2', {})
})

it('enormous field', async () => {
const row = { id: 100, bigtext: Array(1000000).fill('a').join('') }
await database.create('temp2', row)
await expect(database.get('temp2', 100)).to.eventually.have.nested.property('0.bigtext', row.bigtext)
})
}

export const set = function Set(database: Database<Tables>) {
Expand Down Expand Up @@ -161,6 +169,13 @@ namespace OrmOperations {
}))
await expect(database.get('temp2', {})).to.eventually.have.shape(table)
})

it('enormous field', async () => {
const row = await database.create('temp2', {})
row.bigtext = Array(1000000).fill('a').join('')
await database.set('temp2', row.id, { bigtext: row.bigtext })
await expect(database.get('temp2', row.id)).to.eventually.have.nested.property('0.bigtext', row.bigtext)
})
}

export const upsert = function Upsert(database: Database<Tables>) {
Expand Down Expand Up @@ -230,18 +245,25 @@ namespace OrmOperations {
])
await expect(database.get('temp3', {})).to.eventually.have.deep.members(table)
})

it('enormous field', async () => {
const row = await database.create('temp2', {})
row.bigtext = Array(1000000).fill('a').join('')
await database.upsert('temp2', [row])
await expect(database.get('temp2', row.id)).to.eventually.have.nested.property('0.bigtext', row.bigtext)
})
}

export const remove = function Remove(database: Database<Tables>) {
it('basic support', async () => {
await setup(database, 'temp3', bazTable)
await expect(database.remove('temp3', { ida: 1, idb: 'a' })).to.eventually.deep.equal({ removed: 1 })
await expect(database.remove('temp3', { ida: 1, idb: 'a' })).to.eventually.have.shape({ matched: 1 })
await expect(database.get('temp3', {})).eventually.length(3)
await expect(database.remove('temp3', { ida: 1, idb: 'b', value: 'b' })).to.eventually.deep.equal({ removed: 0 })
await expect(database.remove('temp3', { ida: 1, idb: 'b', value: 'b' })).to.eventually.have.shape({ matched: 0 })
await expect(database.get('temp3', {})).eventually.length(3)
await expect(database.remove('temp3', { idb: 'b' })).to.eventually.deep.equal({ removed: 2 })
await expect(database.remove('temp3', { idb: 'b' })).to.eventually.have.shape({ matched: 2 })
await expect(database.get('temp3', {})).eventually.length(1)
await expect(database.remove('temp3', {})).to.eventually.deep.equal({ removed: 1 })
await expect(database.remove('temp3', {})).to.eventually.have.shape({ matched: 1 })
await expect(database.get('temp3', {})).eventually.length(0)
})

Expand Down

0 comments on commit 618884b

Please sign in to comment.