WiseLibs / better-sqlite3

The fastest and simplest library for SQLite3 in Node.js.
MIT License
5.23k stars 390 forks source link

Question mark placeholder not replace in drop index sql #1134

Closed mooring closed 5 months ago

mooring commented 5 months ago

question mark placeholder not replace in drop index sql

working copy

let Database = require('better-sqlite3')
let db   = new Database('./test.db', {verbose: console.log}) 
let sqls = [
    'create table if not exists test(id INTEGER PRIMARY KEY, content varchar(20) null)',
    'create index if not exists idx_test_content on test(content)'
]
sqls.forEach(i => db.prepare(i).run())
let sql = 'DROP INDEX IF EXISTS idx_test_content'
db.prepare(sql).run()

not working copy

let Database = require('better-sqlite3')
let db   = new Database('./test.db', {verbose: console.log}) 
let sqls = [
    'create table if not exists test(id INTEGER PRIMARY KEY, content varchar(20) null)',
    'create index if not exists idx_test_content on test(content)'
]
sqls.forEach(i => db.prepare(i).run())
let sql = 'DROP INDEX IF EXISTS ?'
db.prepare(sql).run('idx_test_content')

error message

return this[cppdb].prepare(sql, this, false);
                       ^
SqliteError: near "?": syntax error
    at Database.prepare (./node_modules/better-sqlite3/lib/methods/wrappers.js:5:21)

env and version

Prinzhorn commented 5 months ago

Placeholders cannot be used for table/index names. This is not specific to better-sqlite3.

JoshuaWise commented 5 months ago

This is not a bug. See here: https://github.com/WiseLibs/better-sqlite3/discussions/1132#discussioncomment-8289798