/*
** Return the length of a string in display characters.
-** Multibyte UTF8 characters count as a single character
-** for single-width characters, or as two characters for
-** double-width characters.
+**
+** Most characters of the input string count as 1, including
+** multi-byte UTF8 characters. However, zero-width unicode
+** characters and VT100 escape sequences count as zero, and
+** double-width characters count as two.
+**
+** The definition of "zero-width" and "double-width" characters
+** is not precise. It depends on the output device, to some extent,
+** and it varies according to the Unicode version. This routine
+** makes the best guess that it can.
*/
-static int qrfDisplayLength(const char *zIn){
+size_t sqlite3_qrf_wcswidth(const char *zIn){
const unsigned char *z = (const unsigned char*)zIn;
- int n = 0;
+ size_t n = 0;
while( *z ){
if( z[0]<' ' ){
int k;
int len;
if( i==nArg-1 ) w = 0;
if( zVal==0 ) zVal = "";
- len = qrfDisplayLength(zVal);
+ len = (int)sqlite3_qrf_wcswidth(zVal);
if( len>w ){
w = len;
zSep = " ";
int sz;
p->u.sLine.azCol[i] = sqlite3_column_name(p->pStmt, i);
if( p->u.sLine.azCol[i]==0 ) p->u.sLine.azCol[i] = "unknown";
- sz = qrfDisplayLength(p->u.sLine.azCol[i]);
+ sz = (int)sqlite3_qrf_wcswidth(p->u.sLine.azCol[i]);
if( sz > p->u.sLine.mxColWth ) p->u.sLine.mxColWth = sz;
}
}
** character c. For normal characters, the answer is always 1. But the
** estimate might be 0 or 2 for zero-width and double-width characters.
**
-** Different display devices display unicode using different widths. So
+** Different devices display unicode using different widths. So
** it is impossible to know that true display width with 100% accuracy.
** Inaccuracies in the width estimates might cause columns to be misaligned.
** Unfortunately, there is nothing we can do about that.
*/
int sqlite3_qrf_wcwidth(int c);
+/*
+** Return an estimate of the number of display columns used by the
+** string in the argument. The width of individual characters is
+** determined as for sqlite3_qrf_wcwidth(). VT100 escape code sequences
+** are assigned a width of zero.
+*/
+size_t sqlite3_qrf_wcswidth(const char*);
+
#ifdef __cplusplus
}
-C Fix\sa\sharmless\scompiler\swarning\sin\sthe\sprevious\scheck-in.
-D 2025-12-02T15:01:29.826
+C New\stest\scases\sfor\sQRF
+D 2025-12-02T18:37:49.618
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
F ext/qrf/README.md 86fc5c3c5e3eddbe54fc1235cbdc52b8c2c0732791d224345c3014cd45c4c0e7
F ext/qrf/dev-notes.md e68a6d91ce4c7eb296ef2daadc2bb79c95c317ad15b9fafe40850c67b29c2430
-F ext/qrf/qrf.c 425d02cffcc5b5fe9ff5817794bf751b1fdd6912f570c354272429ce1262b866
-F ext/qrf/qrf.h 322d48537a5aa39c206c2ec0764a7938ea7662a8c25be1c4e9d742789609ba1e
+F ext/qrf/qrf.c c50368ea2be3ab67bd6698d8b34bf70210d3fbf6b3659ed328543e5ec8d69eff
+F ext/qrf/qrf.h 2cd7bd43579c522d3ae5c16034c7fdf41085684189811ae8e18ebc932a1cc79f
F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
F ext/rbu/rbu10.test 7c22caa32c2ff26983ca8320779a31495a6555737684af7aba3daaf762ef3363
F src/sqliteLimit.h 0a5516b4ec192a205c541e05f67009028a9451dc6678aae4cf8e68596903c246
F src/status.c 7565d63a79aa2f326339a24a0461a60096d0bd2bce711fefb50b5c89335f3592
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
-F src/tclsqlite.c ec2ad3fbf5390c3d4307bc9d1f2a37a9c5d726b5309769dc770ab37f6812152d
+F src/tclsqlite.c 4b6f6b142b951a8a127e0cbd2e37284fc71f8e6a391ec8c6188fb831b51ec0b8
F src/tclsqlite.h 614b3780a62522bc9f8f2b9fb22689e8009958e7aa77e572d0f3149050af348a
F src/test1.c 0e71fbcb484a271564e98e0158192c28c24f5521594218c3ba48bcb4cf634f91
F src/test2.c 62f0830958f9075692c29c6de51b495ae8969e1bef85f239ffcd9ba5fb44a5ff
F test/qrf02.test 39b4afdc000bedccdafc0aecf17638df67a67aaa2d2942865ae6abcc48ba0e92
F test/qrf03.test ad7fa339fb46b26b08625f3a77a4827bdee9f0dad402d8ddc1fcb8f05aa64a54
F test/qrf04.test 0894692c998d2401dcc33449c02051b503ecce0c94217be54fb007c82d2d1379
+F test/qrf05.test 8ade5bfa7ef0b448e531687203fa8ae9ef41f1d7e4c11d5ba0c4846af75b13d5
+F test/qrf06.test 60ee6a77955a28ff7ab4e418ea71ca7ab8d24d993783a46ec0f7f4223174fabd
F test/queryonly.test 5f653159e0f552f0552d43259890c1089391dcca
F test/quick.test 1681febc928d686362d50057c642f77a02c62e57
F test/quickcheck.test a4b7e878cd97e46108291c409b0bf8214f29e18fddd68a42bc5c1375ad1fb80a
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P c872bd1ee7b219e055f40e43766e4ed6bc2d2ca8cb92577cd3560f4173b1f257
-R c46cfff780eeed3878512057a17d323b
+P 601c40a1d9e1bcd9c453210c275001543d1533af25b4ccf399d5ef4ea1328950
+R db3be16f518798aa64811be276402ae9
U drh
-Z 089d78bdb228ed07162c6c905e40e2c9
+Z c58c2647d0ec0d77cab1c57aa88aaed0
# Remove this line to create a well-formed Fossil manifest.
-601c40a1d9e1bcd9c453210c275001543d1533af25b4ccf399d5ef4ea1328950
+e49c63e31888c6787ab13f736d58ff985a24c3f98b475e05c30e8b244afffb80
}else if( strcmp(zArg,"-null")==0 ){
qrf.zNull = Tcl_GetString(objv[i+1]);
i++;
+ }else if( strcmp(zArg,"-version")==0 ){
+ /* Undocumented. Testing use only */
+ qrf.iVersion = atoi(Tcl_GetString(objv[i+1]));
+ i++;
}else{
Tcl_AppendResult(pDb->interp, "unknown option: ", zArg, (char*)0);
rc = TCL_ERROR;
--- /dev/null
+# 2025-12-02
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# Test cases for the Query Result Formatter (QRF)
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix qrf05
+
+do_execsql_test 1.0 {
+ CREATE TABLE t1(a INT NOT NULL);
+}
+do_test 1.1 {
+ set rc [catch {db format -style list \
+ {INSERT INTO t1 VALUES(123) RETURNING *}} msg]
+ list $rc [string trim $msg]
+} {0 123}
+do_test 1.2 {
+ set rc [catch {db format -style list \
+ {INSERT INTO t1 VALUES(NULL) RETURNING *}} msg]
+ list $rc [string trim $msg]
+} {1 {NOT NULL constraint failed: t1.a}}
+do_test 1.3 {
+ set rc [catch {db format -version 99 {SELECT * FROM t1}} msg]
+ list $rc [string trim $msg]
+} {1 {unusable sqlite3_qrf_spec.iVersion (99)}}
+
+finish_test
--- /dev/null
+# 2025-12-02
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# Test cases for the Query Result Formatter (QRF), and especially
+# the sqlite3_qrf_wcwidth() function and its utilization.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix qrf06
+
+# Data
+db eval {
+ BEGIN TRANSACTION;
+ CREATE TABLE language(name TEXT);
+ INSERT INTO language(name) VALUES
+ ('العربية'),
+ ('Deutsch'),
+ ('English'),
+ ('Español'),
+ ('فارسی'),
+ ('Français'),
+ ('Italiano'),
+ ('مصرى'),
+ ('Nederlands'),
+ ('日本語'),
+ ('Polski'),
+ ('Português'),
+ ('Sinugboanong Binisaya'),
+ ('Svenska'),
+ ('Українська'),
+ ('Tiếng Việt'),
+ ('Winaray'),
+ ('中文'),
+ ('Русский'),
+ ('Afrikaans'),
+ ('Shqip'),
+ ('Asturianu'),
+ ('Azərbaycanca'),
+ ('Български'),
+ ('閩南語 / Bân-lâm-gú'),
+ ('বাংলা'),
+ ('Беларуская'),
+ ('Català'),
+ ('Čeština'),
+ ('Cymraeg'),
+ ('Dansk'),
+ ('Eesti'),
+ ('Ελληνικά'),
+ ('Esperanto'),
+ ('Euskara'),
+ ('Galego'),
+ ('한국어'),
+ ('Հայերեն'),
+ ('हिन्दी'),
+ ('Hrvatski'),
+ ('Bahasa Indonesia'),
+ ('עברית'),
+ ('ქართული'),
+ ('Ladin'),
+ ('Latina'),
+ ('Latviešu'),
+ ('Lietuvių'),
+ ('Magyar'),
+ ('Македонски'),
+ ('Malagasy'),
+ ('मराठी'),
+ ('Bahasa Melayu'),
+ ('Bahaso Minangkabau'),
+ ('မြန်မာဘာသာ'),
+ ('Norskbokmålnynorsk'),
+ ('Нохчийн'),
+ ('Oʻzbekcha / Ўзбекча'),
+ ('Қазақша / Qazaqşa / قازاقشا'),
+ ('Română'),
+ ('Simple English'),
+ ('Slovenčina'),
+ ('Slovenščina'),
+ ('Српски / Srpski'),
+ ('Srpskohrvatski / Српскохрватски'),
+ ('Suomi'),
+ ('Kiswahili'),
+ ('தமிழ்'),
+ ('Татарча / Tatarça'),
+ ('తెలుగు'),
+ ('ภาษาไทย'),
+ ('Тоҷикӣ'),
+ ('تۆرکجه'),
+ ('Türkçe'),
+ ('اردو'),
+ ('粵語'),
+ ('Bahsa Acèh'),
+ ('Alemannisch'),
+ ('አማርኛ'),
+ ('Aragonés'),
+ ('Արեւմտահայերէն'),
+ ('Bahasa Hulontalo'),
+ ('Basa Bali'),
+ ('Bahasa Banjar'),
+ ('Basa Banyumasan'),
+ ('Башҡортса'),
+ ('Беларуская (тарашкевіца)'),
+ ('Bikol Central'),
+ ('বিষ্ণুপ্রিয়া মণিপুরী'),
+ ('Boarisch'),
+ ('Bosanski'),
+ ('Brezhoneg'),
+ ('Чӑвашла'),
+ ('Dagbanli'),
+ ('الدارجة'),
+ ('Diné Bizaad'),
+ ('Emigliàn–Rumagnòl'),
+ ('Fiji Hindi'),
+ ('Føroyskt'),
+ ('Frysk'),
+ ('Fulfulde'),
+ ('Gaeilge'),
+ ('Gàidhlig'),
+ ('گیلکی'),
+ ('ગુજરાતી'),
+ ('Hak-kâ-ngî / 客家語'),
+ ('Hausa'),
+ ('Hornjoserbsce'),
+ ('Ido'),
+ ('Igbo'),
+ ('Ilokano'),
+ ('Interlingua'),
+ ('Interlingue'),
+ ('Ирон'),
+ ('Íslenska'),
+ ('Jawa'),
+ ('ಕನ್ನಡ'),
+ ('Kapampangan'),
+ ('ភាសាខ្មែរ'),
+ ('Kotava'),
+ ('Kreyòl Ayisyen'),
+ ('Kurdî / كوردی'),
+ ('کوردیی ناوەندی'),
+ ('Кыргызча'),
+ ('Кырык мары'),
+ ('Lëtzebuergesch'),
+ ('Lìgure'),
+ ('Limburgs'),
+ ('Lombard'),
+ ('मैथिली'),
+ ('മലയാളം'),
+ ('მარგალური'),
+ ('مازِرونی'),
+ ('Mìng-dĕ̤ng-ngṳ̄ / 閩東語'),
+ ('Монгол'),
+ ('Napulitano'),
+ ('नेपाल भाषा'),
+ ('Nordfriisk'),
+ ('Occitan'),
+ ('Олык марий'),
+ ('ଓଡି଼ଆ'),
+ ('অসমীযা়'),
+ ('ਪੰਜਾਬੀ'),
+ ('پنجابی (شاہ مکھی)'),
+ ('پښتو'),
+ ('Piemontèis'),
+ ('Plattdüütsch'),
+ ('Qaraqalpaqsha'),
+ ('Qırımtatarca'),
+ ('Runa Simi'),
+ ('Русиньскый'),
+ ('संस्कृतम्'),
+ ('ᱥᱟᱱᱛᱟᱲᱤ'),
+ ('سرائیکی'),
+ ('Саха Тыла'),
+ ('Scots'),
+ ('ChiShona'),
+ ('Sicilianu'),
+ ('සිංහල'),
+ ('سنڌي'),
+ ('Ślůnski'),
+ ('Basa Sunda'),
+ ('Taclḥit'),
+ ('Tagalog'),
+ ('ၽႃႇသႃႇတႆး'),
+ ('ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ'),
+ ('tolışi'),
+ ('chiTumbuka'),
+ ('Basa Ugi'),
+ ('Vèneto'),
+ ('Volapük'),
+ ('Walon'),
+ ('文言'),
+ ('吴语'),
+ ('ייִדיש'),
+ ('Yorùbá'),
+ ('Zazaki'),
+ ('žemaitėška'),
+ ('isiZulu'),
+ ('नेपाली'),
+ ('ꯃꯤꯇꯩ ꯂꯣꯟ'),
+ ('Dzhudezmo / לאדינו'),
+ ('Адыгэбзэ'),
+ ('Ænglisc'),
+ ('Anarâškielâ'),
+ ('अंगिका'),
+ ('Аԥсшәа'),
+ ('armãneashti'),
+ ('Arpitan'),
+ ('atikamekw'),
+ ('ܐܬܘܪܝܐ'),
+ ('Avañe’ẽ'),
+ ('Авар'),
+ ('Aymar'),
+ ('Batak Toba'),
+ ('Betawi'),
+ ('भोजपुरी'),
+ ('Bislama'),
+ ('བོད་ཡིག'),
+ ('Буряад'),
+ ('Chavacano de Zamboanga'),
+ ('Chichewa'),
+ ('Corsu'),
+ ('Vahcuengh / 話僮'),
+ ('Dagaare'),
+ ('Davvisámegiella'),
+ ('Deitsch'),
+ ('ދިވެހިބަސް'),
+ ('Dolnoserbski'),
+ ('Dusun Bundu-liwan'),
+ ('Эрзянь'),
+ ('Estremeñu'),
+ ('Eʋegbe'),
+ ('Farefare'),
+ ('Fɔ̀ngbè'),
+ ('Furlan'),
+ ('Gaelg'),
+ ('Gagauz'),
+ ('ГӀалгӀай'),
+ ('Ghanaian Pidgin'),
+ ('Gĩkũyũ'),
+ ('赣语 / 贛語'),
+ ('Gungbe'),
+ ('Хальмг'),
+ ('ʻŌlelo Hawaiʻi'),
+ ('Ikinyarwanda'),
+ ('Jaku Iban'),
+ ('Kabɩyɛ'),
+ ('Yerwa Kanuri'),
+ ('Kaszëbsczi'),
+ ('Kernewek'),
+ ('Коми'),
+ ('Перем коми'),
+ ('Kongo'),
+ ('कोंकणी / Konknni'),
+ ('كٲشُر'),
+ ('Kriyòl Gwiyannen'),
+ ('Kumoring'),
+ ('Kʋsaal'),
+ ('ພາສາລາວ'),
+ ('Лакку'),
+ ('Latgaļu'),
+ ('Лезги'),
+ ('Li Niha'),
+ ('Lingála'),
+ ('Lingua Franca Nova'),
+ ('livvinkarjala'),
+ ('lojban'),
+ ('Luganda'),
+ ('Madhurâ'),
+ ('Malti'),
+ ('Mandailing'),
+ ('Māori'),
+ ('Mfantse'),
+ ('Mirandés'),
+ ('Мокшень'),
+ ('ဘာသာ မန်'),
+ ('Moore'),
+ ('ߒߞߏ'),
+ ('Na Vosa Vaka-Viti'),
+ ('Nāhuatlahtōlli'),
+ ('Naijá'),
+ ('Nedersaksisch'),
+ ('Nouormand / Normaund'),
+ ('Novial'),
+ ('Afaan Oromoo'),
+ ('ပအိုဝ်ႏဘာႏသာႏ'),
+ ('Pangasinán'),
+ ('Pangcah'),
+ ('Papiamentu'),
+ ('Patois'),
+ ('Pfälzisch'),
+ ('Picard'),
+ ('Къарачай–малкъар'),
+ ('Ripoarisch'),
+ ('Rumantsch'),
+ ('Sakizaya'),
+ ('Gagana Sāmoa'),
+ ('Sardu'),
+ ('Seediq'),
+ ('Seeltersk'),
+ ('Sesotho'),
+ ('Sesotho sa Leboa'),
+ ('Setswana'),
+ ('ꠍꠤꠟꠐꠤ'),
+ ('Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ'),
+ ('Soomaaliga'),
+ ('Sranantongo'),
+ ('SiSwati'),
+ ('Reo tahiti'),
+ ('Taqbaylit'),
+ ('Tarandíne'),
+ ('Tayal'),
+ ('Tetun'),
+ ('Tok Pisin'),
+ ('faka Tonga'),
+ ('Türkmençe'),
+ ('Twi'),
+ ('Tyap'),
+ ('Тыва дыл'),
+ ('Удмурт'),
+ ('ئۇيغۇرچه'),
+ ('Vepsän'),
+ ('võro'),
+ ('West-Vlams'),
+ ('Wolof'),
+ ('isiXhosa'),
+ ('Zeêuws'),
+ ('алтай тил'),
+ ('अवधी'),
+ ('डोटेली'),
+ ('ತುಳು'),
+ ('ရခိုင်'),
+ ('Bajau Sama'),
+ ('Bamanankan'),
+ ('Chamoru'),
+ ('རྫོང་ཁ'),
+ ('𐌲𐌿𐍄𐌹𐍃𐌺'),
+ ('Igala'),
+ ('ᐃᓄᒃᑎᑐᑦ / Inuktitut'),
+ ('Iñupiak'),
+ ('isiNdebele seSewula'),
+ ('Kalaallisut'),
+ ('Nupe'),
+ ('Obolo'),
+ ('पालि'),
+ ('pinayuanan'),
+ ('Ποντιακά'),
+ ('romani čhib'),
+ ('Ikirundi'),
+ ('руски'),
+ ('Sängö'),
+ ('ᥖᥭᥰᥖᥬᥳᥑᥨᥒᥰ'),
+ ('ትግርኛ'),
+ ('Thuɔŋjäŋ'),
+ ('ᏣᎳᎩ'),
+ ('Tsėhesenėstsestotse'),
+ ('Xitsonga'),
+ ('Tshivenḓa'),
+ ('Wayuunaiki'),
+ ('адыгабзэ');
+ COMMIT;
+}
+
+do_test 1.2 {
+ set res \n[db format -style box {
+ SELECT name, rowid AS id FROM language
+ WHERE length(name)=2
+ ORDER BY name
+ }]
+ set exp {
+┌──────┬─────┐
+│ name │ id │
+├──────┼─────┤
+│ 中文 │ 18 │
+│ 吴语 │ 173 │
+│ 文言 │ 172 │
+│ 粵語 │ 75 │
+└──────┴─────┘
+}
+ if {$res ne $exp} {
+ puts [list $res]
+ puts [list $exp]
+ }
+ string compare $res $exp
+} {0}
+
+do_test 1.3 {
+ set res \n[db format -style box {
+ SELECT name, rowid AS id FROM language
+ WHERE length(name)=3
+ ORDER BY name
+ }]
+ set exp {
+┌────────┬─────┐
+│ name │ id │
+├────────┼─────┤
+│ Ido │ 108 │
+│ Twi │ 297 │
+│ ߒߞߏ │ 258 │
+│ ᏣᎳᎩ │ 335 │
+│ 日本語 │ 10 │
+│ 한국어 │ 37 │
+└────────┴─────┘
+}
+ if {$res ne $exp} {
+ puts [list $res]
+ puts [list $exp]
+ }
+ string compare $res $exp
+} {0}
+
+do_test 1.4 {
+ set res \n[db format -style box {
+ SELECT name, rowid AS id FROM language
+ WHERE length(name)=4
+ ORDER BY name
+ }]
+ set exp {
+┌──────┬─────┐
+│ name │ id │
+├──────┼─────┤
+│ Igbo │ 109 │
+│ Jawa │ 115 │
+│ Nupe │ 323 │
+│ Tyap │ 298 │
+│ võro │ 303 │
+│ Авар │ 192 │
+│ Ирон │ 113 │
+│ Коми │ 231 │
+│ اردو │ 74 │
+│ سنڌي │ 159 │
+│ مصرى │ 8 │
+│ پښتو │ 144 │
+│ अवधी │ 309 │
+│ पालि │ 325 │
+│ ತುಳು │ 311 │
+│ ትግርኛ │ 333 │
+│ አማርኛ │ 78 │
+└──────┴─────┘
+}
+ if {$res ne $exp} {
+ puts [list $res]
+ puts [list $exp]
+ }
+ string compare $res $exp
+} {0}
+
+do_test 1.5 {
+ set res \n[db format -style box {
+ SELECT name, rowid AS id FROM language
+ WHERE length(name)=5
+ ORDER BY name
+ }]
+ set exp {
+┌───────┬─────┐
+│ name │ id │
+├───────┼─────┤
+│ Aymar │ 193 │
+│ Corsu │ 202 │
+│ Dansk │ 31 │
+│ Eesti │ 32 │
+│ Frysk │ 99 │
+│ Gaelg │ 216 │
+│ Hausa │ 106 │
+│ Igala │ 318 │
+│ Kongo │ 233 │
+│ Ladin │ 44 │
+│ Malti │ 250 │
+│ Moore │ 257 │
+│ Māori │ 252 │
+│ Naijá │ 261 │
+│ Obolo │ 324 │
+│ Sardu │ 278 │
+│ Scots │ 155 │
+│ Shqip │ 21 │
+│ Suomi │ 65 │
+│ Sängö │ 331 │
+│ Tayal │ 292 │
+│ Tetun │ 293 │
+│ Walon │ 171 │
+│ Wolof │ 305 │
+│ Лакку │ 240 │
+│ Лезги │ 242 │
+│ руски │ 330 │
+│ עברית │ 42 │
+│ فارسی │ 5 │
+│ كٲشُر │ 235 │
+│ گیلکی │ 103 │
+│ मराठी │ 51 │
+│ বাংলা │ 26 │
+│ ଓଡି଼ଆ │ 140 │
+│ தமிழ் │ 67 │
+│ ಕನ್ನಡ │ 116 │
+│ සිංහල │ 158 │
+│ ꠍꠤꠟꠐꠤ │ 284 │
+└───────┴─────┘
+}
+ if {$res ne $exp} {
+ puts [list $res]
+ puts [list $exp]
+ }
+ string compare $res $exp
+} {0}
+
+do_test 1.6 {
+ set res \n[db format -style box {
+ SELECT name, rowid AS id FROM language
+ WHERE length(name)=6
+ ORDER BY name
+ }]
+ set exp {
+┌────────┬─────┐
+│ name │ id │
+├────────┼─────┤
+│ Betawi │ 195 │
+│ Català │ 28 │
+│ Eʋegbe │ 212 │
+│ Furlan │ 215 │
+│ Gagauz │ 217 │
+│ Galego │ 36 │
+│ Gungbe │ 222 │
+│ Gĩkũyũ │ 220 │
+│ Kabɩyɛ │ 227 │
+│ Kotava │ 119 │
+│ Kʋsaal │ 238 │
+│ Latina │ 45 │
+│ Lìgure │ 126 │
+│ Magyar │ 48 │
+│ Novial │ 264 │
+│ Patois │ 270 │
+│ Picard │ 272 │
+│ Polski │ 11 │
+│ Română │ 59 │
+│ Seediq │ 279 │
+│ Türkçe │ 73 │
+│ Vepsän │ 302 │
+│ Vèneto │ 169 │
+│ Yorùbá │ 175 │
+│ Zazaki │ 176 │
+│ Zeêuws │ 307 │
+│ lojban │ 247 │
+│ tolışi │ 166 │
+│ Аԥсшәа │ 186 │
+│ Буряад │ 199 │
+│ Монгол │ 134 │
+│ Тоҷикӣ │ 71 │
+│ Удмурт │ 300 │
+│ Хальмг │ 223 │
+│ Эрзянь │ 210 │
+│ ייִדיש │ 174 │
+│ تۆرکجه │ 72 │
+│ ܐܬܘܪܝܐ │ 190 │
+│ अंगिका │ 185 │
+│ डोटेली │ 310 │
+│ नेपाली │ 179 │
+│ मैथिली │ 129 │
+│ हिन्दी │ 39 │
+│ ਪੰਜਾਬੀ │ 142 │
+│ తెలుగు │ 69 │
+│ മലയാളം │ 130 │
+│ རྫོང་ཁ │ 316 │
+│ ရခိုင် │ 312 │
+└────────┴─────┘
+}
+ if {$res ne $exp} {
+ puts [list $res]
+ puts [list $exp]
+ }
+ string compare $res $exp
+} {0}
+
+finish_test