-
This directory contains source code for the SQLite "ICU" extension, an
integration of the "International Components for Unicode" library with
SQLite. Documentation follows.
1. Features
-
+
1.1 SQL Scalars upper() and lower()
1.2 Unicode Aware LIKE Operator
1.3 ICU Collation Sequences
1.4 SQL REGEXP Operator
-
+
2. Compilation and Usage
-
+
3. Bugs, Problems and Security Issues
-
+
3.1 The "case_sensitive_like" Pragma
3.2 The SQLITE_MAX_LIKE_PATTERN_LENGTH Macro
3.3 Collation Sequence Security Issue
1.1 SQL Scalars upper() and lower()
- SQLite's built-in implementations of these two functions only
+ SQLite's built-in implementations of these two functions only
provide case mapping for the 26 letters used in the English
language. The ICU based functions provided by this extension
- provide case mapping, where defined, for the full range of
+ provide case mapping, where defined, for the full range of
unicode characters.
ICU provides two types of case mapping, "general" case mapping and
http://www.icu-project.org/userguide/caseMappings.html
http://www.icu-project.org/userguide/posix.html#case_mappings
- To utilise "general" case mapping, the upper() or lower() scalar
+ To utilise "general" case mapping, the upper() or lower() scalar
functions are invoked with one argument:
upper('abc') -> 'ABC'
operator understands case equivalence for the 26 letters of the English
language alphabet. The implementation of LIKE included in this
extension uses the ICU function u_foldCase() to provide case
- independent comparisons for the full range of unicode characters.
+ independent comparisons for the full range of unicode characters.
The U_FOLD_CASE_DEFAULT flag is passed to u_foldCase(), meaning the
dotless 'I' character used in the Turkish language is considered
1.3 ICU Collation Sequences
- A special SQL scalar function, icu_load_collation() is provided that
+ A special SQL scalar function, icu_load_collation() is provided that
may be used to register ICU collation sequences with SQLite. It
- is always called with exactly two arguments, the ICU locale
+ is always called with exactly two arguments, the ICU locale
identifying the collation sequence to ICU, and the name of the
SQLite collation sequence to create. For example, to create an
SQLite collation sequence named "turkish" using Turkish language
australian_penpal_name TEXT COLLATE australian,
turkish_penpal_name TEXT COLLATE turkish
);
-
+
1.4 SQL REGEXP Operator
This extension provides an implementation of the SQL binary
and use it as a dynamically loadable SQLite extension. To do this
using gcc on *nix:
- gcc -fPIC -shared icu.c `pkg-config --libs --cflags icu-uc icu-io` \
+ gcc -fPIC -shared icu.c `pkg-config --libs --cflags icu-io` \
-o libSqliteIcu.so
You may need to add "-I" flags so that gcc can find sqlite3ext.h
loaded into sqlite in the same way as any other dynamically loadable
extension.
+ As of version 3.48, it can be enabled in the canonical build process
+ by passing one of --with-icu-config or --with-icu-ldflags to the
+ configure script, optionally together with --enable-icu-collations.
+ See the configure --help for more details.
+
3 BUGS, PROBLEMS AND SECURITY ISSUES
SQLITE_MAX_LIKE_PATTERN_LENGTH macro as the maximum length of a
pattern in bytes (irrespective of encoding). The default value is
defined in internal header file "limits.h".
-
- The ICU extension LIKE implementation suffers from the same
+
+ The ICU extension LIKE implementation suffers from the same
problem and uses the same solution. However, since the ICU extension
code does not include the SQLite file "limits.h", modifying
the default value therein does not affect the ICU extension.
The default value of SQLITE_MAX_LIKE_PATTERN_LENGTH used by
- the ICU extension LIKE operator is 50000, defined in source
+ the ICU extension LIKE operator is 50000, defined in source
file "icu.c".
3.3 Collation Sequence Security
-C Improvements\sto\ssqlite3ExprImpliesExpr()\sso\sthat\sit\srecognizes\sthat\sexpressions\slike\s"iif(X,Y)"\sand\s"CASE\sWHEN\sX\sTHEN\sY\sEND"\simply\sX.
-D 2024-11-28T11:52:18.714
+C ext/icu/README.txt:\sclean\sup\sEOL\swhitespace\sand\sadd\sa\smention\sof\sthe\s--with-icu-...\sconfigure\sflags\savailable\sas\sof\sversion\s3.48.
+D 2024-11-28T15:52:21.879
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
F ext/fts5/tool/loadfts5.tcl 95b03429ee6b138645703c6ca192c3ac96eaf093
F ext/fts5/tool/mkfts5c.tcl 135b9e160f8e10211c10c5873d5e8c3eaebd3da9ec56a12ae4db157d4738ffe4
F ext/fts5/tool/showfts5.tcl d54da0e067306663e2d5d523965ca487698e722c
-F ext/icu/README.txt 7ab7ced8ae78e3a645b57e78570ff589d4c672b71370f5aa9e1cd7024f400fc9
+F ext/icu/README.txt 1f8d76e10d2385fc77914a14ccd99acfbaf68111dfcf26a360ad9063787f57fb
F ext/icu/icu.c 9837f4611915baad1edbe38222f3ee7d1b5e118ab16fec9ba603720f72c78b2a
F ext/icu/sqliteicu.h fa373836ed5a1ee7478bdf8a1650689294e41d0c89c1daab26e9ae78a32075a8
F ext/intck/intck1.test f3a3cba14b6aeff145ffa5515546dd22f7510dad91512e519f43b92b56514012
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P ec3ca6f17972a9624018ae352e5a4be8dc34602a4569c80e827e09cd7fbed7f7 f79cb748c9447ca4d2184a24219feb19571eb79870e0bedf14704743a3d5f8b9
-R 2a463ba8c7e54a6e85c2163c1e1ce03b
-T +closed f79cb748c9447ca4d2184a24219feb19571eb79870e0bedf14704743a3d5f8b9
-U drh
-Z d7886908d3bdbdc117a1626da09a8266
+P eb5ac9e5b9a4f9c85a2203107697da14c07c1667037dff672f9d786cea964a37
+R 78a02244626590a5fbc0925d20e4f240
+U stephan
+Z fdab33deaf1f469df2a1f2ef0d0eef73
# Remove this line to create a well-formed Fossil manifest.