parent
a2ca11af78
commit
349eec3155
@ -1,80 +0,0 @@
|
|||||||
From da3306e443661f3a291367166ae3e2080acd5c45 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kenichi Ishigaki <ishigaki@cpan.org>
|
|
||||||
Date: Tue, 21 Nov 2017 03:25:30 +0900
|
|
||||||
Subject: [PATCH] added new index constraint ops introduced in SQLite 3.21.0 to
|
|
||||||
PerlData (GH#28)
|
|
||||||
|
|
||||||
---
|
|
||||||
dbdimp_virtual_table.inc | 12 ++++++++++++
|
|
||||||
lib/DBD/SQLite/VirtualTable/PerlData.pm | 18 +++++++++++++++++-
|
|
||||||
2 files changed, 29 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/dbdimp_virtual_table.inc b/dbdimp_virtual_table.inc
|
|
||||||
index 3dfb3c5..3f87619 100644
|
|
||||||
--- a/dbdimp_virtual_table.inc
|
|
||||||
+++ b/dbdimp_virtual_table.inc
|
|
||||||
@@ -194,6 +194,18 @@ _constraint_op_to_string(unsigned char op) {
|
|
||||||
return "GLOB";
|
|
||||||
case SQLITE_INDEX_CONSTRAINT_REGEXP:
|
|
||||||
return "REGEXP";
|
|
||||||
+#endif
|
|
||||||
+#if SQLITE_VERSION_NUMBER >= 3021000
|
|
||||||
+ case SQLITE_INDEX_CONSTRAINT_NE:
|
|
||||||
+ return "NE";
|
|
||||||
+ case SQLITE_INDEX_CONSTRAINT_ISNOT:
|
|
||||||
+ return "ISNOT";
|
|
||||||
+ case SQLITE_INDEX_CONSTRAINT_ISNOTNULL:
|
|
||||||
+ return "ISNOTNULL";
|
|
||||||
+ case SQLITE_INDEX_CONSTRAINT_ISNULL:
|
|
||||||
+ return "ISNULL";
|
|
||||||
+ case SQLITE_INDEX_CONSTRAINT_IS:
|
|
||||||
+ return "IS";
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return "unknown";
|
|
||||||
diff --git a/lib/DBD/SQLite/VirtualTable/PerlData.pm b/lib/DBD/SQLite/VirtualTable/PerlData.pm
|
|
||||||
index 8151fe1..697cd08 100644
|
|
||||||
--- a/lib/DBD/SQLite/VirtualTable/PerlData.pm
|
|
||||||
+++ b/lib/DBD/SQLite/VirtualTable/PerlData.pm
|
|
||||||
@@ -6,6 +6,7 @@ use warnings;
|
|
||||||
use base 'DBD::SQLite::VirtualTable';
|
|
||||||
use DBD::SQLite;
|
|
||||||
use constant SQLITE_3010000 => $DBD::SQLite::sqlite_version_number >= 3010000 ? 1 : 0;
|
|
||||||
+use constant SQLITE_3021000 => $DBD::SQLite::sqlite_version_number >= 3021000 ? 1 : 0;
|
|
||||||
|
|
||||||
# private data for translating comparison operators from Sqlite to Perl
|
|
||||||
my $TXT = 0;
|
|
||||||
@@ -23,6 +24,13 @@ my %SQLOP2PERLOP = (
|
|
||||||
'GLOB' => [ 'DBD::SQLite::strglob', 'DBD::SQLite::strglob' ],
|
|
||||||
'REGEXP'=> [ '=~', '=~' ],
|
|
||||||
) : ()),
|
|
||||||
+ (SQLITE_3021000 ? (
|
|
||||||
+ 'NE' => [ 'ne', '!=' ],
|
|
||||||
+ 'ISNOT' => [ 'defined', 'defined' ],
|
|
||||||
+ 'ISNOTNULL' => [ 'defined', 'defined' ],
|
|
||||||
+ 'ISNULL' => [ '!defined', '!defined' ],
|
|
||||||
+ 'IS' => [ '!defined', '!defined' ],
|
|
||||||
+ ) : ()),
|
|
||||||
);
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
@@ -101,7 +109,15 @@ sub BEST_INDEX {
|
|
||||||
$optype = $self->{optypes}[$col];
|
|
||||||
}
|
|
||||||
my $op = $SQLOP2PERLOP{$constraint->{op}}[$optype];
|
|
||||||
- if (SQLITE_3010000 && $op =~ /str/) {
|
|
||||||
+ if (SQLITE_3021000 && $op =~ /defined/) {
|
|
||||||
+ if ($constraint->{op} =~ /NULL/) {
|
|
||||||
+ push @conditions,
|
|
||||||
+ "($op($member))";
|
|
||||||
+ } else {
|
|
||||||
+ push @conditions,
|
|
||||||
+ "($op($member) && $op(\$vals[$ix]))";
|
|
||||||
+ }
|
|
||||||
+ } elsif (SQLITE_3010000 && $op =~ /str/) {
|
|
||||||
push @conditions,
|
|
||||||
"(defined($member) && defined(\$vals[$ix]) && !$op(\$vals[$ix], $member))";
|
|
||||||
} else {
|
|
||||||
--
|
|
||||||
2.14.3
|
|
||||||
|
|
@ -1 +1 @@
|
|||||||
SHA512 (DBD-SQLite-1.54.tar.gz) = a8daff59679973467dff80c013b6ff9d7229a505b62c0312bdf7f9288af64dcd2e99f889b66eb98103b0e6ac7a9b0fa7c9c517c5c2673ee7f84b3b6b5d26173e
|
SHA512 (DBD-SQLite-1.56.tar.gz) = 1c9be3557691f76a9e543fe4bd6656a6b82f53fba4bc05261a55affa0a38b4eaa1cf876da975234c9c09985ba25b21f6f7a735f1cc47104169edf7fdd3a2e314
|
||||||
|
Loading…
Reference in new issue