mirror of
https://github.com/DBD-SQLite/DBD-SQLite
synced 2025-06-07 06:08:38 -04:00
let db_config allow new constants
This commit is contained in:
parent
3363414db3
commit
de43ac98af
2 changed files with 99 additions and 0 deletions
4
dbdimp.c
4
dbdimp.c
|
@ -2788,6 +2788,10 @@ sqlite_db_config(pTHX_ SV *dbh, int id, int new_value)
|
|||
case SQLITE_DBCONFIG_TRIGGER_EQP:
|
||||
case SQLITE_DBCONFIG_RESET_DATABASE:
|
||||
case SQLITE_DBCONFIG_DEFENSIVE:
|
||||
case SQLITE_DBCONFIG_WRITABLE_SCHEMA:
|
||||
case SQLITE_DBCONFIG_LEGACY_ALTER_TABLE:
|
||||
case SQLITE_DBCONFIG_DQS_DML:
|
||||
case SQLITE_DBCONFIG_DQS_DDL:
|
||||
rc = sqlite3_db_config(imp_dbh->db, id, new_value, &ret);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -215,4 +215,99 @@ SKIP: {
|
|||
like $@ => qr/table sqlite_master may not be modified/;
|
||||
}
|
||||
|
||||
# WRITABLE_SCHEMA
|
||||
for my $func (@CALL_FUNCS) {
|
||||
SKIP: {
|
||||
skip 'WRITABLE_SCHEMA is not supported', 5 if !SQLITE_DBCONFIG_WRITABLE_SCHEMA;
|
||||
my $dbh = connect_ok(RaiseError => 1, PrintError => 0);
|
||||
my $ret = $dbh->$func(SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, 'db_config');
|
||||
note "current WRITABLE_SCHEMA value: $ret";
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_WRITABLE_SCHEMA, 1, 'db_config');
|
||||
is $ret => 1, 'schema is writable';
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_WRITABLE_SCHEMA, 0, 'db_config');
|
||||
is $ret => 0, 'schema is not writable';
|
||||
|
||||
$dbh->do('PRAGMA writable_schema=ON');
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, 'db_config');
|
||||
is $ret => 1, 'schema is writable (by pragma)';
|
||||
|
||||
$dbh->do('PRAGMA writable_schema=OFF');
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_WRITABLE_SCHEMA, -1, 'db_config');
|
||||
is $ret => 0, 'schema is not writable (by pragma)';
|
||||
}
|
||||
}
|
||||
|
||||
# LEGACY_ALTER_TABLE
|
||||
for my $func (@CALL_FUNCS) {
|
||||
SKIP: {
|
||||
skip 'WRITABLE_SCHEMA is not supported', 5 if !SQLITE_DBCONFIG_LEGACY_ALTER_TABLE;
|
||||
my $dbh = connect_ok(RaiseError => 1, PrintError => 0);
|
||||
my $ret = $dbh->$func(SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, -1, 'db_config');
|
||||
note "current LEGACY_ALTER_TABLE value: $ret";
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, 1, 'db_config');
|
||||
is $ret => 1, 'use legacy alter table';
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, 0, 'db_config');
|
||||
is $ret => 0, 'no legacy alter table';
|
||||
|
||||
# TODO: add alter table check?
|
||||
|
||||
$dbh->do('PRAGMA legacy_alter_table=ON');
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, -1, 'db_config');
|
||||
is $ret => 1, 'use legacy alter table (by pragma)';
|
||||
|
||||
$dbh->do('PRAGMA legacy_alter_table=OFF');
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, -1, 'db_config');
|
||||
is $ret => 0, 'no legacy alter table (by pragma)';
|
||||
}
|
||||
}
|
||||
|
||||
# DQS_DML
|
||||
for my $func (@CALL_FUNCS) {
|
||||
SKIP: {
|
||||
skip 'DQS_DML is not supported', 5 if !SQLITE_DBCONFIG_DQS_DML;
|
||||
my $dbh = connect_ok(RaiseError => 1, PrintError => 0);
|
||||
my $ret = $dbh->$func(SQLITE_DBCONFIG_DQS_DML, -1, 'db_config');
|
||||
note "current DQS_DML value: $ret";
|
||||
$dbh->do('CREATE TABLE foo (id, text)');
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_DQS_DML, 1, 'db_config');
|
||||
is $ret => 1, 'allows double-quoted string literal';
|
||||
|
||||
eval { $dbh->do('INSERT INTO foo VALUES (1, "text")'); };
|
||||
ok !$@, "double-quoted string literal is allowed";
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_DQS_DML, 0, 'db_config');
|
||||
is $ret => 0, 'no double-quoted string literal';
|
||||
|
||||
eval { $dbh->do('INSERT INTO foo VALUES (2, "text2")'); };
|
||||
like $@ => qr/no such column/, "double-quoted string literal is not allowed";
|
||||
}
|
||||
}
|
||||
|
||||
# DQS_DDL
|
||||
for my $func (@CALL_FUNCS) {
|
||||
SKIP: {
|
||||
skip 'DQS_DDL is not supported', 5 if !SQLITE_DBCONFIG_DQS_DDL;
|
||||
my $dbh = connect_ok(RaiseError => 1, PrintError => 0);
|
||||
my $ret = $dbh->$func(SQLITE_DBCONFIG_DQS_DDL, -1, 'db_config');
|
||||
note "current DQS_DDL value: $ret";
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_DQS_DDL, 1, 'db_config');
|
||||
is $ret => 1, 'allows double-quoted string literal';
|
||||
|
||||
eval { $dbh->do('CREATE TABLE foo (a, b, c CHECK (c!="null") )'); };
|
||||
ok !$@, "double-quoted string literal is allowed";
|
||||
|
||||
$ret = $dbh->$func(SQLITE_DBCONFIG_DQS_DDL, 0, 'db_config');
|
||||
is $ret => 0, 'no double-quoted string literal';
|
||||
|
||||
eval { $dbh->do('CREATE TABLE bar (a, b, c CHECK (c!="null") )'); };
|
||||
like $@ => qr/no such column/, "double-quoted string literal is not allowed";
|
||||
}
|
||||
}
|
||||
|
||||
done_testing;
|
||||
|
|
Loading…
Add table
Reference in a new issue