1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
|
<!DOCTYPE html>
<html><head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link href="sqlite.css" rel="stylesheet">
<title>Release History Of SQLite</title>
<!-- path= -->
</head>
<body>
<div class=nosearch>
<a href="index.html">
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
</a>
<div><!-- IE hack to prevent disappearing logo --></div>
<div class="tagline desktoponly">
Small. Fast. Reliable.<br>Choose any three.
</div>
<div class="menu mainmenu">
<ul>
<li><a href="index.html">Home</a>
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
<li class='wideonly'><a href='about.html'>About</a>
<li class='desktoponly'><a href="docs.html">Documentation</a>
<li class='desktoponly'><a href="download.html">Download</a>
<li class='wideonly'><a href='copyright.html'>License</a>
<li class='desktoponly'><a href="support.html">Support</a>
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
<li class='search' id='search_menubutton'>
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
</ul>
</div>
<div class="menu submenu" id="submenu">
<ul>
<li><a href='about.html'>About</a>
<li><a href='docs.html'>Documentation</a>
<li><a href='download.html'>Download</a>
<li><a href='support.html'>Support</a>
<li><a href='prosupport.html'>Purchase</a>
</ul>
</div>
<div class="searchmenu" id="searchmenu">
<form method="GET" action="search">
<select name="s" id="searchtype">
<option value="d">Search Documentation</option>
<option value="c">Search Changelog</option>
</select>
<input type="text" name="q" id="searchbox" value="">
<input type="submit" value="Go">
</form>
</div>
</div>
<script>
function toggle_div(nm) {
var w = document.getElementById(nm);
if( w.style.display=="block" ){
w.style.display = "none";
}else{
w.style.display = "block";
}
}
function toggle_search() {
var w = document.getElementById("searchmenu");
if( w.style.display=="block" ){
w.style.display = "none";
} else {
w.style.display = "block";
setTimeout(function(){
document.getElementById("searchbox").focus()
}, 30);
}
}
function div_off(nm){document.getElementById(nm).style.display="none";}
window.onbeforeunload = function(e){div_off("submenu");}
/* Disable the Search feature if we are not operating from CGI, since */
/* Search is accomplished using CGI and will not work without it. */
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
document.getElementById("search_menubutton").style.display = "none";
}
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
function hideorshow(btn,obj){
var x = document.getElementById(obj);
var b = document.getElementById(btn);
if( x.style.display!='none' ){
x.style.display = 'none';
b.innerHTML='show';
}else{
x.style.display = '';
b.innerHTML='hide';
}
return false;
}
var antiRobot = 0;
function antiRobotGo(){
if( antiRobot!=3 ) return;
antiRobot = 7;
var j = document.getElementById("mtimelink");
if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
}
function antiRobotDefense(){
document.body.onmousedown=function(){
antiRobot |= 2;
antiRobotGo();
document.body.onmousedown=null;
}
document.body.onmousemove=function(){
antiRobot |= 2;
antiRobotGo();
document.body.onmousemove=null;
}
setTimeout(function(){
antiRobot |= 1;
antiRobotGo();
}, 100)
antiRobotGo();
}
antiRobotDefense();
</script>
<h1 align=center>Release History</h1>
<p>
This page provides a high-level summary of changes to SQLite.
For more detail, see the Fossil checkin logs at
<a href="https://www.sqlite.org/src/timeline">
https://www.sqlite.org/src/timeline</a> and
<a href="https://www.sqlite.org/src/timeline?t=release">
https://www.sqlite.org/src/timeline?t=release</a>.
See the <a href="chronology.html">chronology</a> a succinct listing of releases.
</p>
<a name="version_3_45_2"></a>
<h3>2024-03-12 (3.45.2)</h3><p><ol class='lessindent'>
<li> Fix an error in <a href="lang_upsert.html">UPSERT</a>, introduced by enhancement 3a in <a href="#version_3_35_0">version 3.35.0</a>
(2021-03-12), that could cause an index to get out-of-sync with its table.
<a href="https://sqlite.org/forum/forumpost/919c6579c8">Forum thread 919c6579c8</a>.
<li> Reduce the scope of the NOT NULL strength reduction optimization that was
added as item 8e in <a href="#version_3_35_0">version 3.35.0</a> (2021-03-12). The optimization
was being attempted in some contexts where it did not work, resulting in
incorrect query results.
<a href="https://sqlite.org/forum/forumpost/440f2a2f17">Forum thread 440f2a2f17</a>.
<li> Other trifling corrections and compiler warning fixes that have come up
since the previous patch release. See the
<a href="https://sqlite.org/src/timeline?from=version-3.45.1&to=version-3.45.2&to2=branch-3.45">timeline</a>
for details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2024-03-12 11:06:23 d8cd6d49b46a395b13955387d05e9e1a2a47e54fb99f3c9b59835bbefad6af77"
<li>SHA3-256 for sqlite3.c: bd76ad2dc9cde151e469e86627a7e8753aa8ef1a6f657c5a80ba48324b53226b
</ol></p>
<a name="version_3_45_1"></a>
<h3>2024-01-30 (3.45.1)</h3><p><ol class='lessindent'>
<li> Restore the <a href="json1.html#jblobbug">JSON BLOB input bug</a>, and promise to support the anomaly in
subsequent releases, for backward compatibility.
<li> Fix the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it works on read-only
databases that contain FTS3 and FTS5 tables. This resolves an issue
introduced in <a href="#version_3_44_0">version 3.44.0</a> but was undiscovered until after the 3.45.0 release.
<li> Fix issues associated with processing corrupt <a href="json1.html#jsonbx">JSONB</a> inputs:
<ol type="a">
<li> Prevent exponential runtime when converting a corrupt JSONB into text.
<li> Fix a possible read of one byte past the end of the JSONB blob when converting
a corrupt JSONB into text.
<li> Enhanced testing using <a href="testing.html#dbsqlfuzz">jfuzz</a> to prevent any future JSONB problems such
as the above.
</ol>
<li> Fix a long-standing bug in which a read of a few bytes past the end of a
memory-mapped segment might occur when accessing a craftily corrupted database
using <a href="pragma.html#pragma_mmap_size">memory-mapped database</a>.
<li> Fix a long-standing bug in which a NULL pointer dereference might occur in
the <a href="opcode.html">bytecode engine</a> due to incorrect bytecode being generated for a class
of SQL statements that are deliberately designed to stress the query planner
but which are otherwise pointless.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a
<li>SHA3-256 for sqlite3.c: 0474604df9e1b69a5544295dd046aad954749279780d557da80f44b958100295
</ol></p>
<a name="version_3_45_0"></a>
<h3>2024-01-15 (3.45.0)</h3><p><ol class='lessindent'>
<li> Added the <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a> property for
<a href="appfunc.html">application-defined SQL functions</a>.
All application defined SQL functions that invokes
<a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> must be registered with this new property.
Failure to do so might cause the call to sqlite3_result_subtype() to
behave as a no-op. Compile with <a href="compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a> to cause an
SQL error to be raised if a function that is not <a href="c3ref/c_deterministic.html#sqliteresultsubtype">SQLITE_RESULT_SUBTYPE</a>
tries invokes <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a>. The use of <a href="compile.html#strict_subtype">-DSQLITE_STRICT_SUBTYPE=1</a>
is a recommended compile-time option for every application that makes
use of subtypes.
<li> Enhancements to the <a href="json1.html">JSON SQL functions</a>:
<ol type="a">
<li> All JSON functions are rewritten to use a new internal parse tree
format called <a href="json1.html#jsonbx">JSONB</a>. The new parse-tree format is serializable
and hence can be stored in the database to avoid unnecessary re-parsing
whenever the JSON value is used.
<li> New versions of JSON-generating functions generate binary JSONB instead
of JSON text.
<li> The <a href="json1.html#jvalid">json_valid()</a> function adds an optional second argument that
specifies what it means for the first argument to be "well-formed".
</ol>
<li> Add the <a href="fts5.html#the_tokendata_option">FTS5 tokendata option</a> to the <a href="fts5.html">FTS5</a> virtual table.
<li> The <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> optimization is now enabled by default.
Disable it at compile-time using -DSQLITE_DIRECT_OVERFLOW_READ=0.
<li> Query planner improvements:
<ol type="a">
<li> Do not allow the transitive constraint optimization to trick the
query planner into using a range constraint when a better equality
constraint is available.
(<a href="https://sqlite.org/forum/forumpost/2568d1f6e6">Forum post 2568d1f6e6</a>.)
<li> The query planner now does a better job of disregarding
indexes that <a href="lang_analyze.html">ANALYZE</a> identifies as low-quality.
(<a href="https://sqlite.org/forum/forumpost/6f0958b03b">Forum post 6f0958b03b</a>.)
</ol>
<li> Increase the default value for <a href="limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> from 1073741824 to
4294967294.
<li> Enhancements to the <a href="cli.html">CLI</a>:
<ol type="a">
<li> Improvements to the display of UTF-8 content on Windows
<li> Automatically detect playback of ".dump" scripts and make appropriate
changes to settings such as ".dbconfig defensive off" and
".dbconfig dqs_dll on".
</ol>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2024-01-15 17:01:13 1066602b2b1976fe58b5150777cced894af17c803e068f5918390d6915b46e1d
<li>SHA3-256 for sqlite3.c: f56d8e5e8c61d87b957f1cc60b3042c134d7bc0ca3aba002e6999e8f0af310a3
</ol></p>
<a name="version_3_44_2"></a>
<h3>2023-11-24 (3.44.2)</h3><p><ol class='lessindent'>
<li> Fix a mistake in the <a href="cli.html">CLI</a> that was introduced by the fix (item 15 above) in 3.44.1.
<li> Fix a problem in FTS5 that was discovered during internal fuzz testing only
minutes after the 3.44.1 release was tagged.
<li> Fix incomplete assert() statements that the fuzzer discovered the day after
the previous release.
<li> Fix a couple of harmless compiler warnings that appeared in debug builds with GCC 16.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f
<li>SHA3-256 for sqlite3.c: bd70b012e2d1b3efa132d905224cd0ab476a69b892f8c6b21135756ec7ffbb13
</ol></p>
<a name="version_3_44_1"></a>
<h3>2023-11-22 (3.44.1)</h3><p><ol class='lessindent'>
<li> Change the <a href="cli.html">CLI</a> so that it uses UTF-16 for console I/O on Windows. This
enables proper display of unicode text on old Windows7 machines.
<li> Other obscure bug fixes.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-11-22 14:18:12 d295f48e8f367b066b881780c98bdf980a1d550397d5ba0b0e49842c95b3e8b4
<li>SHA3-256 for sqlite3.c: e359dc502a73f3a8ad8e976a51231134d25cb93ad557a724dd92fe0c5897113a
</ol></p>
<a name="version_3_44_0"></a>
<h3>2023-11-01 (3.44.0)</h3><p><ol class='lessindent'>
<li> <a href="lang_aggfunc.html">Aggregate functions</a> can now include an ORDER BY clause after their last
parameter. The arguments to the function are processed in the order
specified. This can be important for functions like
<a href="lang_aggfunc.html#group_concat">string_agg()</a> and <a href="json1.html#jgrouparray">json_group_array()</a>.
<li> Add support for the <a href="lang_corefunc.html#concat">concat()</a> and <a href="lang_corefunc.html#concat_ws">concat_ws()</a> scalar SQL functions,
compatible with PostgreSQL, SQLServer, and MySQL.
<li> Add support for the <a href="lang_aggfunc.html#group_concat">string_agg()</a> aggregate SQL function, compatible
with PostgreSQL and SQLServer.
<li> New conversion letters on the <a href="lang_datefunc.html#strftm">strftime() SQL function</a>: %e %F %I %k %l %p %P %R %T %u
<li> Add new C-language APIs: <a href="c3ref/get_clientdata.html">sqlite3_get_clientdata()</a> and <a href="c3ref/get_clientdata.html">sqlite3_set_clientdata()</a>.
<li> Many errors associated with CREATE TABLE are now raised when the CREATE TABLE statement
itself is run, rather than being deferred until the first time the table is actually
used.
<li> The <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command now verifies the consistency of the
content in various built-in <a href="vtab.html">virtual tables</a> using the new <a href="vtab.html#xintegrity">xIntegrity method</a>.
This works for the <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, <a href="fts5.html">FTS5</a>, <a href="rtree.html">RTREE</a>, and <a href="geopoly.html">GEOPOLY</a> extensions.
<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> setting now prevents <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema</a>
from being turned on. Previously writable_schema could be turned on, but would
not actually allow the schema to be writable. Now it simply cannot be turned on.
<li> Tag the built-in <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, <a href="fts5.html">FTS5</a>, <a href="rtree.html">RTREE</a>, and <a href="geopoly.html">GEOPOLY</a> virtual tables as
<a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> so that they can be used inside of triggers in
high-security deployments.
<li> The <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statement is deprecated, as its use when the
schema contains LIKE operators can lead to reports of database corruption
by <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>.
<li> <a href="compile.html#use_seh">SQLITE_USE_SEH</a> (Structured Exception Handling) is now enabled by default whenever
SQLite is built using the Microsoft C compiler. It can be disabled using
-DSQLITE_USE_SEH=0
<li> Query planner optimizations:
<ol type="a">
<li> In partial index scans, if the WHERE clause implies a constant value for a table
column, replace occurrences of that table column with the constant. This
increases the likelihood of the partial index being a covering index.
<li> Disable the view-scan optimization (added in <a href="#version_3_42_0">version 3.42.0</a> - item 1c)
as it was causing multiple performance regressions. In its place, reduce
the estimated row count for DISTINCT subqueries by a factor of 8.
</ol>
<li> SQLite now performs run-time detection of whether or not the underlying hardware
supports "long double" with precision greater than "double" and uses appropriate
floating-point routines depending on what it discovered.
<li> The <a href="cli.html">CLI</a> for Windows now defaults to using UTF-8 for both input
and output on platforms that support it. The --no-utf8 option is available
to disable UTF8 support.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-11-01 11:23:50 17129ba1ff7f0daf37100ee82d507aef7827cf38de1866e2633096ae6ad8130
<li>SHA3-256 for sqlite3.c: d9e6530096136067644b1cb2057b3b0fa51070df99ec61971f73c9ba6aa9a36e
</ol></p>
<a name="version_3_43_2"></a>
<h3>2023-10-10 (3.43.2)</h3><p><ol class='lessindent'>
<li> Fix a couple of obscure UAF errors and an obscure memory leak.
<li> Omit the use of the sprintf() function from the standard library
in the <a href="cli.html">CLI</a>, as this now generates warnings on some platforms.
<li> Avoid conversion of a double into unsigned long long integer, as
some platforms do not do such conversions correctly.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-10-10 12:14:04 4310099cce5a487035fa535dd3002c59ac7f1d1bec68d7cf317fd3e769484790
<li>SHA3-256 for sqlite3.c: e17a3dc69330bd109256fb5a6e2b3ce8fbec48892a800389eb7c0f8856703161
</ol></p>
<a name="version_3_43_1"></a>
<h3>2023-09-11 (3.43.1)</h3><p><ol class='lessindent'>
<li> Fix a regression in the way that the <a href="lang_aggfunc.html#sumunc">sum()</a>, <a href="lang_aggfunc.html#avg">avg()</a>, and <a href="lang_aggfunc.html#sumunc">total()</a>
aggregate functions handle infinities.
<li> Fix a bug in the <a href="json1.html#jarraylen">json_array_length()</a> function that occurs when the
argument comes directly from <a href="json1.html#jrm">json_remove()</a>.
<li> Fix the omit-unused-subquery-columns optimization (introduced in
in version 3.42.0) so that it works correctly if the subquery is a
compound where one arm is DISTINCT and the other is not.
<li> Other minor fixes.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0
<li>SHA3-256 for sqlite3.c: 391af0a4755e31ae8b29776a4a060b678823ffe4c4db558567567c688a578589
</ol></p>
<a name="version_3_43_0"></a>
<h3>2023-08-24 (3.43.0)</h3><p><ol class='lessindent'>
<li> Add support for <a href="fts5.html#clssdeltab">Contentless-Delete FTS5 Indexes</a>. This is a variety
of <a href="fts5.html">FTS5</a> full-text search index that omits storing the content that is being indexed
while also allowing records to be deleted.
<li> Enhancements to the <a href="lang_datefunc.html">date and time functions</a>:
<ol type="a">
<li> Added new <a href="lang_datefunc.html#tmshf">time shift modifiers</a> of the form <tt>±YYYY-MM-DD HH:MM:SS.SSS</tt>.
<li> Added the <a href="lang_datefunc.html#tmdif">timediff() SQL function</a>.
</ol>
<li> Added the <a href="lang_corefunc.html#octet_length">octet_length(X)</a> SQL function.
<li> Added the <a href="c3ref/stmt_explain.html">sqlite3_stmt_explain()</a> API.
<li> Query planner enhancements:
<ol type="a">
<li> Generalize the LEFT JOIN strength reduction optimization so that it works
for RIGHT and FULL JOINs as well. Rename it to
<a href="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a>.
<li> Enhance the theorem prover in the <a href="optoverview.html#leftjoinreduction">OUTER JOIN strength reduction</a> optimization
so that it returns fewer false-negatives.
</ol>
<li> Enhancements to the <a href="floatingpoint.html#decext">decimal extension</a>:
<ol type="a">
<li> New function decimal_pow2(N) returns the N-th power of 2 for integer N
between -20000 and +20000.
<li> New function decimal_exp(X) works like decimal(X) except that it returns
the result in exponential notation - with a "e+NN" at the end.
<li> If X is a floating-point value, then the decimal(X) function now does a full
expansion of that value into its exact decimal equivalent.
</ol>
<li> Performance enhancements to <a href="json1.html">JSON processing</a> results in a 2x performance
improvement for some kinds of processing on large JSON strings.
<li> New makefile target "verify-source" checks to ensure that there are no
unintentional changes in the source tree. (Works for
<a href="getthecode.html">canonical source code</a> only -
not for <a href="amalgamation.html#amalgtarball">precompiled amalgamation tarballs</a>.)
<li> Added the <a href="compile.html#use_seh">SQLITE_USE_SEH</a> compile-time option that enables Structured
Exception Handling on Windows while working with the memory-mapped
<a href="walformat.html#shm">shm file</a> that is part of <a href="wal.html">WAL mode</a> processing. This option is enabled
by default when building on Windows using Makefile.msc.
<li> The <a href="vfs.html">VFS</a> for unix now assumes that the nanosleep() system call is
available unless compiled with -DHAVE_NANOSLEEP=0.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-08-24 12:36:59 0f80b798b3f4b81a7bb4233c58294edd0f1156f36b6ecf5ab8e83631d468778c
<li>SHA3-256 for sqlite3.c: a6fc5379891d77b69a7d324cd24a437307af66cfdc3fef5dfceec3c82c8d4078
</ol></p>
<a name="version_3_42_0"></a>
<h3>2023-05-16 (3.42.0)</h3><p><ol class='lessindent'>
<li> Add the <a href="fts5.html#the_secure_delete_configuration_option">FTS5 secure-delete command</a>. This option causes all forensic traces
to be removed from the FTS5 inverted index when content is deleted.
<li> Enhance the <a href="json1.html">JSON SQL functions</a> to support <a href="json1.html#json5">JSON5 extensions</a>.
<li> The <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> calls to <a href="c3ref/config.html">sqlite3_config()</a>
are now allowed to occur <i>after</i> <a href="c3ref/initialize.html">sqlite3_initialize()</a>.
<li> New <a href="c3ref/db_config.html">sqlite3_db_config()</a> options: <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigstmtscanstatus">SQLITE_DBCONFIG_STMT_SCANSTATUS</a> and
<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigreversescanorder">SQLITE_DBCONFIG_REVERSE_SCANORDER</a>.
<li> Query planner improvements:
<ol type="a">
<li> Enable the "count-of-view" optimization by default.
<li> Avoid computing unused columns in subqueries.
<li> Improvements to the <a href="optoverview.html#pushdown">push-down optimization</a>.
</ol>
<li> Enhancements to the <a href="cli.html">CLI</a>:
<ol type="a">
<li> Add the --unsafe-testing command-line option. Without this option, some
dot-commands (ex: ".testctrl") are now disabled because those commands
that are intended for testing only and can cause malfunctions if misused.
<li> Allow commands ".log on" and ".log off", even in --safe mode.
<li> "--" as a command-line argument means all subsequent arguments that
start with "-" are interpreted as normal non-option argument.
<li> Magic parameters ":inf" and ":nan" bind to floating point literals
Infinity and NaN, respectively.
<li> The --utf8 command-line option omits all translation to or from
MBCS on the Windows console for interactive sessions, and sets
the console code page for UTF-8 I/O during such sessions.
The --utf8 option is a no-op on all other platforms.
</ol>
<li> Add the ability for <a href="appfunc.html">application-defined SQL functions</a> to have the same name
as join keywords: CROSS, FULL, INNER, LEFT, NATURAL, OUTER, or RIGHT.
<li> Enhancements to <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>:
<ol type="a">
<li> Detect and raise an error when a NaN value is stored in a NOT NULL column.
<li> Improved error message output identifies the root page of a b-tree when
an error is found within a b-tree.
</ol>
<li> Allow the <a href="sessionintro.html">session extension</a> to be configured to capture changes from
tables that lack an explicit ROWID.
<li> Added the <a href="lang_datefunc.html#subsec">subsecond modifier</a> to the <a href="lang_datefunc.html">date and time functions</a>.
<li> Negative values passed into <a href="c3ref/sleep.html">sqlite3_sleep()</a> are henceforth interpreted as 0.
<li> The maximum recursion depth for JSON arrays and objects is lowered from 2000
to 1000.
<li> Extended the <a href="printf.html">built-in printf()</a> function so the <a href="printf.html#comma">comma option</a> now works with
floating-point conversions in addition to integer conversions.
<li> Miscellaneous bug fixes and performance optimizations
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0
<li>SHA3-256 for sqlite3.c: 6aa3fadf000000625353bbaa1e83af114c40c240a0aa5a2c1c2aabcfc28d4f92
</ol></p>
<a name="version_3_41_2"></a>
<h3>2023-03-22 (3.41.2)</h3><p><ol class='lessindent'>
<li> Multiple fixes for reads past the end of memory buffers
(NB: <i>reads</i> not <i>writes</i>) in the following circumstances:
<ol type="a">
<li> When processing a corrupt database file using the non-standard
<a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option.
<li> In the <a href="cli.html">CLI</a> when the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> routine returns an out-of-range value
(see also the fix to sqlite3_error_offset() below).
<li> In the <a href="recovery.html">recovery extension</a>.
<li> In <a href="fts3.html">FTS3</a> when processing a corrupt database file.
</ol>
<li> Fix the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> so that it does not return out-of-range values when
reporting errors associated with <a href="gencol.html">generated columns</a>.
<li> Multiple fixes in the query optimizer for problems that cause incorrect
results for bizarre, fuzzer-generated queries.
<li> Increase the size of the reference counter in the page cache object to 64 bits to
ensure that the counter never overflows.
<li> Fix a performance regression caused by a bug fix in patch release 3.41.1.
<li> Fix a few incorrect assert() statements.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da
<li>SHA3-256 for sqlite3.c: c83f68b7aac1e7d3ed0fcdb9857742f024449e1300bfb3375131a6180b36cf7c
</ol></p>
<a name="version_3_41_1"></a>
<h3>2023-03-10 (3.41.1)</h3><p><ol class='lessindent'>
<li> Provide compile-time options -DHAVE_LOG2=0 and -DHAVE_LOG10=0 to enable SQLite to be
compiled on systems that omit the standard library functions log2() and log10(), repectively.
<li> Ensure that the datatype for column t1.x in
"<tt>CREATE TABLE t1 AS SELECT CAST(7 AS INT) AS x;</tt>" continues to be INT and is not NUM,
for historical compatibility.
<li> Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to detect when extra bytes appear at the end of an
index record.
<li> Fix various obscure bugs reported by the user community. See the
<a href="https://sqlite.org/src/timeline?from=version-3.41.0&to=version-3.41.1">timeline of changes</a>
for details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-03-10 12:13:52 20399f3eda5ec249d147ba9e48da6e87f969d7966a9a896764ca437ff7e737ff
<li>SHA3-256 for sqlite3.c: d0d9db8425570f4a57def04fb8f4ac84f5c3e4e71d3d4d10472e3639c5fdf09f
</ol></p>
<a name="version_3_41_0"></a>
<h3>2023-02-21 (3.41.0)</h3><p><ol class='lessindent'>
<li>Query planner improvements:
<ol type="a">
<li> Make use of <a href="expridx.html">indexed expressions</a> within an aggregate query that
includes a GROUP BY clause.
<li> The query planner has improved awareness of when an index is
a <a href="queryplanner.html#covidx">covering index</a> and adjusts predicted runtimes accordingly.
<li> The query planner is more aggressive about using <a href="optoverview.html#coroutines">co-routines</a> rather
than materializing subqueries and views.
<li> Queries against the built-in table-valued functions <a href="json1.html#jtree">json_tree()</a> and
<a href="json1.html#jeach">json_each()</a> will now usually treat "ORDER BY rowid" as a no-op.
<li> Enhance the ability of the query planner to use <a href="expridx.html">indexed expressions</a>
even if the expression has been modified by the
<a href="optoverview.html#constprop">constant-propagation optimization</a>.
(See <a href="https://sqlite.org/forum/forumpost/0a539c76db3b9e29">forum thread 0a539c7</a>.)
</ol>
<li>Add the built-in <a href="lang_corefunc.html#unhex">unhex()</a> SQL function.
<li>Add the base64 and base85 application-defined functions as an extension and
include that extension in the <a href="cli.html">CLI</a>.
<li>Add the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a> interface. (This interface is only
available if SQLite is compiled using <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.)
<li>In-memory databases created using <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> now report their
filename as an empty string, not as 'x'.
<li>Changes to the <a href="cli.html">CLI</a>:
<ol type="a">
<li> Add the new base64() and base85() SQL functions
<li> Enhanced <a href="eqp.html">EXPLAIN QUERY PLAN</a> output using the new <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus_v2()</a>
interface when compiled using <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
<li> The "<tt>.scanstats est</tt>" command provides query planner estimates in profiles.
<li> The continuation prompt indicates if the input is currently inside of a
string literal, identifier literal, comment, trigger definition, etc.
<li> Enhance the --safe command-line option to disallow dangerous SQL functions.
<li> The <a href="quirks.html#dblquote">double-quoted string misfeature</a> is now disabled by default for CLI
builds. Legacy use cases can reenable the misfeature at run-time using
the "<tt>.dbconfig dqs_dml on</tt>" and "<tt>.dbconfig dqs_ddl on</tt>"
commands.
</ol>
<li>Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command so that it detects when text strings in
a table are equivalent to but not byte-for-byte identical to the same strings in the index.
<li>Enhance the <a href="carray.html">carray table-valued function</a> so that it is able to bind an array of
BLOB objects.
<li>Added the <a href="c3ref/interrupt.html">sqlite3_is_interrupted()</a> interface.
<li>Long-running calls to <a href="c3ref/prepare.html">sqlite3_prepare()</a> and similar now invoke the
<a href="c3ref/progress_handler.html">progress handler callback</a> and react to <a href="c3ref/interrupt.html">sqlite3_interrupt()</a>.
<li>The <a href="c3ref/vtab_in_first.html">sqlite3_vtab_in_first()</a> and <a href="c3ref/vtab_in_first.html">sqlite3_vtab_in_next()</a> functions are enhanced so that
they reliably detect if they are invoked on a parameter that was not selected for
multi-value IN processing using <a href="c3ref/vtab_in.html">sqlite3_vtab_in()</a>.
They return SQLITE_ERROR instead of SQLITE_MISUSE in this case.
<li>The parser now ignores excess parentheses around a subquery on the right-hand side
of an IN operator, so that SQLite now works the same as PostgreSQL in this regard.
Formerly, SQLite treated the subquery as an expression with an implied "LIMIT 1".
<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> option to the <a href="c3ref/file_control.html">sqlite3_file_control()</a> API.
<li>Makefile improvements:
<ol type="a">
<li>The new makefile target "sqlite3r.c" builds an <a href="amalgamation.html">amalgamation</a> that includes
the <a href="recovery.html">recovery extension</a>.
<li>New makefile targets "devtest" and "releasetest" for running a
quick developmental test prior to doing a check-in and for doing a full
release test, respectively.
</ol>
<li>Miscellaneous performance enhancements.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2023-02-21 18:09:37 05941c2a04037fc3ed2ffae11f5d2260706f89431f463518740f72ada350866d
<li>SHA3-256 for sqlite3.c: 02bd9e678460946810801565667fdb8f0c29c78e51240512d2e5bb3dbdee7464
</ol></p>
<a name="version_3_40_1"></a>
<h3>2022-12-28 (3.40.1)</h3><p><ol class='lessindent'>
<li> Fix the <a href="cli.html#safemode">--safe command-line option</a> to the <a href="cli.html">CLI</a>
such that it correctly disallows the
use of SQL functions like writefile() that can cause harmful side-effects.
<li> Fix a potential infinite loop in the <a href="malloc.html#memsys5">memsys5</a> alternative memory allocator. This
bug was introduced by a performance optimization in version 3.39.0.
<li> Various other obscure fixes.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24
<li>SHA3-256 for sqlite3.c: 4d6800e9032ff349376fe612e422b49ba5eb4e378fac0b3e405235d09dd366ab
</ol></p>
<a name="version_3_40_0"></a>
<h3>2022-11-16 (3.40.0)</h3><p><ol class='lessindent'>
<li> Add support for compiling <a href="https://sqlite.org/wasm">SQLite to WASM</a>
and running it in web browsers. NB: The WASM build and its interfaces
are considered "beta" and are subject to minor changes if the need
arises. We anticipate finalizing the interface for the next release.
<li> Add the <a href="recovery.html">recovery extension</a> that might be able to recover some content
from a corrupt database file.
<li> Query planner enhancements:
<ol type="a">
<li> Recognize <a href="queryplanner.html#covidx">covering indexes</a> on tables with more than 63 columns where
columns beyond the 63rd column are used in the query and/or are
referenced by the index.
<li> Extract the values of expressions contained within <a href="expridx.html">expression indexes</a>
where practical, rather than recomputing the expression.
<li> The NOT NULL and IS NULL operators (and their equivalents) avoid
loading the content of large strings and BLOB values from disk.
<li> Avoid materializing a view on which a full scan is performed
exactly once. Use and discard the rows of the view as they are computed.
<li> Allow flattening of a subquery that is the right-hand operand of
a LEFT JOIN in an aggregate query.
</ol>
<li> A new typedef named <a href="c3ref/filename.html">sqlite3_filename</a> is added and used to represent
the name of a database file. Various interfaces are
modified to use the new typedef instead of "char*". This interface
change should be fully backwards compatible, though it might cause
(harmless) compiler warnings when rebuilding some legacy applications.
<li> Add the <a href="c3ref/value_encoding.html">sqlite3_value_encoding()</a> interface.
<li> Security enhancement: <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is augmented to prohibit
changing the <a href="pragma.html#pragma_schema_version">schema_version</a>. The schema_version
becomes read-only in defensive mode.
<li> Enhancements to the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement:
<ol type="a">
<li> Columns in non-STRICT tables with TEXT affinity should not contain numeric values.
<li> Columns in non-STRICT tables with NUMERIC affinity should not
contain TEXT values that could be converted into numbers.
<li> Verify that the rows of a <a href="withoutrowid.html">WITHOUT ROWID</a> table are in the correct order.
</ol>
<li> Enhance the <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> statement so that it honors the
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting.
<li> Enhance the <a href="c3ref/strglob.html">sqlite3_strglob()</a> and <a href="c3ref/strlike.html">sqlite3_strlike()</a> APIs so that they are able
to accept NULL pointers for their string parameters and still generate a sensible
result.
<li> Provide the new <a href="compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> compile-time option for limiting
the size of memory allocations.
<li> Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
from RC4 to Chacha20.
<li> Allow two or more indexes to have the same name as long as they are all in
separate schemas.
<li> Miscellaneous performance optimizations result in about 1% fewer CPU cycles
used on typical workloads.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318
<li>SHA3-256 for sqlite3.c: ab8da6bc754642989e67d581f26683dc705b068cea671970f0a7d32cfacbad19
</ol></p>
<a name="version_3_39_4"></a>
<h3>2022-09-29 (3.39.4)</h3><p><ol class='lessindent'>
<li> Fix the build on Windows so that it works with -DSQLITE_OMIT_AUTOINIT
<li> Fix a long-standing problem in the btree balancer that might, in rare cases,
cause database corruption if the application uses an
<a href="c3ref/pcache_methods2.html">application-defined page cache</a>.
<li> Enhance <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> so that it disallows <a href="lang_createtrigger.html">CREATE TRIGGER</a>
statements if one or more of the statements in the body of the trigger write
into <a href="vtab.html#xshadowname">shadow tables</a>.
<li> Fix a possible integer overflow in the size computation for a memory allocation
in FTS3.
<li> Fix a misuse of the <a href="c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> interface in the
<a href="https://sqlite.org/src/dir/ext/icu">ICU Extension</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-09-29 15:55:41 a29f9949895322123f7c38fbe94c649a9d6e6c9cd0c3b41c96d694552f26b309
<li>SHA3-256 for sqlite3.c: f65082298127e2ddae6539beb94f5204b591df64ba2c7da83c7d0faffd6959d8
</ol></p>
<a name="version_3_39_3"></a>
<h3>2022-09-05 (3.39.3)</h3><p><ol class='lessindent'>
<li> Use a statement journal on DML statement affecting two or more database
rows if the statement makes use of a SQL functions that might abort. See
<a href="https://sqlite.org/forum/forumpost/9b9e4716c0d7bbd1">forum thread 9b9e4716c0d7bbd1</a>.
<li> Use a mutex to protect the <a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> and
<a href="pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a> statements, even though they are deprecated and
documented as not being threadsafe. See
<a href="https://sqlite.org/forum/forumpost/719a11e1314d1c70">forum post 719a11e1314d1c70</a>.
<li> Other bug and warning fixes. See the
<a href="https://sqlite.org/src/timeline?p=version-3.39.3&bt=version-3.39.2">timeline</a>
for details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8
<li>SHA3-256 for sqlite3.c: 2fc273cf8032b601c9e06207efa0ae80eb73d5a1d283eb91096c815fa9640257
</ol></p>
<a name="version_3_39_2"></a>
<h3>2022-07-21 (3.39.2)</h3><p><ol class='lessindent'>
<li> Fix a performance regression in the query planner associated with rearranging
the order of FROM clause terms in the presences of a LEFT JOIN.
<li> Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
<a href="https://sqlite.org/forum/forumpost/3607259d3c">forum post 3607259d3c</a>, and
other minor problems discovered by internal testing.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603
<li>SHA3-256 for sqlite3.c: bffbaafa94706f0ed234f183af3eb46e6485e7e2c75983173ded76e0da805f11
</ol></p>
<a name="version_3_39_1"></a>
<h3>2022-07-13 (3.39.1)</h3><p><ol class='lessindent'>
<li> Fix an incorrect result from a query that uses a view that contains a compound
SELECT in which only one arm contains a RIGHT JOIN and where the view is not
the first FROM clause term of the query that contains the view.
<a href="https://sqlite.org/forum/forumpost/174afeae5734d42d">forum post 174afeae5734d42d</a>.
<li> Fix some harmless compiler warnings.
<li> Fix a long-standing problem with <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> that can only arise
if the <a href="c3ref/limit.html">sqlite3_limit</a>(<a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>) is set to a very small value.
<li> Fix a long-standing problem in <a href="fts3.html">FTS3</a> that can only arise when compiled with
the <a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.
<li> Fix the build so that is works when the <a href="compile.html#debug">SQLITE_DEBUG</a> and
<a href="compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> compile-time options are both provided at the
same time.
<li> Fix the initial-prefix optimization for the <a href="lang_expr.html#regexp">REGEXP</a> extension so that it works
correctly even if the prefix contains characters that require a 3-byte UTF8
encoding.
<li> Enhance the <a href="stmt.html">sqlite_stmt</a> virtual table so that it buffers all of its output.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-07-13 19:41:41 7c16541a0efb3985578181171c9f2bb3fdc4bad6a2ec85c6e31ab96f3eff201f
<li>SHA3-256 for sqlite3.c: 6d13fcf1c31133da541d1eb8a83552d746f39b81a0657bd4077fed0221749511
</ol></p>
<a name="version_3_39_0"></a>
<h3>2022-06-25 (3.39.0)</h3><p><ol class='lessindent'>
<li> Add (long overdue) support for <a href="lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
<li> Add new binary comparison operators <a href="lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="lang_expr.html#isdf">IS DISTINCT FROM</a>
that are equivalent to IS and IS NOT, respective, for compatibility with
PostgreSQL and SQL standards.
<li> Add a new return code (value "3") from the <a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
interface that indicates a query that has both DISTINCT and ORDER BY
clauses.
<li> Added the <a href="c3ref/db_name.html">sqlite3_db_name()</a> interface.
<li> The unix os interface resolves all symbolic links in database
filenames to create a canonical name for the database before the
file is opened.
If the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="c3ref/open.html">sqlite3_open_v2()</a>
or similar, the open will fail if any element of the path is a
symbolic link.
<li> Defer materializing views until the materialization
is actually needed, thus avoiding unnecessary work if the materialization turns
out to never be used.
<li> The <a href="lang_select.html#resultset">HAVING clause</a> of a <a href="lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
even queries that do not have a <a href="lang_select.html#resultset">GROUP BY clause</a>.
<li> Many <a href="cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-06-25 14:57:57 14e166f40dbfa6e055543f8301525f2ca2e96a02a57269818b9e69e162e98918
<li>SHA3-256 for sqlite3.c: d9c439cacad5e4992d0d25989cfd27a4c4f59a3183c97873bc03f0ad1aa78b7a
</ol></p>
<a name="version_3_38_5"></a>
<h3>2022-05-06 (3.38.5)</h3><p><ol class='lessindent'>
<li> Fix <a href="news.html#2022_05_06">a blunder</a> in the <a href="cli.html">CLI</a> of the 3.38.4 release.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-05-06 15:25:27 78d9c993d404cdfaa7fdd2973fa1052e3da9f66215cff9c5540ebe55c407d9fe
<li>SHA3-256 for sqlite3.c: b05ef42ed234009b4b3dfb36c5f5ccf6d728da80f25ee560291269cf6cfe635f
</ol></p>
<a name="version_3_38_4"></a>
<h3>2022-05-04 (3.38.4)</h3><p><ol class='lessindent'>
<li> Fix a byte-code problem in the Bloom filter pull-down optimization added by release
3.38.0 in which an error in the byte code causes the byte code engine to enter an
infinite loop when the pull-down optimization encounters a NULL key.
<a href='https://sqlite.org/forum/forumpost/2482b32700384a0f'>Forum thread 2482b32700384a0f</a>.
<li> Other minor patches. See the
<a href='https://sqlite.org/src/timeline?p=branch-3.38&bt=version-3.38.3'>timeline</a> for
details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-05-04 15:45:55 d402f49871152670a62f4f28cacb15d814f2c1644e9347ad7d258e562978e45e
<li>SHA3-256 for sqlite3.c: e6a50effb021858c200e885664611ed3c5e949413ff2dca452ac7ee336b9de1d
</ol></p>
<a name="version_3_38_3"></a>
<h3>2022-04-27 (3.38.3)</h3><p><ol class='lessindent'>
<li> Fix a case of the query planner be overly aggressive with optimizing automatic-index
and Bloom-filter construction, using inappropriate ON clause terms to restrict the
size of the automatic-index or Bloom filter, and resulting in missing rows in the
output.
<a href='https://sqlite.org/forum/forumpost/0d3200f4f3bcd3a3'>Forum thread 0d3200f4f3bcd3a3</a>.
<li> Other minor patches. See the
<a href='https://sqlite.org/src/timeline?p=version-3.38.3&bt=version-3.38.2'>timeline</a> for
details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-04-27 12:03:15 9547e2c38a1c6f751a77d4d796894dec4dc5d8f5d79b1cd39e1ffc50df7b3be4
<li>SHA3-256 for sqlite3.c: d4d66feffad66ea82073fbb97ae9c84e3615887ebc5168226ccee28d82424517
</ol></p>
<a name="version_3_38_2"></a>
<h3>2022-03-26 (3.38.2)</h3><p><ol class='lessindent'>
<li> Fix a user-discovered problem with the new Bloom filter optimization
that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
clause constraint that says that one of the columns on the right table of
the LEFT JOIN is NULL. See
<a href='https://sqlite.org/forum/forumpost/031e262a89b6a9d2'>forum thread 031e262a89b6a9d2</a>.
<li> Other minor patches. See the
<a href='https://sqlite.org/src/timeline?p=version-3.38.2&bt=version-3.38.1'>timeline</a> for
details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f
<li>SHA3-256 for sqlite3.c: 0fbac6b6999f894184899431fb77b9792324c61246b2a010d736694ccaa6d613
</ol></p>
<a name="version_3_38_1"></a>
<h3>2022-03-12 (3.38.1)</h3><p><ol class='lessindent'>
<li> Fix problems with the new Bloom filter optimization that might cause
some obscure queries to get an incorrect answer.
<li> Fix the <a href="lang_datefunc.html#localtime">localtime modifier</a> of the <a href="lang_datefunc.html">date and time functions</a> so that
it preserves fractional seconds.
<li> Fix the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
in corner cases such as when the argument is a virtual column or the
column of a view.
<li> Fix <a href="rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="vtab.html">virtual tables</a> so that they
work correctly even if the virtual table implementation relies on bytecode
to filter rows that do not satisfy the constraint.
<li> Other minor fixes to assert() statements, test cases, and documentation.
See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
for details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc
<li>SHA3-256 for sqlite3.c: 262ba071e960a8a0a6ce39307ae30244a2b0dc9fe1c4c09d0e1070d4353cd92c
</ol></p>
<a name="version_3_38_0"></a>
<h3>2022-02-22 (3.38.0)</h3><p><ol class='lessindent'>
<li> Added <a href="json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
The new operators are compatible with MySQL and PostgreSQL.
<li> The JSON functions are now built-ins. It is no longer necessary
to use the <a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
support. JSON is on by default. Disable the JSON interface using
the new <a href="compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
<li> Enhancements to <a href="lang_datefunc.html">date and time functions</a>:
<ol type="a">
<li> Added the <a href="lang_datefunc.html#uepch">unixepoch() function</a>.
<li> Added the <a href="lang_datefunc.html#automod">auto modifier</a> and the <a href="lang_datefunc.html#jdmod">julianday modifier</a>.
</ol>
<li> Rename the <a href="lang_corefunc.html#printf">printf() SQL function</a> to <a href="lang_corefunc.html#format">format()</a> for better
compatibility. The original printf() name is retained as an alias
for backwards compatibility.
<li> Added the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
help to localize an SQL error to a specific character in the input
SQL text, so that applications can provide better error messages.
<li> Enhanced the interface to <a href="vtab.html">virtual tables</a> as follows:
<ol type="a">
<li> Added the <a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
<li> Added the <a href="c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
<li> Added new operator types <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
and <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
<li> Added the <a href="c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
a virtual table to process <a href="lang_expr.html#in_op">IN operator</a> constraints all at once,
rather than processing each value of the right-hand side of the
IN operator separately.
</ol>
<li> <a href="cli.html">CLI</a> enhancements:
<ol type="a">
<li> <a href="cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
and newlines embedded in text.
<li> Added options like "--wrap N", "--wordwrap on", and "--quote"
to the <a href="cli.html#clmnr">columnar output modes</a>.
<li> Added the <a href="cli.html#qbox">.mode qbox</a> alias.
<li> The <a href="cli.html#csv">.import command</a> automatically disambiguates column names.
<li> Use the new <a href="c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
error messages.
</ol>
<li> Query planner enhancements:
<ol type="a">
<li> Use a Bloom filter to speed up large analytic queries.
<li> Use a balanced merge tree to evaluate UNION or UNION ALL
compound SELECT statements that have an ORDER BY clause.
</ol>
<li> The <a href="lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
<a href="schematab.html">sqlite_schema table</a> that do not parse when <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-02-22 18:58:40 40fa792d359f84c3b9e9d6623743e1a59826274e221df1bde8f47086968a1bab
<li>SHA3-256 for sqlite3.c: a69af0a88d59271a2dd3c846a3e93cbd29e7c499864f6c0462a3b4160bee1762
</ol></p>
<a name="version_3_37_2"></a>
<h3>2022-01-06 (3.37.2)</h3><p><ol class='lessindent'>
<li> Fix <a href="https://sqlite.org/forum/forumpost/b03d86f9516cb3a2">a bug</a> introduced
in <a href="#version_3_35_0">version 3.35.0</a> (2021-03-12) that
<a href="howtocorrupt.html#svptbug">can cause database corruption</a>
if a <a href="lang_savepoint.html">SAVEPOINT</a> is rolled back while in <a href="pragma.html#pragma_temp_store">PRAGMA temp_store=MEMORY</a> mode,
and other changes are made, and then the outer transaction commits.
<a href="https://sqlite.org/src/info/73c2b50211d3ae26">Check-in 73c2b50211d3ae26</a>
<li> Fix a long-standing problem with ON DELETE CASCADE and ON UPDATE CASCADE
in which a cache of the <a href="opcode.html">bytecode</a> used to implement the cascading change
was not being reset following a local DDL change.
<a href="https://sqlite.org/src/info/5232c9777fe4fb13">Check-in 5232c9777fe4fb13</a>.
<li> Other minor fixes that should not impact production builds.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
<li>SHA3-256 for sqlite3.c: 1bb01c382295cba85ec4685cedc52a7477cdae71cc37f1ad0f48719a17af1e1e
</ol></p>
<a name="version_3_37_1"></a>
<h3>2021-12-30 (3.37.1)</h3><p><ol class='lessindent'>
<li> Fix a bug introduced by the <a href="lang_upsert.html">UPSERT</a> enhancements of <a href="#version_3_35_0">version 3.35.0</a> that
can cause incorrect byte-code to be generated for some obscure but valid
SQL, possibly resulting in a NULL-pointer dereference.
<li> Fix an OOB read that can occur in <a href="fts5.html">FTS5</a> when reading corrupt database files.
<li> Improved robustness of the --safe option in the <a href="cli.html">CLI</a>.
<li> Other minor fixes to assert() statements and test cases.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-12-30 15:30:28 378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62
<li>SHA3-256 for sqlite3.c: 915afb3f29c2d217ea0c283326a9df7d505e6c73b40236f0b33ded91f812d174
</ol></p>
<a name="version_3_37_0"></a>
<h3>2021-11-27 (3.37.0)</h3><p><ol class='lessindent'>
<li> <a href="stricttables.html">STRICT tables</a> provide a prescriptive style of data type management,
for developers who prefer that kind of thing.
<li> When adding columns that contain a
<a href="lang_createtable.html#ckconst">CHECK constraint</a> or a <a href="gencol.html">generated column</a> containing a <a href="lang_createtable.html#notnullconst">NOT NULL constraint</a>,
the <a href="lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> now checks new constraints against
preexisting rows in the database and will only proceed if no constraints
are violated.
<li> Added the <a href="pragma.html#pragma_table_list">PRAGMA table_list</a> statement.
<li> <a href="cli.html">CLI</a> enhancements:
<ol type="a">
<li> Add the <a href="cli.html#dotconn">.connection</a> command, allowing the CLI to keep multiple database
connections open at the same time.
<li> Add the <a href="cli.html#safemode">--safe command-line option</a> that disables
<a href="cli.html#dotcmd">dot-commands</a> and SQL statements that might cause side-effects that extend
beyond the single database file named on the command-line.
<li> Performance improvements when reading SQL statements
that span many lines.
</ol>
<li> Added the <a href="c3ref/autovacuum_pages.html">sqlite3_autovacuum_pages()</a> interface.
<li> The <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> does not and has never worked for the TEMP
database. That limitation is now noted in the documentation.
<li> The query planner now omits ORDER BY clauses on subqueries and views
if removing those clauses does not change the semantics of the query.
<li> The <a href="series.html">generate_series</a> table-valued function extension is modified so that
the first parameter ("START") is now required. This is done as a way to
demonstrate how to write table-valued functions with required parameters.
The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
compile-time option.
<li> Added new <a href="c3ref/changes.html">sqlite3_changes64()</a> and <a href="c3ref/total_changes.html">sqlite3_total_changes64()</a> interfaces.
<li> Added the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a> flag option to <a href="c3ref/open.html">sqlite3_open_v2()</a>.
<li> Use less memory to hold the database schema.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-11-27 14:13:22 bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a
<li>SHA3-256 for sqlite3.c: a202a950ab401cda052e81259e96d6e64ad91faaaaf5690d769f64c2ab962f27
</ol></p>
<a name="version_3_36_0"></a>
<h3>2021-06-18 (3.36.0)</h3><p><ol class='lessindent'>
<li> Improvement to the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output to make it easier to
understand.
<li> Byte-order marks at the start of a token are skipped as if they
were whitespace.
<li> An error is raised on any attempt to access the <a href="lang_createtable.html#rowid">rowid</a> of a VIEW or subquery.
Formerly, the rowid of a VIEW would be indeterminate and often would be NULL.
The -DSQLITE_ALLOW_ROWID_IN_VIEW compile-time option is available to restore
the legacy behavior for applications that need it.
<li> The <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> and <a href="c3ref/serialize.html">sqlite3_serialize()</a> interfaces are now
enabled by default. The -DSQLITE_ENABLE_DESERIALIZE compile-time option is
no longer required. Instead, there is a new <a href="compile.html#omit_deserialize">-DSQLITE_OMIT_DESERIALIZE</a>
compile-time option to omit those interfaces.
<li> The "memdb" VFS now allows the same in-memory database to be shared among
multiple database connections in the same process as long as the
database name begins with "/".
<li> Back out the EXISTS-to-IN optimization (item 8b in the
<a href="#version_3_35_0">SQLite 3.35.0 change log</a>)
as it was found to slow down queries more often than speed them up.
<li> Improve the <a href="optoverview.html#constprop">constant-propagation optimization</a> so that it works on
non-join queries.
<li> The <a href="https://sqlite.org/src/file/ext/misc/regexp.c">REGEXP extension</a> is
now included in <a href="cli.html">CLI</a> builds.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5
<li>SHA3-256 for sqlite3.c: 2a8e87aaa414ac2d45ace8eb74e710935423607a8de0fafcb36bbde5b952d157
</ol></p>
<a name="version_3_35_5"></a>
<h3>2021-04-19 (3.35.5)</h3><p><ol class='lessindent'>
<li> Fix defects in the new ALTER TABLE DROP COLUMN feature that could
corrupt the database file.
<li> Fix an obscure query optimizer problem that might cause an incorrect
query result.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886
<li>SHA3-256 for sqlite3.c: e42291343e8f03940e57fffcf1631e7921013b94419c2f943e816d3edf4e1bbe
</ol></p>
<a name="version_3_35_4"></a>
<h3>2021-04-02 (3.35.4)</h3><p><ol class='lessindent'>
<li> Fix a defect in the query planner optimization identified by
item 8b above. Ticket
<a href="https://sqlite.org/src/info/de7db14784a08053">de7db14784a08053</a>.
<li> Fix a defect in the new <a href="lang_returning.html">RETURNING</a> syntax. Ticket
<a href="https://sqlite.org/src/info/132994c8b1063bfb">132994c8b1063bfb</a>.
<li> Fix the new <a href="lang_returning.html">RETURNING</a> feature so that it raises an error if one of
the terms in the RETURNING clause references a unknown table, instead
of silently ignoring that error.
<li> Fix an assertion associated with aggregate function processing that
was incorrectly triggered by the <a href="optoverview.html#pushdown">push-down optimization</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
<li>SHA3-256 for sqlite3.c: 528b8a26bf5ffd4c7b4647b5b799f86e8fb1a075f715b87a414e94fba3d09dbe
</ol></p>
<a name="version_3_35_3"></a>
<h3>2021-03-26 (3.35.3)</h3><p><ol class='lessindent'>
<li> Enhance the OP_OpenDup opcode of the <a href="opcode.html">bytecode engine</a> so that it works even if the
cursor being duplicated itself came from OP_OpenDup. Fix for
<a href="https://www.sqlite.org/src/info/bb8a9fd4a9b7fce5">ticket bb8a9fd4a9b7fce5</a>.
This problem only came to light due to the recent MATERIALIZED hint enhancement.
<li> When materializing correlated <a href="lang_with.html">common table expressions</a>, do so separately for each
use case, as that is required for correctness. This fixes a problem that was
introduced by the MATERIALIZED hint enhancement.
<li> Fix a problem in the filename normalizer of the unix <a href="vfs.html">VFS</a>.
<li> Fix the <a href="cli.html#dotmode">"box" output mode</a> in the <a href="cli.html">CLI</a> so that it works with statements that
returns one or more rows of zero columns (such as <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>).
<a href="https://sqlite.org/forum/forumpost/afbbcb5b72">Forum post afbbcb5b72</a>.
<li> Improvements to error messages generated by faulty common table expressions.
<a href="https://sqlite.org/forum/forumpost/aa5a0431c99e631">Forum post aa5a0431c99e</a>.
<li> Fix some incorrect assert() statements.
<li> Fix to the <a href="syntax/select-stmt.html">SELECT statement syntax diagram</a> so that the FROM clause
syntax is shown correctly.
<a href="https://sqlite.org/forum/forumpost/9ed02582fe">Forum post 9ed02582fe</a>.
<li> Fix the EBCDIC character classifier so that it understands newlines as whitespace.
<a href="https://sqlite.org/forum/forumpost/58540ce22dcd5fdcd">Forum post 58540ce22dcd</a>.
<li> Improvements the <a href="vtab.html#xbestindex">xBestIndex</a> method in the implementation of the
(unsupported) <a href="https://sqlite.org/src/file/ext/misc/wholenumber.c">wholenumber virtual table</a>
extension so that it does a better job of convincing the query planner to
avoid trying to materialize a table with an infinite number of rows.
<a href="https://sqlite.org/forum/forumpost/b52a020ce4">Forum post b52a020ce4</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a
<li>SHA3-256 for sqlite3.c: 91ca6c0a30ebfdba4420bb35f4fd9149d13e45fc853d86ad7527db363e282683
</ol></p>
<a name="version_3_35_2"></a>
<h3>2021-03-17 (3.35.2)</h3><p><ol class='lessindent'>
<li> Fix a problem in the
<a href="https://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a>
extension that was introduced into version 3.35.0.
<li> Ensure that date/time functions with no arguments (which generate
responses that depend on the current time) are treated as
<a href="deterministic.html">non-deterministic functions</a>. Ticket
<a href="https://sqlite.org/src/info/2c6c8689fb5f3d2f">2c6c8689fb5f3d2f</a>
<li> Fix a problem in the <a href="sqldiff.html">sqldiff</a> utility program having to do with
unusual whitespace characters in a <a href="vtab.html">virtual table</a> definition.
<li> Limit the new UNION ALL optimization described by item 8c in the
3.35.0 release so that it does not try to make too many new subqueries.
See <a href="https://sqlite.org/forum/forumpost/140a67d3d2">forum thread 140a67d3d2</a>
for details.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827
<li>SHA3-256 for sqlite3.c: e8edc7b1512a2e050d548d0840bec6eef83cc297af1426c34c0ee8720f378a11
</ol></p>
<a name="version_3_35_1"></a>
<h3>2021-03-15 (3.35.1)</h3><p><ol class='lessindent'>
<li> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
feature when used on columns that are indexed and that are quoted in the index
definition.
<li> Improve the built-in documentation for the <a href="cli.html#dump">.dump</a> command in the <a href="cli.html">CLI</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-03-15 16:53:57 aea12399bf1fdc76af43499d4624c3afa17c3e6c2459b71c195804bb98def66a
<li>SHA3-256 for sqlite3.c: fc79e27fd030226c07691b7d7c23aa81c8d46bc3bef5af39060e1507c82b0523
</ol></p>
<a name="version_3_35_0"></a>
<h3>2021-03-12 (3.35.0)</h3><p><ol class='lessindent'>
<li> Added <a href="lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
<a href="compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
<li> Added support for <a href="lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
<li> Generalize <a href="lang_upsert.html">UPSERT</a>:
<ol type="a">
<li> Allow multiple ON CONFLICT clauses that are evaluated in order,
<li> The final ON CONFLICT clause may omit the conflict target and
yet still use DO UPDATE.
</ol>
<li> Add support for the <a href="lang_returning.html">RETURNING</a> clause on <a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a>, and
<a href="lang_update.html">UPDATE</a> statements.
<li> Use less memory when running <a href="lang_vacuum.html">VACUUM</a> on databases containing very large
TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
or BLOB in memory all at once.
<li> Add support for the <a href="lang_with.html#mathint">MATERIALIZED</a> and <a href="lang_with.html#mathint">NOT MATERIALIZED</a> hints when
specifying <a href="lang_with.html">common table expressions</a>. The default behavior was
formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
CTEs that are used more than once.
<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
settings are modified so that they only control triggers and views
in the main database schema or in attached database schemas and not in
the TEMP schema. TEMP triggers and views are always allowed.
<li> Query planner/optimizer improvements:
<ol type="a">
<li> Enhancements to the <a href="optoverview.html#minmax">min/max optimization</a> so that it works better
with the IN operator and the OP_SeekScan optimization of the
previous release.
<li> Attempt to process EXISTS operators in the WHERE clause as if
they were IN operators, in cases where this is a valid transformation
and seems likely to improve performance.
<li> Allow UNION ALL sub-queries to be <a href="optoverview.html#flattening">flattened</a> even if the parent query is a join.
<li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
even if STAT4 is disabled.
<li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
involved in an outer join.
<li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
not modify any columns associated with the foreign key.
<li> Allow WHERE terms to be <a href="optoverview.html#pushdown">pushed down</a> into sub-queries
that contain window functions,
as long as the WHERE term is made up of entirely of constants and copies of expressions
found in the PARTITION BY clauses of all window functions in the sub-query.
</ol>
<li> <a href="cli.html">CLI</a> enhancements:
<ol type="a">
<li> Enhance the ".stats" command to accept new arguments "stmt" and
"vmstep", causing prepare statement statistics and only the
virtual-machine step count to be shown, respectively.
<li> Add the ".filectrl data_version" command.
<li> Enhance the ".once" and ".output" commands so that if the destination argument
begins with "|" (indicating that output is redirected into a pipe) then the
argument does not need to be quoted.
</ol>
<li> Bug fixes:
<ol type="a">
<li> Fix a potential NULL pointer dereference when processing a
syntactically incorrect SELECT statement with a correlated WHERE
clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
<li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
of version 3.33.0 that can cause an incorrect answer.
<li> Fix incorrect answers from the <a href="lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
is an "ESCAPE '_'" clause.
</ol>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
<li>SHA3-256 for sqlite3.c: 73a740d881735bef9de7f7bce8c9e6b9e57fe3e77fa7d76a6e8fc5c262fbaedf
</ol></p>
<a name="version_3_34_1"></a>
<h3>2021-01-20 (3.34.1)</h3><p><ol class='lessindent'>
<li> Fix a potential use-after-free bug when processing a a subquery with both
a correlated WHERE clause and a "HAVING 0" clause and where the parent
query is an aggregate.
<li> Fix documentation typos
<li> Fix minor problems in extensions.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
<li>SHA3-256 for sqlite3.c: 799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20
</ol></p>
<a name="version_3_34_0"></a>
<h3>2020-12-01 (3.34.0)</h3><p><ol class='lessindent'>
<li> Added the <a href="c3ref/txn_state.html">sqlite3_txn_state()</a> interface for reporting on the current
transaction state of the database connection.
<li> Enhance <a href="lang_with.html#recursivecte">recursive common table expressions</a> to support two or more
recursive terms as is done by SQL Server, since this helps make
<a href="lang_with.html#rcex3">queries against graphs</a> easier to write and faster to execute.
<li> Improved error messages on <a href="lang_createtable.html#ckconst">CHECK constraint</a> failures.
<li> <a href="cli.html">CLI</a> enhancements:
<ol type="a">
<li> The <a href="cli.html#dotread">.read</a> dot-command now accepts a pipeline in addition to
a filename.
<li> Added options --data-only and --nosys to the <a href="cli.html#dump">.dump</a> dot-command.
<li> Added the --nosys option to the <a href="cli.html#dschema">.schema</a> dot-command.
<li> Table name quoting works correctly for the <a href="cli.html#csv">.import</a> dot-command.
<li> The <a href="series.html">generate_series(START,END,STEP)</a> table-valued function
extension is now built into the CLI.
<li> The <a href="cli.html#dotdatabases">.databases</a> dot-command now shows the status of each database
file as determined by <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> and
<a href="c3ref/txn_state.html">sqlite3_txn_state()</a>.
<li> Added the --tabs command-line option that sets
<a href="cli.html#dotmode">.mode tabs</a>.
<li> The --init option reports an error if the file named as its argument
cannot be opened. The --init option also now honors the --bail option.
</ol>
<li> Query planner improvements:
<ol type="a">
<li> Improved estimates for the cost of running a DISTINCT operator.
<li> When doing an UPDATE or DELETE using a multi-column index where
only a few of the earlier columns of the index are useful for the
index lookup, postpone doing the main table seek until after all
WHERE clause constraints have been evaluated, in case those
constraints can be covered by unused later terms of the index,
thus avoiding unnecessary main table seeks.
<li> The new OP_SeekScan opcode is used to improve performance of
multi-column index look-ups when later columns are constrained
by an IN operator.
</ol>
<li> The <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> and <a href="lang_transaction.html#immediate">BEGIN EXCLUSIVE</a> commands now work even
if one or more attached database files are read-only.
<li> Enhanced <a href="fts5.html">FTS5</a> to support <a href="fts5.html#trigramidx">trigram indexes</a>.
<li> Improved performance of <a href="wal.html">WAL mode</a> locking primitives in cases where
there are hundreds of connections all accessing the same database file
at once.
<li> Enhanced the <a href="carray.html">carray() table-valued function</a> to include a single-argument
form that is bound using the auxiliary <a href="carray.html#onearg">sqlite3_carray_bind()</a> interface.
<li> The <a href="lang_corefunc.html#substr">substr() SQL function</a> can now also be called "substring()" for
compatibility with SQL Server.
<li> The <a href="syntaxdiagrams.html">syntax diagrams</a> are now implemented as
<a href='https://pikchr.org/'>Pikchr</a> scripts and rendered
as SVG for improved legibility and ease of maintenance.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
<li>SHA3-256 for sqlite3.c: fbd895b0655a337b2cd657675f314188a4e9fe614444cc63dfeb3f066f674514
</ol></p>
<a name="version_3_33_0"></a>
<h3>2020-08-14 (3.33.0)</h3><p><ol class='lessindent'>
<li> Support for <a href="lang_update.html#upfrom">UPDATE FROM</a> following the PostgreSQL syntax.
<li> Increase the maximum size of database files to 281 TB.
<li> Extended the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement so that it can optionally be
limited to verifying just a single table and its indexes, rather than the
entire database file.
<li> Added the <a href="floatingpoint.html#decext">decimal extension</a> for doing arbitrary-precision decimal arithmetic.
<li> Enhancements to the <a href="floatingpoint.html#ieee754ext">ieee754 extension</a> for working with IEEE 754 binary64 numbers.
<li> <a href="cli.html">CLI</a> enhancements:
<ol type="a">
<li> Added four new <a href="cli.html#dotmode">output modes</a>: "box", "json", "markdown",
and "table".
<li> The "column" output mode automatically expands columns to
contain the longest output row and automatically turns
".header" on if it has not been previously set.
<li> The "quote" output mode honors ".separator"
<li> The <a href="floatingpoint.html#decext">decimal extension</a> and the <a href="floatingpoint.html#ieee754ext">ieee754 extension</a> are built-in to the CLI
</ol>
<li> Query planner improvements:
<ol type="a">
<li> Add the ability to find a
full-index-scan query plan for queries using <a href="lang_indexedby.html">INDEXED BY</a>
which previously would fail with "no query solution".
<li> Do a better job of
detecting missing, incomplete, and/or dodgy <a href="fileformat2.html#stat1tab">sqlite_stat1</a>
data and generates good query plans in spite of the
misinformation.
<li> Improved performance of queries like "SELECT min(x) FROM t WHERE y IN (?,?,?)"
assuming an index on t(x,y).
</ol>
<li> In <a href="wal.html">WAL mode</a>, if a writer crashes and leaves the <a href="walformat.html#shm">shm file</a> in an inconsistent
state, subsequent transactions are now able to recover the shm file even if
there are active read transactions. Before this enhancement, shm file recovery
that scenario would result in an <a href="rescode.html#protocol">SQLITE_PROTOCOL</a> error.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f
<li>SHA3-256 for sqlite3.c: d00b7fffa6d33af2303430eaf394321da2960604d25a4471c7af566344f2abf9
</ol></p>
<a name="version_3_32_3"></a>
<h3>2020-06-18 (3.32.3)</h3><p><ol class='lessindent'>
<li> Various minor bug fixes including fixes for tickets
<a href="https://www.sqlite.org/src/info/8f157e8010b22af0">8f157e8010b22af0</a>,
<a href="https://www.sqlite.org/src/info/9fb26d37cefaba40">9fb26d37cefaba40</a>,
<a href="https://www.sqlite.org/src/info/e367f31901ea8700">e367f31901ea8700</a>,
<a href="https://www.sqlite.org/src/info/b706351ce2ecf59a">b706351ce2ecf59a</a>,
<a href="https://www.sqlite.org/src/info/7c6d876f84e6e7e2">7c6d876f84e6e7e2</a>, and
<a href="https://www.sqlite.org/src/info/c8d3b9f0a750a529">c8d3b9f0a750a529</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd
<li>SHA3-256 for sqlite3.c: b62b77ee1c561a69a71bb557694aaa5141f1714c1ff6cc1ba8aa8733c92d4f52
</ol></p>
<a name="version_3_32_2"></a>
<h3>2020-06-04 (3.32.2)</h3><p><ol class='lessindent'>
<li> Fix a long-standing bug in the byte-code engine that can cause a
<a href="lang_transaction.html">COMMIT</a> command report as success when in fact it failed
to commit. Ticket
<a href="https://www.sqlite.org/src/info/810dc8038872e212">810dc8038872e212</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c
<li>SHA3-256 for sqlite3.c: f17a2a57f7eebc72d405f3b640b4a49bcd02364a9c36e04feeb145eccafa3f8d
</ol></p>
<a name="version_3_32_1"></a>
<h3>2020-05-25 (3.32.1)</h3><p><ol class='lessindent'>
<li> Fix two long-standing bugs that allow malicious SQL statements
to crash the process that is running SQLite. These bugs were announced
by a third-party approximately 24 hours after the 3.32.0 release but are
not specific to the 3.32.0 release.
<li> Other minor compiler-warning fixes and whatnot.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2020-05-25 16:19:56 0c1fcf4711a2e66c813aed38cf41cd3e2123ee8eb6db98118086764c4ba83350
<li>SHA3-256 for sqlite3.c: f695ae21abf045e4ee77980a67ab2c6e03275009e593ee860a2eabf840482372
</ol></p>
<a name="version_3_32_0"></a>
<h3>2020-05-22 (3.32.0)</h3><p><ol class='lessindent'>
<li> Added support for <a href="lang_analyze.html#approx">approximate ANALYZE</a> using the
<a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command.
<li> Added the <a href="bytecodevtab.html">bytecode virtual table</a>.
<li> Add the <a href="cksumvfs.html">checksum VFS shim</a> to the set of run-time loadable
extensions included in the source tree.
<li> Added the <a href="lang_corefunc.html#iif">iif() SQL function</a>.
<li> INSERT and UPDATE statements now always apply <a href="datatype3.html#affinity">column affinity</a>
before computing <a href="lang_createtable.html#ckconst">CHECK constraints</a>. This bug fix could, in
theory, cause problems for legacy databases with unorthodox
CHECK constraints the require the input type for an INSERT
is different from the declared column type. See ticket
<a href="https://sqlite.org/src/info/86ba67afafded936">86ba67afafded936</a>
for more information.
<li> Added the <a href="c3ref/create_filename.html">sqlite3_create_filename()</a>, <a href="c3ref/create_filename.html">sqlite3_free_filename()</a>,
and <a href="c3ref/database_file_object.html">sqlite3_database_file_object()</a>
interfaces to better support of <a href="vfs.html#shim">VFS shim</a> implementations.
<li> Increase the <a href="limits.html#max_variable_number">default upper bound</a>
on the number of <a href="lang_expr.html#varparam">parameters</a> from 999 to 32766.
<li> Added code for the <a href="uintcseq.html">UINT collating sequence</a> as an optional
<a href="loadext.html">loadable extension</a>.
<li> Enhancements to the <a href="cli.html">CLI</a>:
<ol type="a">
<li> Add options to the <a href="cli.html#csv">.import</a> command: --csv, --ascii, --skip
<li> The <a href="cli.html#dump">.dump</a> command now accepts multiple LIKE-pattern arguments
and outputs the union of all matching tables.
<li> Add the .oom command in debugging builds
<li> Add the --bom option to the <a href="cli.html#dotexcel">.excel</a>, <a href="cli.html#dotoutput">.output</a>, and <a href="cli.html#dotoutput">.once</a>
commands.
<li> Enhance the .filectrl command to support the --schema option.
<li> The <a href="uintcseq.html">UINT collating sequence</a> extension is automatically loaded
</ol>
<li> The <a href="lang_expr.html#like">ESCAPE</a> clause of a <a href="lang_expr.html#like">LIKE</a> operator now overrides wildcard
characters, so that the behavior matches what PostgreSQL does.
<li>SQLITE_SOURCE_ID: 2020-05-22 17:46:16 5998789c9c744bce92e4cff7636bba800a75574243d6977e1fc8281e360f8d5a
<li>SHA3-256 for sqlite3.c: 33ed868b21b62ce1d0352ed88bdbd9880a42f29046497a222df6459fc32a356f
</ol></p>
<a name="version_3_31_1"></a>
<h3>2020-01-27 (3.31.1)</h3><p><ol class='lessindent'>
<li> Revert the data layout for an internal-use-only SQLite data structure.
Applications that use SQLite should never reference internal SQLite
data structures, but some do anyhow, and a change to one such
data structure in 3.30.0 broke a popular and widely-deployed
application. Reverting that change in SQLite, at least temporarily,
gives developers of misbehaving applications time to fix their code.
<li> Fix a typos in the sqlite3ext.h header file that prevented the
<a href="c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain()</a> and <a href="c3ref/value_blob.html">sqlite3_value_frombind()</a> interfaces
from being called from <a href="loadext.html">run-time loadable extensions</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
<li>SHA3-256 for sqlite3.c: de465c64f09529429a38cbdf637acce4dfda6897f93e3db3594009e0fed56d27
</ol></p>
<a name="version_3_31_0"></a>
<h3>2020-01-22 (3.31.0)</h3><p><ol class='lessindent'>
<li>Add support for <a href="gencol.html">generated columns</a>.
<li>Add the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface and the corresponding
<a href="pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a> command.
<li>Enhance the <a href="pragma.html#pragma_function_list">function_list pragma</a> to show the number of arguments on each
function, the type of function (scalar, aggregate, window), and the function
property flags <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>, <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>,
<a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>, and/or <a href="c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a>.
<li>Add the <a href="dbstat.html#dbstatagg">aggregated mode</a> feature to the
<a href="dbstat.html">DBSTAT virtual table</a>.
<li>Add the <a href="c3ref/open.html#opennofollow">SQLITE_OPEN_NOFOLLOW</a> option to <a href="c3ref/open.html">sqlite3_open_v2()</a> that
prevents SQLite from opening symbolic links.
<li>Added the "#-N" array notation for <a href="json1.html#jsonpath">JSON function path arguments</a>.
<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> connection setting which is
also controllable via the new <a href="pragma.html#pragma_trusted_schema">trusted_schema pragma</a> and at compile-time
using the <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA</a> compile-time option.
<li>Added APIs <a href="c3ref/filename_database.html">sqlite3_filename_database()</a>, <a href="c3ref/filename_database.html">sqlite3_filename_journal()</a>, and
<a href="c3ref/filename_database.html">sqlite3_filename_wal()</a> which are useful for specialized extensions.
<li>Add the <a href="c3ref/uri_boolean.html">sqlite3_uri_key()</a> interface.
<li>Upgraded the <a href="c3ref/uri_boolean.html">sqlite3_uri_parameter()</a> function so that it works with the
rollback journal or WAL filename in addition to the database filename.
<li>Provide the ability to tag <a href="appfunc.html">application-defined SQL functions</a> with
new properties <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a> or <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>.
<li>Add new verbs to <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> so that the <a href="vtab.html#xconnect">xConnect</a> method
of virtual tables can declare the virtual table as
<a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> or <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a>.
<li>Faster response to <a href="c3ref/interrupt.html">sqlite3_interrupt()</a>.
<li>Added the <a href="https://sqlite.org/src/file/ext/misc/uuid.c">uuid.c</a> extension module
implementing functions for processing RFC-4122 UUIDs.
<li>The <a href="malloc.html#lookaside">lookaside memory allocator</a> is enhanced to support two separate memory
pools with different sized allocations in each pool. This allows more memory
allocations to be covered by lookaside while at the same time reducing the
heap memory usage to 48KB per connection, down from 120KB.
<li>The <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> is deactivated. It is now a no-op. In its place,
the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a> is
provided. The legacy_file_format pragma is deactivated because (1) it is
rarely useful and (2) it is incompatible with <a href="lang_vacuum.html">VACUUM</a> in schemas that have
tables with both generated columns and descending indexes.
Ticket <a href="https://www.sqlite.org/src/info/6484e6ce678fffab">6484e6ce678fffab</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2020-01-22 18:38:59 f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824
<li>SHA3-256 for sqlite3.c: a5fca0b9f8cbf80ac89b97193378c719d4af4b7d647729d8df9c0c0fca7b1388
</ol></p>
<a name="version_3_30_1"></a>
<h3>2019-10-10 (3.30.1)</h3><p><ol class='lessindent'>
<li> Fix a bug in the <a href="optoverview.html#flattening">query flattener</a> that might cause a segfault
for nested queries that use the new
<a href="lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
Ticket <a href="https://www.sqlite.org/src/info/1079ad19993d13fa">1079ad19993d13fa</a>
<li> Cherrypick fixes for other obscure problems found since the 3.30.0
release
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
<li>SHA3-256 for sqlite3.c: f96fafe4c110ed7d77fc70a7d690e5edd1e64fefb84b3b5969a722d885de1f2d
</ol></p>
<a name="version_3_30_0"></a>
<h3>2019-10-04 (3.30.0)</h3><p><ol class='lessindent'>
<li> Add support for the <a href="lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
<li> Add support for the <a href="lang_select.html#nullslast">NULLS FIRST</a> and <a href="lang_select.html#nullslast">NULLS LAST</a> syntax in <a href="lang_select.html#orderby">ORDER BY</a> clauses.
<li> The <a href="pragma.html#pragma_index_info">index_info</a> and <a href="pragma.html#pragma_index_xinfo">index_xinfo</a> pragmas are enhanced to provide
information about the on-disk representation of <a href="withoutrowid.html">WITHOUT ROWID</a>
tables.
<li> Add the <a href="c3ref/drop_modules.html">sqlite3_drop_modules()</a> interface, allowing applications
to disable automatically loaded virtual tables that they do not
need.
<li> Improvements to the <a href="cli.html#recover">.recover dot-command</a> in the <a href="cli.html">CLI</a> so that
it recovers more content from corrupt database files.
<li> Enhance the <a href="rbu.html">RBU</a> extension to support <a href="expridx.html">indexes on expressions</a>.
<li> Change the schema parser so that it will error out if any of
the type, name, and tbl_name columns of the <a href="schematab.html">sqlite_master table</a>
have been corrupted and the database connection is not in
<a href="pragma.html#pragma_writable_schema">writable_schema</a> mode.
<li> The <a href="pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="pragma.html#pragma_module_list">PRAGMA module_list</a>, and
<a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a> commands are now
enabled in all builds by default. Disable them using
<a href="compile.html#omit_introspection_pragmas">-DSQLITE_OMIT_INTROSPECTION_PRAGMAS</a>.
<li> Add the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> option for <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
<li> Added the <a href="tclsqlite.html">TCL Interface</a> <a href="tclsqlite.html#config">config method</a> in order to be able to
disable <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> as well as control other
<a href="c3ref/db_config.html">sqlite3_db_config()</a> options from TCL.
<li> Added the <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag for
<a href="appfunc.html">application-defined SQL functions</a> to prevent those functions from
being used inside triggers and views.
<li> The legacy <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> compile-time option is now a no-op.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
<li>SHA3-256 for sqlite3.c: f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5
</ol></p>
<a name="version_3_29_0"></a>
<h3>2019-07-10 (3.29.0)</h3><p><ol class='lessindent'>
<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a>
actions to <a href="c3ref/db_config.html">sqlite3_db_config()</a> for activating and deactivating
the <a href="quirks.html#dblquote">double-quoted string literal</a> misfeature. Both default to "on"
for legacy compatibility, but developers are encouraged to turn them
"off", perhaps using the <a href="compile.html#dqs">-DSQLITE_DQS=0</a> compile-time option.
<li> <a href="compile.html#dqs">-DSQLITE_DQS=0</a> is now a <a href="compile.html#rcmd">recommended compile-time option</a>.
<li> Improvements to the <a href="optoverview.html">query planner</a>:
<ol type="a">
<li> Improved optimization of AND and OR operators when one or the other
operand is a constant.
<li> Enhancements to the <a href="optoverview.html#like_opt">LIKE optimization</a> for cases when the left-hand
side column has numeric affinity.
</ol>
<li> Added the "<a href="https://sqlite.org/src/file/ext/misc/dbdata.c">sqlite_dbdata</a>"
virtual table for extracting raw low-level content from an SQLite database,
even a database that is corrupt.
<li> Improvements to rounding behavior, so that the results of rounding
binary numbers using the <a href="lang_corefunc.html#round">round()</a> function are closer to what people
who are used to thinking in decimal actually expect.
<li> Enhancements to the <a href="cli.html">CLI</a>:
<ol type="a">
<li> Add the ".recover" command which tries to recover as much content
as possible from a corrupt database file.
<li> Add the ".filectrl" command useful for testing.
<li> Add the long-standing ".testctrl" command to the ".help" menu.
<li> Added the ".dbconfig" command
</ol>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6
<li>SHA3-256 for sqlite3.c: d9a5daf7697a827f4b2638276ce639fa04e8e8bb5fd3a6b683cfad10f1c81b12
</ol></p>
<a name="version_3_28_0"></a>
<h3>2019-04-16 (3.28.0)</h3><p><ol class='lessindent'>
<li> Enhanced <a href="windowfunctions.html">window functions</a>:
<ol type="a">
<li> Add support the <a href="windowfunctions.html#wexcls">EXCLUDE clause</a>.
<li> Add support for <a href="windowfunctions.html#wchaining">window chaining</a>.
<li> Add support for <a href="windowfunctions.html#grouptype">GROUPS frames</a>.
<li> Add support for "<a href="windowfunctions.html#exprrange"><expr> PRECEDING</a>" and
"<a href="windowfunctions.html#exprrange"><expr> FOLLOWING</a>" boundaries
in RANGE <a href="windowfunctions.html#framespec">frames</a>.
</ol>
<li> Added the new <a href="c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain(S)</a> interface for determining
whether or not a <a href="c3ref/stmt.html">prepared statement</a> is an <a href="lang_explain.html">EXPLAIN</a>.
<li> Enhanced <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> so that it works for read-only databases.
<li> New query optimizations:
<ol type="a">
<li> Enable the <a href="optoverview.html#like_opt">LIKE optimization</a> for cases when the ESCAPE keyword
is present and <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> is on.
<li> In queries that are driven by a <a href="partialindex.html">partial index</a>, avoid unnecessary
tests of the constraint named in the WHERE clause of the partial
index, since we know that constraint must always be true.
</ol>
<li> Enhancements to the <a href="tclsqlite.html">TCL Interface</a>:
<ol type="a">
<li> Added the -returntype option to the <a href="tclsqlite.html#function">function method</a>.
<li> Added the new <a href="tclsqlite.html#bind_fallback">bind_fallback method</a>.
</ol>
<li> Enhancements to the <a href="cli.html">CLI</a>:
<ol type="a">
<li> Added support for <a href="lang_expr.html#varparam">bound parameters</a> and the <a href="cli.html#param">.parameter command</a>.
<li> Fix the <a href="cli.html#fileio">readfile()</a> function so that it returns
an empty BLOB rather than throwing an out-of-memory error when
reading an empty file.
<li> Fix the <a href="cli.html#fileio">writefile()</a> function so that when it
creates new directories along the path of a new file, it gives them
umask permissions rather than the same permissions as the file.
<li> Change <a href="cli.html#arinsup">--update option</a> in the <a href="cli.html#sqlar">.archive command</a> so that it skips
files that are already in the archive and are unchanged. Add the
new --insert option that works like --update used to work.
</ol>
<li> Added the <a href="https://sqlite.org/src/file/ext/misc/fossildelta.c">fossildelta.c</a>
extension that can create, apply, and deconstruct the
<a href="https://fossil-scm.org/fossil/doc/trunk/www/delta_format.wiki">Fossil DVCS file delta format</a>
that is used by the <a href="rbu.html">RBU extension</a>.
<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">SQLITE_DBCONFIG_WRITABLE_SCHEMA</a> verb for the <a href="c3ref/db_config.html">sqlite3_db_config()</a>
interface, that does the same work as <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema</a> without using the
SQL parser.
<li> Added the <a href="c3ref/value_blob.html">sqlite3_value_frombind()</a> API for determining if the argument
to an SQL function is from a <a href="lang_expr.html#varparam">bound parameter</a>.
<li> Security and compatibilities enhancements to <a href="fts3.html#f3tknzr">fts3_tokenizer()</a>:
<ol type="a">
<li> The <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function always returns NULL
unless either the legacy application-defined FTS3 tokenizers interface
are enabled using
the <a href="c3ref/db_config.html">sqlite3_db_config</a>(<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>)
setting, or unless the first argument to fts3_tokenizer() is a <a href="lang_expr.html#varparam">bound parameter</a>.
<li> The two-argument version of <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> accepts a pointer to the
tokenizer method object even without
the <a href="c3ref/db_config.html">sqlite3_db_config</a>(<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>) setting
if the second argument is a <a href="lang_expr.html#varparam">bound parameter</a>
</ol>
<li> Improved robustness against corrupt database files.
<li> Miscellaneous performance enhancements
<li> Established a Git mirror of the offical SQLite source tree.
The canonical sources for SQLite are maintained using the
<a href="https://fossil-scm.org/">Fossil DVCS</a> at <a href="https://sqlite.org/src">https://sqlite.org/src</a>.
The Git mirror can be seen at <a href="https://github.com/sqlite/sqlite">https://github.com/sqlite/sqlite</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
<li>SHA3-256 for sqlite3.c: 411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9
</ol></p>
<a name="version_3_27_2"></a>
<h3>2019-02-25 (3.27.2)</h3><p><ol class='lessindent'>
<li> Fix a bug in the IN operator that was introduced by an
attempted optimization in version 3.27.0. Ticket
<a href="https://www.sqlite.org/src/info/df46dfb631f75694">df46dfb631f75694</a>
<li> Fix a bug causing a crash when a <a href="windowfunctions.html">window function</a> is misused. Ticket
<a href="https://www.sqlite.org/src/info/4feb3159c6bc3f7e33959">4feb3159c6bc3f7e33959</a>.
<li> Fix various documentation typos
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
<li>SHA3-256 for sqlite3.c: 1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7
</ol></p>
<a name="version_3_27_1"></a>
<h3>2019-02-08 (3.27.1)</h3><p><ol class='lessindent'>
<li> Fix a bug in the query optimizer: an adverse interaction between
the <a href="optoverview.html#or_opt">OR optimization</a> and the optimization that tries to use values
read directly from an <a href="expridx.html">expression index</a> instead of recomputing the
expression.
Ticket <a href="https://www.sqlite.org/src/info/4e8e4857d32d401f">4e8e4857d32d401f</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
<li>SHA3-256 for sqlite3.c: 11c14992660d5ac713ea8bea48dc5e6123f26bc8d3075fe5585d1a217d090233
</ol></p>
<a name="version_3_27_0"></a>
<h3>2019-02-07 (3.27.0)</h3><p><ol class='lessindent'>
<li>Added the <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> command
<li>Issue an SQLITE_WARNING message on the <a href="errlog.html">error log</a> if a
<a href="quirks.html#dblquote">double-quoted string literal</a> is used.
<li>The <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface works on any prepared statement
created using <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a>. It is no
longer necessary to use <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> with <a href="c3ref/c_prepare_normalize.html#sqlitepreparenormalize">SQLITE_PREPARE_NORMALIZE</a>
in order to use <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a>.
<li>Added the remove_diacritics=2 option to <a href="fts3.html">FTS3</a> and <a href="fts5.html">FTS5</a>.
<li>Added the <a href="c3ref/c_prepare_normalize.html#sqlitepreparenovtab">SQLITE_PREPARE_NO_VTAB</a> option to <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a>.
Use that option to prevent circular references to <a href="vtab.html#xshadowname">shadow tables</a> from
causing resource leaks.
<li>Enhancements to the <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> interface:
<ol type="a">
<li> Add the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="c3ref/file_control.html">file-control</a> for
setting an upper bound on the size of the in-memory database created
by sqlite3_deserialize. The default upper bound is 1GiB, or whatever
alternative value is specified by
<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>)
and/or <a href="compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a>.
<li> Honor the <a href="c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_READONLY</a> flag, which was previously described
in the documentation, but was previously a no-op.
<li> Enhance the "deserialize" command of the <a href="tclsqlite.html">TCL Interface</a> to give it
new "--maxsize N" and "--readonly BOOLEAN" options.
</ol>
<li>Enhancements to the <a href="cli.html">CLI</a>, mostly to support testing and debugging
of the SQLite library itself:
<ol type="a">
<li> Add support for ".open --hexdb". The
"<a href="https://sqlite.org/src/doc/trunk/tool/dbtotxt.md">dbtotxt</a>" utility
program used to generate the text for the "hexdb" is added to the
source tree.
<li> Add support for the "--maxsize N" option on ".open --deserialize".
<li> Add the "--memtrace" command-line option, to show all memory allocations
and deallocations.
<li> Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
bytecode program listing with indentation and
<a href="pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a> all in one step.
<li> Add the ".progress" command for accessing
the <a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface.
<li> Add the "--async" option to the ".backup" command.
<li> Add options "--expanded", "--normalized", "--plain", "--profile", "--row",
"--stmt", and "--close" to the ".trace" command.
</ol>
<li> Increased robustness against malicious SQL that is run against a
maliciously corrupted database.
<p><b>Bug fixes:</b>
<li>Do not use a partial index to do a table scan on an IN operator.
Ticket <a href="https://www.sqlite.org/src/info/1d958d90596593a774">1d958d90596593a774</a>.
<li>Fix the <a href="optoverview.html#flattening">query flattener</a> so that it works on queries that contain
subqueries that use <a href="windowfunctions.html">window functions</a>.
Ticket <a href="https://www.sqlite.org/src/info/f09fcd17810f65f717">709fcd17810f65f717</a>
<li>Ensure that ALTER TABLE modifies table and column names embedded in WITH
clauses that are part of views and triggers.
<li>Fix a parser bug that prevented the use of parentheses around table-valued
functions.
<li>Fix a problem with the <a href="optoverview.html#or_opt">OR optimization</a> on <a href="expridx.html">indexes on expressions</a>.
Ticket <a href="https://www.sqlite.org/src/info/d96eba87698a428c1d">d96eba87698a428c1d</a>.
<li>Fix a problem with the
<a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> in which the optimization
was being applied inappropriately due to an IS NOT NULL operator.
Ticket <a href="https://www.sqlite.org/src/info/5948e09b8c415bc45d">5948e09b8c415bc45d</a>.
<li>Fix the <a href="lang_replace.html">REPLACE</a> command so that it is no longer able to sneak a
NULL value into a NOT NULL column even if the NOT NULL column has a default
value of NULL.
Ticket <a href="https://www.sqlite.org/src/info/e6f1f2e34dceeb1ed6">e6f1f2e34dceeb1ed6</a>
<li>Fix a problem with the use of <a href="windowfunctions.html">window functions</a> used within
<a href="lang_expr.html#cosub">correlated subqueries</a>.
Ticket <a href="https://www.sqlite.org/src/info/d0866b26f83e9c55e3">d0866b26f83e9c55e3</a>
<li>Fix the <a href="lang_altertable.html#altertabmvcol">ALTER TABLE RENAME COLUMN</a> command so that it works for tables
that have redundant UNIQUE constraints.
Ticket <a href="https://www.sqlite.org/src/info/bc8d94f0fbd633fd9a">bc8d94f0fbd633fd9a</a>
<li>Fix a bug that caused <a href="lang_corefunc.html#zeroblob">zeroblob</a> values to be truncated when inserted into
a table that uses an <a href="expridx.html">expression index</a>.
Ticket <a href="https://www.sqlite.org/src/info/bb4bdb9f7f654b0bb9">bb4bdb9f7f654b0bb9</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2019-02-07 17:02:52 97744701c3bd414e6c9d7182639d8c2ce7cf124c4fce625071ae65658ac61713
"
<li>SHA3-256 for sqlite3.c: ca011a10ee8515b33e5643444b98ee3d74dc45d3ac766c3700320def52bc6aba
</ol></p>
<a name="version_3_26_0"></a>
<h3>2018-12-01 (3.26.0)</h3><p><ol class='lessindent'>
<li>Optimization: When doing an <a href="lang_update.html">UPDATE</a> on a table with <a href="expridx.html">indexes on expressions</a>,
do not update the expression indexes if they do not refer to any of the columns
of the table being updated.
<li>Allow the <a href="vtab.html#xbestindex">xBestIndex()</a> method of <a href="vtab.html">virtual table</a> implementations to return
<a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> to indicate that the proposed query plan is unusable and
should not be given further consideration.
<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> option which disables the ability to
create corrupt database files using ordinary SQL.
<li>Added support for read-only <a href="vtab.html#xshadowname">shadow tables</a> when the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a>
option is enabled.
<li>Added the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> command, which if enabled causes the
<a href="lang_altertable.html">ALTER TABLE</a> command to behave like older version of SQLite (prior to
version 3.25.0) for compatibility.
<li>Added <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> that works just like <a href="pragma.html#pragma_table_info">PRAGMA table_info</a>
except that it also shows <a href="vtab.html#hiddencol">hidden columns</a> in virtual tables.
<li>Added the <a href="https://sqlite.org/src/file/ext/misc/explain.c">explain virtual table</a>
as a run-time loadable extension.
<li>Add a limit counter to the query planner to prevent excessive
<a href="c3ref/prepare.html">sqlite3_prepare()</a> times for certain pathological SQL inputs.
<li>Added support for the <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface, when compiling
with SQLITE_ENABLE_NORMALIZE.
<li>Enhanced triggers so that they can use <a href="vtab.html#tabfunc2">table-valued functions</a> that
exist in schemas other than the schema where the trigger is defined.
<li>Enhancements to the <a href="cli.html">CLI</a>:
<ol type="a">
<li>Improvements to the ".help" command.
<li>The SQLITE_HISTORY environment variable, if it exists,
specifies the name of the command-line editing history file
<li>The --deserialize option associated with opening a new database cause the
database file to be read into memory and accessed using the
<a href="c3ref/deserialize.html">sqlite3_deserialize()</a> API. This simplifies running tests on a database
without modifying the file on disk.
</ol>
<li>Enhancements to the <a href="geopoly.html">geopoly</a> extension:
<ol type="a">
<li>Always stores polygons
using the binary format, which is faster and uses less space.
<li>Added the <a href="geopoly.html#regpoly">geopoly_regular()</a> function.
<li>Added the <a href="geopoly.html#ccw">geopoly_ccw()</a> function.
</ol>
<li>Enhancements to the <a href="sessionintro.html">session</a> extension:
<ol type="a">
<li>Added the <a href="session/c_changesetapply_fknoaction.html">SQLITE_CHANGESETAPPLY_INVERT</a> flag
<li>Added the <a href="session/sqlite3changeset_start.html">sqlite3changeset_start_v2()</a> interface and the
<a href="session/c_changesetstart_invert.html">SQLITE_CHANGESETSTART_INVERT</a> flag.
<li>Added the
<a href="https://sqlite.org/src/file/ext/session/changesetfuzz.c">changesetfuzz.c</a>
test-case generator utility.
</ol>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9"
<li>SHA3-256 for sqlite3.c: 72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4
</ol></p>
<a name="version_3_25_3"></a>
<h3>2018-11-05 (3.25.3)</h3><p><ol class='lessindent'>
<li> Disallow the use of <a href="windowfunctions.html">window functions</a> in the recursive part of
a CTE. Ticket <a href="https://sqlite.org/src/info/e8275b415a2f03bee">e8275b415a2f03bee</a>
<li> Fix the behavior of typeof() and length() on virtual tables. Ticket
<a href="https://sqlite.org/src/info/69d642332d25aa3b7315a6d385">69d642332d25aa3b7315a6d385</a>
<li> Strengthen defenses against deliberately corrupted database files.
<li> Fix a problem in the query planner that results when a row-value expression
is used with a PRIMARY KEY with redundant columns. Ticket
<a href="https://sqlite.org/src/info/1a84668dcfdebaf12415d">1a84668dcfdebaf12415d</a>
<li> Fix the query planner so that it works correctly for IS NOT NULL operators
in the ON clause of a LEFT JOIN with the SQLITE_ENABLE_STAT4 compile-time option.
<a href="https://sqlite.org/src/info/65eb38f6e46de8c75e188a17ec">65eb38f6e46de8c75e188a17ec</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2"
<li>SHA3-256 for sqlite3.c: 45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5
</ol></p>
<a name="version_3_25_2"></a>
<h3>2018-09-25 (3.25.2)</h3><p><ol class='lessindent'>
<li> Add the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command that causes the
"ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
and earlier: references to the renamed table inside the bodies of triggers
and views are not updated. This new pragma provides a compatibility
work around for older programs that expected the older, wonky behavior
of ALTER TABLE RENAME.
<li> Fix a problem with the new <a href="windowfunctions.html">window functions</a> implementation that caused
a malfunction when complicated expressions involving window functions were used
inside of a view.
<li> Fixes for various other compiler warnings and minor problems associated
with obscure configurations.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
<li>SHA3-256 for sqlite3.c: 34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
</ol></p>
<a name="version_3_25_1"></a>
<h3>2018-09-18 (3.25.1)</h3><p><ol class='lessindent'>
<li> Extra sanity checking added to ALTER TABLE in the 3.25.0 release
sometimes raises a false-positive
when the table being modified has a trigger that
updates a virtual table. The false-positive caused the ALTER
TABLE to rollback, thus leaving the schema unchanged.
Ticket <a href="https://sqlite.org/src/info/b41031ea2b537237">b41031ea2b537237</a>.
<li> The fix in the 3.25.0 release for the endless-loop in the byte-code
associated with the ORDER BY LIMIT optimization did not work for
some queries involving window functions. An additional correction
is required. Ticket
<a href="https://sqlite.org/src/info/510cde277783b5fb">510cde277783b5fb</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386"
<li>SHA3-256 for sqlite3.c: 1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06
</ol></p>
<a name="version_3_25_0"></a>
<h3>2018-09-15 (3.25.0)</h3><p><ol class='lessindent'>
<li> Add support for <a href="windowfunctions.html">window functions</a>
<li> Enhancements the <a href="lang_altertable.html">ALTER TABLE</a> command:
<ol type="a">
<li> Add support for renaming columns within a table using
ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
<li> Fix table rename feature so that it also updates references
to the renamed table in <a href="lang_createtrigger.html">triggers</a> and <a href="lang_createview.html">views</a>.
</ol>
<li> Query optimizer improvements:
<ol type="a">
<li> Avoid unnecessary loads of columns in an aggregate query that
are not within an aggregate function and that are not part
of the GROUP BY clause.
<li> The IN-early-out optimization: When doing a look-up on a
multi-column index and an IN operator is used on a column
other than the left-most column, then if no rows match against
the first IN value, check to make sure there exist rows that
match the columns to the right before continuing with the
next IN value.
<li> Use the transitive property to try to propagate constant
values within the WHERE clause. For example, convert
"a=99 AND b=a" into "a=99 AND b=99".
</ol>
<li> Use a separate mutex on every inode in the unix <a href="vfs.html">VFS</a>, rather than
a single mutex shared among them all, for slightly better concurrency
in multi-threaded environments.
<li> Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
of problems on the page freelist.
<li> Output infinity as 1e999 in the ".dump" command of the
<a href="cli.html">command-line shell</a>.
<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
<li> Added the <a href="geopoly.html">Geopoly module</a>
<p><b>Bug fixes:</b>
<li> The ORDER BY LIMIT optimization might have caused an infinite loop
in the byte code of the prepared statement under very obscure
circumstances,
due to a confluence of minor defects in the query optimizer.
Fix for ticket
<a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
<li> On an UPSERT when the order of constraint checks is rearranged,
ensure that the affinity transformations on the inserted content
occur before any of the constraint checks. Fix for ticket
<a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
<li> Avoid using a prepared statement for ".stats on" command of the
<a href="cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
<a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
<li> The LIKE optimization was generating incorrect byte-code and hence
getting the wrong answer
if the left-hand operand has numeric affinity and the right-hand-side
pattern is '/%' or if the pattern begins with the ESCAPE character.
Fix for ticket
<a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760"
<li>SHA3-256 for sqlite3.c: 989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d
</ol></p>
<a name="version_3_24_0"></a>
<h3>2018-06-04 (3.24.0)</h3><p><ol class='lessindent'>
<li> Add support for PostgreSQL-style <a href="lang_upsert.html">UPSERT</a>.
<li> Add support for <a href="rtree.html#auxcol">auxiliary columns in r-tree tables</a>.
<li> Add C-language APIs for discovering SQL keywords used by
SQLite: <a href="c3ref/keyword_check.html">sqlite3_keyword_count()</a>, <a href="c3ref/keyword_check.html">sqlite3_keyword_name()</a>, and
<a href="c3ref/keyword_check.html">sqlite3_keyword_check()</a>.
<li> Add C-language APIs for dynamic strings based on the
<a href="c3ref/str.html">sqlite3_str</a> object.
<li> Enhance <a href="lang_altertable.html">ALTER TABLE</a> so that it recognizes "true" and "false" as
valid arguments to DEFAULT.
<li> Add the sorter-reference optimization as a compile-time option.
Only available if compiled with SQLITE_ENABLE_SORTER_REFERENCES.
<li> Improve the format of the <a href="eqp.html">EXPLAIN QUERY PLAN</a> raw output, so that
it gives better information about the query plan and about the
relationships between the various components of the plan.
<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">SQLITE_DBCONFIG_RESET_DATABASE</a> option to the
<a href="c3ref/db_config.html">sqlite3_db_config()</a> API.
<p><b><a href="cli.html">CLI</a> Enhancements:</b>
<li> Automatically intercepts the raw <a href="eqp.html">EXPLAIN QUERY PLAN</a>
output and reformats it into an ASCII-art graph.
<li> Lines that begin with "#" and that are not in the middle of an
SQL statement are interpreted as comments.
<li> Added the --append option to the ".backup" command.
<li> Added the ".dbconfig" command.
<p><b>Performance:</b>
<li> <a href="lang_update.html">UPDATE</a> avoids unnecessary low-level disk writes when the contents
of the database file do not actually change.
For example, "UPDATE t1 SET x=25 WHERE y=?" generates no extra
disk I/O if the value in column x is already 25. Similarly,
when doing <a href="lang_update.html">UPDATE</a> on records that span multiple pages, only
the subset of pages that actually change are written to disk.
This is a low-level performance optimization only and does not
affect the behavior of TRIGGERs or other higher level SQL
structures.
<li> Queries that use ORDER BY and LIMIT now try to avoid computing
rows that cannot possibly come in under the LIMIT. This can greatly
improve performance of ORDER BY LIMIT queries, especially when the
LIMIT is small relative to the number of unrestricted output rows.
<li> The <a href="optoverview.html#or_opt">OR optimization</a> is allowed to proceed
even if the OR expression has also been converted into an IN
expression. Uses of the OR optimization are now also
<a href="eqp.html#or-opt">more clearly shown</a> in the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output.
<li> The query planner is more aggressive about using
<a href="optoverview.html#autoindex">automatic indexes</a> for views and subqueries for which it is
not possible to create a persistent index.
<li> Make use of the one-pass UPDATE and DELETE query plans in the
<a href="rtree.html">R-Tree extension</a> where appropriate.
<li> Performance improvements in the LEMON-generated parser.
<p><b>Bug fixes:</b>
<li> For the right-hand table of a LEFT JOIN, compute the values
of expressions directly rather than loading precomputed values
out of an <a href="expridx.html">expression index</a> as the expression index might
not contain the correct value. Ticket
<a href="https://sqlite.org/src/info/7fa8049685b50b5aeb0c2">7fa8049685b50b5aeb0c2</a>
<li> Do not attempt to use terms from the WHERE clause to enable
indexed lookup of the right-hand table of a LEFT JOIN. Ticket
<a href="https://sqlite.org/src/info/4ba5abf65c5b0f9a96a7a">4ba5abf65c5b0f9a96a7a</a>
<li> Fix a memory leak that can occur following a failure to open error
in the <a href="csv.html">CSV virtual table</a>
<li> Fix a long-standing problem wherein a corrupt schema on the
<a href="fileformat2.html#seqtab">sqlite_sequence</a> table used by <a href="autoinc.html">AUTOINCREMENT</a> can lead to
a crash. Ticket
<a href="https://www.sqlite.org/src/info/d8dc2b3a58cd5dc29">d8dc2b3a58cd5dc2918a1</a>
<li> Fix the <a href="json1.html#jeach">json_each()</a> function so that it returns
valid results on its "fullkey" column when the input is a simple value
rather than an array or object.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca"
<li>SHA3-256 for sqlite3.c: 0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c
</ol></p>
<a name="version_3_23_1"></a>
<h3>2018-04-10 (3.23.1)</h3><p><ol class='lessindent'>
<li> Fix two problems in the new <a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a>.
Tickets <a href="https://sqlite.org/src/info/1e39b966ae9ee739">1e39b966ae9ee739</a>
and <a href="https://sqlite.org/src/info/fac496b61722daf2">fac496b61722daf2</a>.
<li> Fix misbehavior of the FTS5 xBestIndex method. Ticket
<a href="https://sqlite.org/src/info/2b8aed9f7c9e61e8">2b8aed9f7c9e61e8</a>.
<li> Fix a harmless reference to an uninitialized virtual machine register.
Ticket <a href="https://sqlite.org/src/info/093420fc0eb7cba7">093420fc0eb7cba7</a>.
<li> Fix the <a href="cli.html">CLI</a> so that it builds with -DSQLITE_UNTESTABLE
<li> Fix the <a href="https://sqlite.org/src/file/ext/misc/eval.c">eval.c</a> extension
so that it works with <a href="pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks=ON</a>.
<li> Fix the <a href="series.html">generate_series</a> virtual table so that it correctly returns
no rows if any of its constraints are NULL.
<li> Performance enhancements in the parser.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
<li>SHA3-256 for sqlite3.c: 65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
</ol></p>
<a name="version_3_23_0"></a>
<h3>2018-04-02 (3.23.0)</h3><p><ol class='lessindent'>
<li> Add the <a href="c3ref/serialize.html">sqlite3_serialize()</a> and <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> interfaces when
the <a href="compile.html#enable_deserialize">SQLITE_ENABLE_DESERIALIZE</a> compile-time option is used.
<li> Recognize TRUE and FALSE as constants. (For compatibility, if there
exist columns named "true" or "false", then the identifiers refer to the
columns rather than Boolean constants.)
<li> Support operators IS TRUE, IS FALSE, IS NOT TRUE, and IS NOT FALSE.
<li> Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">SQLITE_DBSTATUS_CACHE_SPILL</a> option to <a href="c3ref/db_status.html">sqlite3_db_status()</a> for
reporting the number of cache spills that have occurred.
<li> The "alternate-form-2" flag ("!") on the <a href="printf.html">built-in printf</a> implementation
now causes string substitutions to measure the width and precision in
characters instead of bytes.
<li> If the <a href="vtab.html#xcolumn">xColumn</a> method in a <a href="vtab.html">virtual table</a> implementation returns
an error message using <a href="c3ref/result_blob.html">sqlite3_result_error()</a> then give that error
message preference over internally-generated messages.
<li> Added the -A command-line option to the <a href="cli.html">CLI</a> to make it easier to manage
<a href="sqlar.html">SQLite Archive files</a>.
<li> Add support for INSERT OR REPLACE, INSERT OR IGNORE, and UPDATE OR REPLACE
in the <a href="zipfile.html">Zipfile virtual table</a>.
<li> Enhance the <a href="session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> interface so that it is hardened
against attacks from deliberately corrupted <a href="sessionintro.html#changeset">changeset</a> objects.
<li> Added the <a href="https://sqlite.org/src/file/ext/misc/normalize.c">sqlite3_normalize()</a>
extension function.
<li> Query optimizer enhancements:
<ol type='a'>
<li> Improve the <a href="optoverview.html#omitnoopjoin">omit-left-join optimization</a> so that it works in cases where
the right-hand table is UNIQUE but not necessarily NOT NULL.
<li> Improve the <a href="optoverview.html#pushdown">push-down optimization</a> so that it works for many LEFT JOINs.
<li> Add the <a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> that converts a LEFT
JOIN into an ordinary JOIN if there exist terms in the WHERE clause
that would prevent the extra all-NULL row of the LEFT JOIN from
appearing in the output set.
<li> Avoid unnecessary writes to the sqlite_sequence table when an
<a href="autoinc.html">AUTOINCREMENT</a> table is updated with an rowid that is less than the
maximum.
</ol>
<li> Bug fixes:
<ol type='a'>
<li> Fix the parser to accept valid <a href="rowvalue.html">row value</a> syntax.
Ticket <a href="https://www.sqlite.org/src/info/7310e2fb3d046a5">7310e2fb3d046a5</a>
<li> Fix the query planner so that it takes into account dependencies in
the arguments to table-valued functions in subexpressions in
the WHERE clause.
Ticket <a href="https://www.sqlite.org/src/info/80177f0c226ff54">80177f0c226ff54</a>
<li> Fix incorrect result with complex OR-connected WHERE and STAT4.
Ticket <a href="https://www.sqlite.org/src/info/ec32177c99ccac2">ec32177c99ccac2</a>
<li> Fix potential corruption in <a href="expridx.html">indexes on expressions</a> due to automatic
datatype conversions.
Ticket <a href="https://www.sqlite.org/src/info/343634942dd54ab">343634942dd54ab</a>
<li> Assertion fault in FTS4.
Ticket <a href="https://www.sqlite.org/src/info/d6ec09eccf68cfc">d6ec09eccf68cfc</a>
<li> Incorrect result on the less-than operator in <a href="rowvalue.html">row values</a>.
Ticket <a href="https://www.sqlite.org/src/info/f484b65f3d62305">f484b65f3d62305</a>
<li> Always interpret non-zero floating-point values as TRUE, even if
the integer part is zero.
Ticket <a href="https://www.sqlite.org/src/info/36fae083b450e3a">36fae083b450e3a</a>
<li> Fix an issue in the fsdir(PATH) <a href="vtab.html#tabfunc2">table-valued function</a> to the
<a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
that caused a segfault if the fsdir() table was used as the inner table
of a join. Problem reported on the mailing list and fixed by check-in
<a href="https://www.sqlite.org/src/info/7ce4e71c1b7251be">7ce4e71c1b7251be</a>
<li> Issue an error rather instead of an assertion-fault or null-pointer
dereference when the sqlite_master table is corrupted so that the
sqlite_sequence table root page is really a btree-index page. Check-in
<a href="https://www.sqlite.org/src/info/525deb7a67fbd647">525deb7a67fbd647</a>
<li> Fix the <a href="lang_analyze.html">ANALYZE</a> command so that it computes statistics on tables
whose names begin with "sqlite". Check-in
<a href="https://sqlite.org/src/info/0249d9aecf69948d">0249d9aecf69948d</a>
</ol>
<li> Additional fixes for issues detected by
<a href="https://github.com/google/oss-fuzz">OSSFuzz</a>:
<ol type='a'>
<li> Fix a possible infinite loop on VACUUM for corrupt database files.
Check-in <a href="https://www.sqlite.org/src/info/27754b74ddf64">27754b74ddf64</a>
<li> Disallow <a href="lang_expr.html#varparam">parameters</a> in the <a href="lang_with.html">WITH clause</a> of triggers and views.
Check-in <a href="https://www.sqlite.org/src/info/b918d4b4e546d">b918d4b4e546d</a>
<li> Fix a potential memory leak in <a href="rowvalue.html">row value</a> processing.
Check-in <a href="https://www.sqlite.org/src/info/2df6bbf1b8ca8">2df6bbf1b8ca8</a>
<li> Improve the performance of the <a href="lang_corefunc.html#replace">replace() SQL function</a> for cases where
there are many substitutions on megabyte-sized strings, in an attempt
to avoid OSSFuzz timeouts during testing.
Check-in <a href="https://www.sqlite.org/src/info/fab2c2b07b5d3">fab2c2b07b5d3</a>
<li> Provide an appropriate error message when the sqlite_master table
contains a CREATE TABLE AS statement. Formerly this caused either an
assertion fault or null pointer dereference. Problem found by OSSFuzz
on the GDAL project. Check-in
<a href="https://www.sqlite.org/src/info/d75e67654aa96">d75e67654aa96</a>
<li> Incorrect assert() statement removed. Check-in
<a href="https://www.sqlite.org/src/info/823779d31eb09cda">823779d31eb09cda</a>.
<li> Fix a problem with using the <a href="optoverview.html#like_opt">LIKE optimization</a> on an
<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>. Check-in
<a href="https://www.sqlite.org/src/info/b850dd159918af56">b850dd159918af56</a>.
</ol>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2"
<li>SHA3-256 for sqlite3.c: 4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa
</ol></p>
<a name="version_3_22_0"></a>
<h3>2018-01-22 (3.22.0)</h3><p><ol class='lessindent'>
<li> The output of <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> now shows each individual SQL statement
run within a trigger.
<li> Add the ability to read from <a href="wal.html">WAL mode</a> databases even if the application
lacks write permission on the database and its containing directory, as long as
the -shm and -wal files exist in that directory.
<li> Added the <a href="rtree.html#rtreecheck">rtreecheck()</a> scalar SQL function to the <a href="rtree.html">R-Tree extension</a>.
<li> Added the <a href="c3ref/vtab_nochange.html">sqlite3_vtab_nochange()</a> and <a href="c3ref/value_blob.html">sqlite3_value_nochange()</a> interfaces
to help virtual table implementations optimize UPDATE operations.
<li> Added the <a href="c3ref/vtab_collation.html">sqlite3_vtab_collation()</a> interface.
<li> Added support for the <a href="fts5.html#carrotq">"^" initial token syntax</a> in FTS5.
<li> New extensions:
<ol type='a'>
<li> The <a href="zipfile.html">Zipfile virtual table</a> can read and write a
<a href="https://en.wikipedia.org/wiki/Zip_(file_format)">ZIP Archive</a>.
<li> Added the fsdir(PATH) <a href="vtab.html#tabfunc2">table-valued function</a> to the
<a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
for listing the files in a directory.
<li> The <a href="https://sqlite.org/src/file/ext/misc/btreeinfo.c">sqlite_btreeinfo</a>
eponymous virtual table for introspecting and estimating the sizes of
the btrees in a database.
<li> The <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> is a
<a href="vfs.html#shim">VFS shim</a> that allows an SQLite database to be appended to some other
file. This allows (for example) a database to be appended to an
executable that then opens and reads the database.
</ol>
<li> Query planner enhancements:
<ol type='a'>
<li> The optimization that uses an index to quickly compute an
aggregate min() or max() is extended to work with
<a href="expridx.html">indexes on expressions</a>.
<li> The decision of whether to implement a FROM-clause subquery
as a co-routine or using <a href="optoverview.html#flattening">query flattening</a>
now considers whether
the result set of the outer query is "complex" (if it
contains functions or expression subqueries). A complex result
set biases the decision toward the use of co-routines.
<li> The planner avoids query plans that use indexes with unknown
collating functions.
<li> The planner omits unused LEFT JOINs even if they are not the
right-most joins of a query.
</ol>
<li> Other performance optimizations:
<ol type='a'>
<li> A smaller and faster implementation of text to floating-point
conversion subroutine: sqlite3AtoF().
<li> The <a href="lemon.html">Lemon parser generator</a> creates a faster parser.
<li> Use the strcspn() C-library routine to speed up the LIKE and
GLOB operators.
</ol>
<li> Improvements to the <a href="cli.html">command-line shell</a>:
<ol type='a'>
<li> The ".schema" command shows the structure of virtual tables.
<li> Added support for reading and writing
<a href="sqlar.html">SQLite Archive</a> files using
the <a href="cli.html#sqlar">.archive command</a>.
<li> Added the experimental <a href="cli.html#expert">.expert command</a>
<li> Added the ".eqp trigger" variant of the ".eqp" command
<li> Enhance the ".lint fkey-indexes" command so that it works with
<a href="withoutrowid.html">WITHOUT ROWID</a> tables.
<li> If the filename argument to the shell is a ZIP archive rather than
an SQLite database, then the shell automatically opens that ZIP
archive using the <a href="zipfile.html">Zipfile virtual table</a>.
<li> Added the <a href="cli.html#editfunc">edit() SQL function</a>.
<li> Added the <a href="cli.html#exexcel*">.excel command</a> to simplify exporting
database content to a spreadsheet.
<li> Databases are opened using
<a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> when
the --append flag is used on the command line or with the
.open command.
</ol>
<li> Enhance the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a> compile-time option so
that it works for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
<li> Provide the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function that returns
the byte offset into the database file to the beginning of the record
holding value X, when compiling with <a href="compile.html#enable_offset_sql_func">-DSQLITE_ENABLE_OFFSET_SQL_FUNC</a>.
<li> Bug fixes:
<ol type='a'>
<li> Infinite loop on an UPDATE that uses an OR operator in the WHERE clause.
Problem introduced with 3.17.0 and reported on the mailing list about
one year later. Ticket
<a href="https://www.sqlite.org/src/info/47b2581aa9bfecec">47b2581aa9bfecec</a>.
<li> Incorrect query results when the skip-ahead-distinct optimization is
used.
Ticket <a href="https://sqlite.org/src/info/ef9318757b152e3a">ef9318757b152e3a</a>.
<li> Incorrect query results on a join with a ORDER BY DESC. Ticket
<a href="https://sqlite.org/src/info/123c9ba32130a6c9">123c9ba32130a6c9</a>.
<li> Inconsistent result set column names between CREATE TABLE AS
and a simple SELECT. Ticket
<a href="https://sqlite.org/src/info/3b4450072511e621">3b4450072511e621</a>
<li> Assertion fault when doing REPLACE on an index on an expression.
Ticket <a href="https://sqlite.org/src/info/dc3f932f5a147771">dc3f932f5a147771</a>
<li> Assertion fault when doing an IN operator on a constant index.
Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddcab">aa98619ad08ddcab</a>
</ol>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d"
<li>SHA3-256 for sqlite3.c: 206df47ebc49cd1710ac0dd716ce5de5854826536993f4feab7a49d136b85069
</ol></p>
<a name="version_3_21_0"></a>
<h3>2017-10-24 (3.21.0)</h3><p><ol class='lessindent'>
<li> Take advantage of the atomic-write capabilities in the
<a href="https://en.wikipedia.org/wiki/F2FS">F2FS filesystem</a> when available, for
greatly reduced transaction overhead. This currently requires the
<a href="compile.html#enable_batch_atomic_write">SQLITE_ENABLE_BATCH_ATOMIC_WRITE</a> compile-time option.
<li> Allow <a href="lang_attach.html">ATTACH</a> and <a href="lang_detach.html">DETACH</a> commands to work inside of a transaction.
<li> Allow <a href="vtab.html#worid">WITHOUT ROWID virtual tables</a> to be writable if the PRIMARY KEY
contains exactly one column.
<li> The "fsync()" that occurs after the header is written in a WAL reset
now uses the sync settings for checkpoints. This means it will use a
"fullfsync" on macs if <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a> set on.
<li> The <a href="c3ref/libversion.html">sqlite3_sourceid()</a> function tries to detect if the source code has
been modified from what is checked into version control and if there are
modifications, the last four characters of the version hash are shown as
"alt1" or "alt2". The objective is to detect accidental and/or careless
edits. A forger can subvert this feature.
<li> Improved de-quoting of column names for <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> statements with
an aggregate query on the right-hand side.
<li> Fewer "stat()" system calls issued by the unix VFS.
<li> Enhanced the <a href="optoverview.html#like_opt">LIKE optimization</a> so that it works with an <a href="lang_expr.html#like">ESCAPE</a> clause.
<li> Enhanced <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> to detect obscure
row corruption that they were formerly missing. Also update both pragmas
so that they return error text rather than SQLITE_CORRUPT when encountering
corruption in <a href="fileformat2.html#record_format">records</a>.
<li> The query planner now prefers to implement FROM-clause subqueries using
<a href="optoverview.html#coroutines">co-routines</a> rather using the <a href="optoverview.html#flattening">query flattener</a> optimization. Support for
the use of co-routines for subqueries may no longer be disabled.
<li> Pass information about !=, IS, IS NOT, NOT NULL, and IS NULL constraints
into the <a href="vtab.html#xbestindex">xBestIndex</a> method of virtual tables.
<li> Enhanced the <a href="csv.html">CSV virtual table</a> so that it accepts the last row of
input if the final new-line character is missing.
<li> Remove the rarely-used "scratch" memory allocator. Replace it with the
<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc">SQLITE_CONFIG_SMALL_MALLOC</a> configuration setting that gives SQLite
a hint that large memory allocations should be avoided when possible.
<li> Added the
<a href="https://sqlite.org/src/file/ext/misc/unionvtab.c">swarm virtual table</a>
to the existing union virtual table extension.
<li> Added the
<a href="https://sqlite.org/src/file/src/dbpage.c">sqlite_dbpage virtual table</a>
for providing direct access to pages
of the database file. The source code is built into the <a href="amalgamation.html">amalgamation</a> and
is activated using the <a href="compile.html#enable_dbpage_vtab">-DSQLITE_ENABLE_DBPAGE_VTAB</a> compile-time option.
<li> Add a new type of fts5vocab virtual table - "instance" - that provides
direct access to an FTS5 full-text index at the lowest possible level.
<li> Remove a call to rand_s() in the Windows VFS since it was causing problems
in Firefox on some older laptops.
<li> The <a href="https://sqlite.org/src/finfo?name=src/shell.c">src/shell.c</a> source code
to the <a href="cli.html">command-line shell</a> is no longer under version control. That file
is now generated as part of the build process.
<li> Miscellaneous <a href="cpu.html#microopt">microoptimizations</a> reduce CPU usage by about 2.1%.
<li> Bug fixes:
<ol type="a">
<li> Fix a faulty assert() statement discovered by OSSFuzz.
Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
<li> Fix an obscure memory leak in <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>.
Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b">7486aa54b968e9b</a>
<li> Avoid a possible use-after-free error by deferring schema resets until
after the query planner has finished running.
Ticket <a href="https://sqlite.org/src/info/be436a7f4587ce5">be436a7f4587ce5</a>
<li> Only use indexes-on-expressions to optimize ORDER BY or GROUP BY if
the COLLATE is correct.
Ticket <a href="https://sqlite.org/src/info/e20dd54ab0e4383">e20dd54ab0e4383</a>
<li> Fix an assertion fault that was coming up when the expression in an
index-on-expressions is really a constant.
Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddca">aa98619ad08ddca</a>
<li> Fix an assertion fault that could occur following
<a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a>.
Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
<li> Fix a segfault that can occur for queries that use table-valued functions
in an IN or EXISTS subquery.
Ticket <a href="https://sqlite.org/src/info/b899b6042f97f5">b899b6042f97f5</a>
<li> Fix a potential integer overflow problem when compiling a particular
horrendous common table expression. This was another problem discovered
by OSSFuzz. Check-in <a href="https://sqlite.org/src/info/6ee8cb6ae5">6ee8cb6ae5</a>.
<li> Fix a potential out-of-bound read when querying a corrupt database file,
a problem detected by Natalie Silvanovich of Google Project Zero.
Check-in <a href="https://sqlite.org/src/info/04925dee41a21f">04925dee41a21f</a>.
</ol>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
<li>SHA3-256 for sqlite3.c: 84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03
</ol></p>
<a name="version_3_20_1"></a>
<h3>2017-08-24 (3.20.1)</h3><p><ol class='lessindent'>
<li> Fix a potential memory leak in the new <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> interface.
Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b5">7486aa54b968e9b5</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34"
<li>SHA3-256 for sqlite3.c: 93b1a6d69b48dc39697d1d3a1e4c30b55da0bdd2cad0c054462f91081832954a
</ol></p>
<a name="version_3_20_0"></a>
<h3>2017-08-01 (3.20.0)</h3><p><ol class='lessindent'>
<li> Update the text of error messages returned by <a href="c3ref/errcode.html">sqlite3_errmsg()</a> for some
error codes.
<li> Add new <a href="bindptr.html">pointer passing interfaces</a>.
<li> Backwards-incompatible changes to some extensions in order to take
advantage of the improved security offered by the new
<a href="bindptr.html">pointer passing interfaces</a>:
<ol type='a'>
<li> <a href="fts5.html#extending_fts5">Extending FTS5</a> → requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to find
the fts5_api pointer.
<li> <a href="carray.html">carray(PTR,N)</a> → requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
<li> <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
→ requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
</ol>
<li> Added the <a href="stmt.html">SQLITE_STMT virtual table</a> extension.
<li> Added the <a href="completion.html">COMPLETION extension</a> - designed to suggest
tab-completions for interactive user interfaces. This is a work in progress.
Expect further enhancements in future releases.
<li> Added the <a href="unionvtab.html">UNION virtual table</a> extension.
<li> The built-in <a href="lang_datefunc.html">date and time functions</a> have been enhanced so that they can be
used in <a href="lang_createtable.html#ckconst">CHECK constraints</a>, in <a href="expridx.html">indexes on expressions</a>, and in the WHERE clauses
of <a href="partialindex.html">partial indexes</a>, provided that they do not use the 'now', 'localtime', or
'utc' keywords. <a href="deterministic.html#dtexception">More information</a>.
<li> Added the <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> and <a href="c3ref/prepare.html">sqlite3_prepare16_v3()</a> interfaces
with the extra "prepFlags" parameters.
<li> Provide the <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_PERSISTENT</a> flag for <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> and
use it to limit <a href="malloc.html#lookaside">lookaside memory</a> misuse by <a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a>, and the
<a href="rtree.html">R-Tree extension</a>.
<li> Added the <a href="pragma.html#pragma_secure_delete">PRAGMA secure_delete=FAST</a> command. When secure_delete is
set to FAST, old content is overwritten with zeros as long as that does
not increase the amount of I/O. Deleted content might still persist on
the <a href="fileformat2.html#freelist">free-page list</a> but will be purged from all b-tree pages.
<li> Enhancements to the <a href="cli.html">command-line shell</a>:
<ol type='a'>
<li> Add support for tab-completion using the <a href="completion.html">COMPLETION extension</a>, for
both readline and linenoise.
<li> Add the ".cd" command.
<li> Enhance the "<a href="cli.html#dschema">.schema</a>" command to show the schema of all attached
databases.
<li> Enhance "<a href="cli.html#dtables">.tables</a>" so that it shows the schema names for all attached
if the name is anything other than "main".
<li> The "<a href="cli.html#csv">.import</a>" command ignores an initial UTF-8 BOM.
<li> Added the "--newlines" option to the "<a href="cli.html#dump">.dump</a>" command to cause U+000a and
U+000d characters to be output literally rather than escaped using the
<a href="lang_corefunc.html#replace">replace()</a> function.
</ol>
<li> Query planner enhancements:
<ol type='a'>
<li> When generating individual loops for each ORed term of an OR scan,
move any constant WHERE expressions outside of the loop, as is
done for top-level loops.
<li> The query planner examines the values of bound parameters to help
determine if a partial index is usable.
<li> When deciding between two plans with the same estimated cost, bias
the selection toward the one that does not use the sorter.
<li> Evaluate WHERE clause constraints involving correlated subqueries
last, in the hope that they never have be evaluated at all.
<li> Do not use the <a href="optoverview.html#flattening">flattening optimization</a> for a sub-query on the RHS
of a LEFT JOIN if that subquery reads data from a <a href="vtab.html">virtual table</a> as
doing so prevents the query planner from creating <a href="optoverview.html#autoindex">automatic indexes</a>
on the results of the sub-query, which can slow down the query.
</ol>
<li> Add <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a>, <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a>,
and <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> options for the
<a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface.
<li> Provide <a href="pragma.html#pragfunc">PRAGMA functions</a> for
<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>, and
<a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a>.
<li> Add the -withoutnulls option to the <a href="tclsqlite.html#eval">TCL interface eval method</a>.
<li> Enhance the <a href="sqlanalyze.html">sqlite3_analyzer.exe</a> utility program so that it shows
the number of bytes of metadata on btree pages.
<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> run-time option and the
<a href="compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> compile-time option enable the
<a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a>. See also ticket
<a href="https://www.sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>
<li> Miscellaneous optimizations result in a 2% reduction in <a href="cpu.html">CPU cycles used</a>.
<p><b>Bug Fixes:</b>
<li> Fix the behavior of <a href="c3ref/column_name.html">sqlite3_column_name()</a> for queries that use the
<a href="optoverview.html#flattening">flattening optimization</a> so that the result is consistent with other
queries that do not use that optimization, and with PostgreSQL, MySQL,
and SQLServer. Ticket <a href="https://sqlite.org/src/info/de3403bf5ae">de3403bf5ae</a>.
<li> Fix the query planner so that it knows not to use <a href="optoverview.html#autoindex">automatic indexes</a>
on the right table of LEFT JOIN if the WHERE clause uses the <a href="lang_expr.html#isisnot">IS operator</a>.
Fix for <a href="https://sqlite.org/src/info/ce68383bf6aba">ce68383bf6aba</a>.
<li> Ensure that the query planner knows that any column of a
<a href="optoverview.html#flattening">flattened</a> LEFT JOIN can be NULL even
if that column is labeled with "NOT NULL". Fix for ticket
<a href="https://sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>.
<li> Fix rare false-positives in <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> when run on a database connection
with <a href="lang_attach.html">attached databases</a>. Ticket
<a href="https://sqlite.org/src/info/a4e06e75a9ab61a12">a4e06e75a9ab61a12</a>
<li> Fix a bug (discovered by OSSFuzz) that causes an assertion fault if certain
dodgy CREATE TABLE declarations are used. Ticket
<a href="https://sqlite.org/src/info/bc115541132dad136">bc115541132dad136</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8"
<li>SHA3-256 for sqlite3.c: 79b7f3b977360456350219cba0ba0e5eb55910565eab68ea83edda2f968ebe95
</ol></p>
<a name="version_3_18_2"></a>
<h3>2017-06-17 (3.18.2)</h3><p><ol class='lessindent'>
<li>Fix a bug that might cause duplicate output rows when an IN operator is
used in the WHERE clause.
Ticket <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-06-17 09:59:36 036ebf729e4b21035d7f4f8e35a6f705e6bf99887889e2dc14ebf2242e7930dd"
<li>SHA3-256 for sqlite3.c: b0bd014f2776b9f9508a3fc6432f70e2436bf54475369f88f0aeef75b0eec93e
</ol></p>
<a name="version_3_18_1"></a>
<h3>2017-06-16 (3.18.1)</h3><p><ol class='lessindent'>
<li>Fix a bug associated with <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
corruption. The bug was introduced in <a href="#version_3_16_0">version 3.16.0</a> (2017-01-02).
Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-06-16 13:41:15 77bb46233db03a3338bacf7e56f439be3dfd1926ea0c44d252eeafa7a7b31c06"
<li>SHA3-256 for sqlite3.c: 334eaf776db9d09a4e69d6012c266bc837107edc2c981739ef82081cb11c5723
</ol></p>
<a name="version_3_19_3"></a>
<h3>2017-06-08 (3.19.3)</h3><p><ol class='lessindent'>
<li>Fix a bug associated with <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
corruption. The bug was introduced in <a href="#version_3_16_0">version 3.16.0</a> (2017-01-02).
Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b"
<li>SHA3-256 for sqlite3.c: 368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8
</ol></p>
<a name="version_3_19_2"></a>
<h3>2017-05-25 (3.19.2)</h3><p><ol class='lessindent'>
<li>Fix more bugs in the LEFT JOIN <a href="optoverview.html#flattening">flattening optimization</a>. Ticket
<a href="https://www.sqlite.org/src/info/7fde638e94287d2c">7fde638e94287d2c</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9"
<li>SHA3-256 for sqlite3.c: 1be0c457869c1f7eba58c3b5097b9ec307a15be338308bee8e5be8570bcf5d1e
</ol></p>
<a name="version_3_19_1"></a>
<h3>2017-05-24 (3.19.1)</h3><p><ol class='lessindent'>
<li>Fix a bug in the LEFT JOIN <a href="optoverview.html#flattening">flattening optimization</a>. Ticket
<a href="https://www.sqlite.org/src/info/cad1ab4cb7b0fc">cad1ab4cb7b0fc</a>.
<li>Remove a surplus semicolon that was causing problems for older versions of MSVC.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86"
<li>SHA3-256 for sqlite3.c: 996b2aff37b6e0c6663d0312cd921bbdf6826c989cbbb07dadde5e9672889bca
</ol></p>
<a name="version_3_19_0"></a>
<h3>2017-05-22 (3.19.0)</h3><p><ol class='lessindent'>
<li> The <a href="c3ref/c_alter_table.html">SQLITE_READ</a> <a href="c3ref/set_authorizer.html">authorizer callback</a> is invoked once
with a column name that is an empty string
for every table referenced in a query from which no columns are extracted.
<li> When using an index on an expression, try to use expression values already
available in the index, rather than loading the original columns and recomputing
the expression.
<li> Enhance the <a href="optoverview.html#flattening">flattening optimization</a> so that it is able to flatten views
on the right-hand side of a LEFT JOIN.
<li> Use <a href="lang_corefunc.html#replace">replace()</a> instead of <a href="lang_corefunc.html#char">char()</a> for escaping newline and carriage-return
characters embedded in strings in the .dump output from the <a href="cli.html">command-line shell</a>.
<li> Avoid unnecessary foreign key processing in UPDATE statements that do not
touch the columns that are constrained by the foreign keys.
<li> On a DISTINCT query that uses an index, try to skip ahead to the next distinct
entry using the index rather than stepping through rows, when an appropriate
index is available.
<li> Avoid unnecessary invalidation of <a href="c3ref/blob.html">sqlite3_blob</a> handles when making
changes to unrelated tables.
<li> Transfer any terms of the HAVING clause that use only columns mentioned in
the GROUP BY clause over to the WHERE clause for faster processing.
<li> Reuse the same materialization of a VIEW if that VIEW appears more than
once in the same query.
<li> Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> so that it identifies tables that have two
or more rows with the same <a href="lang_createtable.html#rowid">rowid</a>.
<li> Enhance the <a href="fts5.html">FTS5</a> query syntax so that <a href="fts5.html#fts5_column_filters">column filters</a>
may be applied to arbitrary expressions.
<li> Enhance the <a href="json1.html#jex">json_extract()</a> function to cache and reuse parses of JSON
input text.
<li> Added the <a href="https://sqlite.org/src/file/ext/misc/anycollseq.c">anycollseq.c</a>
<a href="loadext.html">loadable extension</a> that allows a generic SQLite database connection to
read a schema that contains unknown and/or
application-specific <a href="datatype3.html#collation">collating sequences</a>.
<p><b>Bug Fixes:</b>
<li> Fix a problem in <a href="lang_replace.html">REPLACE</a> that can result in a corrupt database containing
two or more rows with the same <a href="lang_createtable.html#rowid">rowid</a>. Fix for ticket
<a href="https://www.sqlite.org/src/info/f68dc596c4e6018d">f68dc596c4e6018d</a>.
<li> Fix a problem in <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> that was causing a subsequent
<a href="lang_vacuum.html">VACUUM</a> to behave suboptimally.
<li> Fix the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command so that it works correctly with
foreign keys on <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
<li> Fix a bug in the b-tree logic that can result in incorrect duplicate answers
for IN operator queries. Ticket
<a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>
<li> Disallow leading zeros in numeric constants in JSON. Fix for ticket
<a href="https://www.sqlite.org/src/info/b93be8729a895a528e2">b93be8729a895a528e2</a>.
<li> Disallow control characters inside of strings in JSON. Fix for ticket
<a href="https://www.sqlite.org/src/info/6c9b5514077fed34551">6c9b5514077fed34551</a>.
<li> Limit the depth of recursion for JSON objects and arrays in order to avoid
excess stack usage in the recursive descent parser. Fix for ticket
<a href="https://www.sqlite.org/src/info/981329adeef51011052">981329adeef51011052</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-05-22 13:58:13 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40"
<li>SHA3-256 for sqlite3.c: c30326aa1a9cc342061b755725eac9270109acf878bc59200dd4b1cea6bc2908
</ol></p>
<a name="version_3_18_0"></a>
<h3>2017-03-30 (3.18.0)</h3><p><ol class='lessindent'>
<li>Added the <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> command
<li>The SQLite version identifier returned by the <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a> SQL function
and the <a href="c3ref/libversion.html">sqlite3_sourceid()</a> C API and found in the <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> macro is
now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
<li>Added the <a href="json1.html#jpatch">json_patch()</a> SQL function to the <a href="json1.html">JSON1 extension</a>.
<li>Enhance the <a href="optoverview.html#like_opt">LIKE optimization</a> so that it works for arbitrary expressions on
the left-hand side as long as the LIKE pattern on the right-hand side does not
begin with a digit or minus sign.
<li>Added the <a href="c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a> interface and use the new interface in
the <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, and <a href="fts5.html">FTS5</a> extensions to ensure that the <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
interface always returns reasonable values.
<li>Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that they verify
<a href="lang_createtable.html#ckconst">CHECK constraints</a>.
<li>Enhance the query plans for joins to detect empty tables early and
halt without doing unnecessary work.
<li>Enhance the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> family of interfaces and the <a href="lang_corefunc.html#printf">printf SQL function</a>
to put comma separators at the thousands marks for integers, if the "," format modifier
is used in between the "%" and the "d" (example: "%,d").
<li>Added the -D<a href="compile.html#max_memory">SQLITE_MAX_MEMORY</a>=<i>N</i> compile-time option.
<li>Added the <a href="cli.html#sha3sum">.sha3sum dot-command</a> and the <a href="cli.html#selftest">.selftest dot-command</a>
to the <a href="cli.html">command-line shell</a>
<li>Begin enforcing <a href="c3ref/c_limit_attached.html#sqlitelimitvdbeop">SQLITE_LIMIT_VDBE_OP</a>. This can be used, for example, to prevent
excessively large prepared statements in systems that accept SQL queries from
untrusted users.
<li>Various performance improvements.
<p><b>Bug Fixes:</b>
<li>Ensure that indexed expressions with collating sequences are handled correctly.
Fix for ticket <a href="https://www.sqlite.org/src/info/eb703ba7b50c1a5">eb703ba7b50c1a5</a>.
<li>Fix a bug in the 'start of ...' modifiers for the <a href="lang_datefunc.html">date and time functions</a>.
Ticket <a href="https://www.sqlite.org/src/info/6097cb92745327a1">6097cb92745327a1</a>
<li>Fix a potential segfault in complex recursive triggers, resulting from a
bug in the OP_Once opcode introduced as part of a performance optimization in
version 3.15.0.
Ticket <a href="https://www.sqlite.org/src/info/06796225f59c057c">06796225f59c057c</a>
<li>In the <a href="rbu.html">RBU extension</a>, add extra sync operations to avoid the possibility of
corruption following a power failure.
<li>The <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> output for nested SQL statements should always begin
with a "--" comment marker.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37"
<li>SHA3-256 for sqlite3.c: cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
</ol></p>
<a name="version_3_17_0"></a>
<h3>2017-02-13 (3.17.0)</h3><p><ol class='lessindent'>
<li>Approximately 25% better performance from the <a href="rtree.html">R-Tree extension</a>.
<ol type='a'>
<li> Uses compiler built-ins (ex: __builtin_bswap32() or _byteswap_ulong())
for byteswapping when available.
<li> Uses the <a href="c3ref/blob.html">sqlite3_blob</a> key/value access object instead of SQL
for pulling content out of R-Tree nodes
<li> Other miscellaneous enhancements such as loop unrolling.
</ol>
<li>Add the <a href="compile.html#default_lookaside">SQLITE_DEFAULT_LOOKASIDE</a> compile-time option.
<li>Increase the default <a href="malloc.html#lookaside">lookaside</a>
size from 512,125 to 1200,100
as this provides better performance while only adding 56KB
of extra memory per connection. Memory-sensitive
applications can restore the old
default at compile-time, start-time, or run-time.
<li>Use compiler built-ins __builtin_sub_overflow(), __builtin_add_overflow(),
and __builtin_mul_overflow() when available. (All compiler
built-ins can be omitted with the <a href="compile.html#disable_intrinsic">SQLITE_DISABLE_INTRINSIC</a> compile-time
option.)
<li>Added the <a href="compile.html#enable_null_trim">SQLITE_ENABLE_NULL_TRIM</a> compile-time option, which
can result in significantly smaller database files for some
applications, at the risk of being incompatible with older
versions of SQLite.
<li>Change <a href="compile.html#default_pcache_initsz">SQLITE_DEFAULT_PCACHE_INITSZ</a> from 100 to 20, for
improved performance.
<li>Added the SQLITE_UINT64_TYPE compile-time option as an
analog to SQLITE_INT64_TYPE.
<li>Perform some <a href="lang_update.html">UPDATE</a> operations in a single pass instead of
in two passes.
<li>Enhance the <a href="sessionintro.html">session extension</a> to support <a href="withoutrowid.html">WITHOUT ROWID</a>
tables.
<li>Fixed performance problems and potential stack overflows
when creating <a href="lang_createview.html">views</a> from multi-row VALUES clauses with
hundreds of thousands of rows.
<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/sha1.c">sha1.c</a>
extension.
<li>In the <a href="cli.html">command-line shell</a>, enhance the ".mode" command so that it
restores the default column and row separators for modes "line",
"list", "column", and "tcl".
<li>Enhance the <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> option so that it works
in <a href="wal.html">WAL mode</a> as long as the pages being read are not in the WAL file.
<li>Enhance the
<a href="lemon.html">Lemon parser generator</a>
so that it can store the parser object as a stack variable rather than
allocating space from the heap and make use of that enhancement in
the <a href="amalgamation.html">amalgamation</a>.
<li>Other performance improvements. Uses about <a href="cpu.html">6.5% fewer CPU cycles</a>.
<p><b>Bug Fixes:</b>
<li>Throw an error if the ON clause of a LEFT JOIN references tables
to the right of the ON clause. This is the same behavior as
PostgreSQL. Formerly, SQLite silently converted the LEFT JOIN
into an INNER JOIN. Fix for ticket
<a href="https://www.sqlite.org/src/info/25e335f802dd">25e335f802dd</a>.
<li>Use the correct affinity for columns of automatic indexes. Ticket
<a href="https://www.sqlite.org/src/info/7ffd1ca1d2ad4ec">7ffd1ca1d2ad4ec</a>.
<li>Ensure that the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface can correctly
handle short rows. Fix for ticket
<a href="https://www.sqlite.org/src/info/e6e962d6b0f06f46e">e6e962d6b0f06f46e</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-02-13 16:02:40 ada05cfa86ad7f5645450ac7a2a21c9aa6e57d2c"
<li>SHA1 for sqlite3.c: cc7d708bb073c44102a59ed63ce6142da1f174d1
</ol></p>
<a name="version_3_16_2"></a>
<h3>2017-01-06 (3.16.2)</h3><p><ol class='lessindent'>
<li>Fix the <a href="lang_replace.html">REPLACE</a> statement for
<a href="withoutrowid.html">WITHOUT ROWID</a> tables that lack secondary indexes so that
it works correctly with triggers and foreign keys. This was a new bug
caused by performance optimizations added in version 3.16.0.
Ticket <a href="https://www.sqlite.org/src/info/30027b613b4">30027b613b4</a>
<li>Fix the <a href="c3ref/value_blob.html">sqlite3_value_text()</a> interface so that it correctly
translates content generated by <a href="lang_corefunc.html#zeroblob">zeroblob()</a> into a string of all
0x00 characters. This is a long-standing issue discovered after the
3.16.1 release by <a href="https://github.com/google/oss-fuzz">OSS-Fuzz</a>
<li>Fix the bytecode generator to deal with a subquery in the FROM clause
that is itself a UNION ALL where one side of the UNION ALL is a view
that contains an ORDER BY. This is a long-standing issue that was
discovered after the release of 3.16.1. See ticket
<a href="https://www.sqlite.org/src/info/190c2507">190c2507</a>.
<li>Adjust the <a href="c3ref/column_count.html">sqlite3_column_count()</a> API so it more often returns the same
values for <a href="pragma.html#syntax">PRAGMA</a> statements as it did in prior releases, to
minimize disruption to applications that might be using that
interface in unexpected ways.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
<li>SHA1 for sqlite3.c: 2bebdc3f24911c0d12b6d6c0123c3f84d6946b08
</ol></p>
<a name="version_3_16_1"></a>
<h3>2017-01-03 (3.16.1)</h3><p><ol class='lessindent'>
<li>Fix a bug concerning the use of <a href="rowvalue.html">row values</a> within <a href="lang_createtrigger.html">triggers</a>
(see ticket <a href="https://www.sqlite.org/src/info/8c9458e7">8c9458e7</a>)
that was in version 3.15.0 but was not reported until moments after the 3.16.0
release was published.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd"
<li>SHA1 for sqlite3.c: 354f6223490b30fd5320b4066b1535e4ce33988d
</ol></p>
<a name="version_3_16_0"></a>
<h3>2017-01-02 (3.16.0)</h3><p><ol class='lessindent'>
<li>Uses 9% fewer CPU cycles. (See the <a href="cpu.html">CPU performance measurement</a> report for
details on how this performance increase was computed.)
<li>Added experimental support for <a href="pragma.html#pragfunc">PRAGMA functions</a>.
<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
<li>Enhance the <a href="lang_datefunc.html">date and time functions</a> so that the 'unixepoch' modifier works
for the full span of supported dates.
<li>Changed the default configuration of the <a href="malloc.html#lookaside">lookaside memory allocator</a> from
500 slots of 128 bytes each into 125 slots of 512 bytes each.
<li>Enhanced "WHERE x NOT NULL" <a href="partialindex.html">partial indexes</a> so that they are usable if
the "x" column appears in a LIKE or GLOB operator.
<li>Enhanced <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> so that it interrupts <a href="wal.html#ckpt">checkpoint</a> operations that
are in process.
<li>Enhanced the <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a> matching algorithm to be faster
for cases when the pattern contains multiple wildcards.
<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
<li>Added ".mode quote" to the <a href="cli.html">command-line shell</a>.
<li>Added ".lint fkey-indexes" to the <a href="cli.html">command-line shell</a>.
<li>Added the <a href="imposter.html#dotimposter">.imposter dot-command</a> to the <a href="cli.html">command-line shell</a>.
<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
SQL function as a <a href="loadext.html">loadable extension</a>.
<li>Rename the <a href="compile.html#omit_builtin_test">SQLITE_OMIT_BUILTIN_TEST</a> compile-time option to
<a href="compile.html#untestable">SQLITE_UNTESTABLE</a> to better reflect the implications of using it.
<p><b>Bug Fixes:</b>
<li>Fix a long-standing bug in the query planner that caused incorrect results
on a LEFT JOIN where the left-hand table is a subquery and the join constraint
is a bare column name coming from the left-hand subquery. Ticket
<a href="https://www.sqlite.org/src/info/2df0107b">2df0107b</a>.
<li>Correctly handle the integer literal -0x8000000000000000 in the query planner.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2017-01-02 11:57:58 04ac0b75b1716541b2b97704f4809cb7ef19cccf"
<li>SHA1 for sqlite3.c: e2920fb885569d14197c9b7958e6f1db573ee669
</ol></p>
<a name="version_3_15_2"></a>
<h3>2016-11-28 (3.15.2)</h3><p><ol class='lessindent'>
<li> Multiple bug fixes to the <a href="rowvalue.html">row value</a> logic that was introduced in version 3.15.0.
<li> Fix a NULL pointer dereference in ATTACH/DETACH following a maliciously constructed
syntax error. Ticket
<a href="https://www.sqlite.org/src/info/2f1b168ab4d4844">2f1b168ab4d4844</a>.
<li> Fix a crash that can occur following an out-of-memory condition
in the built-in <a href="lang_corefunc.html#instr">instr()</a> function.
<li> In the <a href="json1.html">JSON extension</a>, fix the JSON validator so that it correctly rejects
invalid backslash escapes within strings.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8"
<li>SHA1 for sqlite3.c: 06d77b42a3e70609f8d4bbb97caf53652f1082cb
</ol></p>
<a name="version_3_15_1"></a>
<h3>2016-11-04 (3.15.1)</h3><p><ol class='lessindent'>
<li> Added <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
<li> Fix the <a href="lang_vacuum.html">VACUUM</a> command so that it spills excess content to disk rather
than holding everything in memory, and possible causing an out-of-memory
error for larger database files. This fixes an issue introduced by
version 3.15.0.
<li> Fix a case (present since 3.8.0 - 2013-08-26)
where OR-connected terms in the ON clause of a LEFT JOIN
might cause incorrect results. Ticket
<a href="https://www.sqlite.org/src/info/34a579141b2c5ac">34a579141b2c5ac</a>.
<li> Fix a case where the use of <a href="rowvalue.html">row values</a> in the ON clause of a LEFT JOIN
might cause incorrect results. Ticket
<a href="https://www.sqlite.org/src/info/fef4bb4bd9185ec8f">fef4bb4bd9185ec8f</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36"
<li>SHA1 for sqlite3.c: e7c26a7be3e431dd06898f8d262c4ef240c07366
</ol></p>
<a name="version_3_15_0"></a>
<h3>2016-10-14 (3.15.0)</h3><p><ol class='lessindent'>
<li> Added support for <a href="rowvalue.html">row values</a>.
<li> Allow <a href="deterministic.html">deterministic SQL functions</a> in the WHERE clause of a <a href="partialindex.html">partial index</a>.
<li> Added the "<a href="uri.html#urimodeof">modeof=<i>filename</i></a>" URI parameter on the unix VFS
<li> Added support for <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a>.
<li> Added the ability to <a href="lang_vacuum.html">VACUUM</a> an <a href="lang_attach.html">ATTACH-ed</a> database.
<li> Enhancements to the <a href="cli.html">command-line shell</a>:
<ol type='a'>
<li> Add the ".testcase" and ".check" <a href="cli.html#dotcmd">dot-commands</a>.
<li> Added the --new option to the ".open" dot-command, causing
any prior content in the database to be purged prior to
opening.
</ol>
<li> Enhance the <a href="fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a> virtual table to handle "ORDER BY term" efficiently.
<li> Miscellaneous micro-optimizations reduce CPU usage by more than 7%
on common workloads. Most optimization in this release has been on the
front-end (<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>).
<p><b>Bug Fixes:</b>
<li> The multiply operator now correctly detects 64-bit integer overflow
and promotes to floating point in all corner-cases. Fix for ticket
<a href="https://www.sqlite.org/src/info/1ec41379c9c1e400">1ec41379c9c1e400</a>.
<li> Correct handling of columns with redundant unique indexes when those
columns are used on the LHS of an <a href="lang_expr.html#in_op">IN operator</a>. Fix for ticket
<a href="https://www.sqlite.org/src/info/0eab1ac759">0eab1ac759</a>.
<li> Skip NULL entries on range queries in <a href="expridx.html">indexes on expressions</a>.
Fix for ticket
<a href="https://www.sqlite.org/src/tktview/4baa46491212947">4baa46491212947</a>.
<li> Ensure that the <a href="autoinc.html">AUTOINCREMENT</a> counters in the sqlite_sequence
table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
statements. Fix for ticket
<a href="https://www.sqlite.org/src/info/7b3328086a5c116c">7b3328086a5c116c</a>.
<li> Make sure the ORDER BY LIMIT optimization
(from check-in <a href="https://www.sqlite.org/src/info/559733b09e9630fa">559733b09e</a>)
works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
<a href="https://www.sqlite.org/src/info/96c1454cbfd9509">96c1454c</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-10-14 10:20:30 707875582fcba352b4906a595ad89198d84711d8"
<li>SHA1 for sqlite3.c: fba106f8f6493c66eeed08a2dfff0907de54ae76
</ol></p>
<a name="version_3_14_2"></a>
<h3>2016-09-12 (3.14.2)</h3><p><ol class='lessindent'>
<li> Improved support for using the STDCALL calling convention in winsqlite3.dll.
<li> Fix the <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> interface so that it is disabled if either the
callback or the mask arguments are zero, in accordance with the documentation.
<li> Fix commenting errors and improve the comments generated on <a href="lang_explain.html">EXPLAIN</a> listings
when the <a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is used.
<li> Fix the ".read" command in the <a href="cli.html">command-line shell</a> so that it understands
that its input is not interactive.
<li> Correct affinity computations for a SELECT on the RHS of an IN operator.
Fix for ticket <a href="https://sqlite.org/src/info/199df4168c">199df4168c</a>.
<li> The ORDER BY LIMIT optimization is not valid unless the inner-most IN operator
loop is actually used by the query plan. Fix for
ticket <a href="https://sqlite.org/src/info/0c4df46116e90f92">0c4df46116e90f92</a>.
<li> Fix an internal code generator problem that was causing some <a href="lang_delete.html">DELETE</a> operations
to no-op. Ticket <a href="https://sqlite.org/src/info/ef360601">ef360601</a>
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6"
<li>SHA1 for sqlite3.c: bcc4a1989db45e7f223191f2d0f66c1c28946383
</ol></p>
<a name="version_3_14_1"></a>
<h3>2016-08-11 (3.14.1)</h3><p><ol class='lessindent'>
<li>A performance enhancement to the page-cache "truncate" operation
reduces <a href="lang_transaction.html">COMMIT</a> time by dozens of milliseconds on systems with a
large <a href="pragma.html#pragma_cache_size">page cache</a>.
<li>Fix to the --rbu option of <a href="sqldiff.html">sqldiff</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
<li>SHA1 for sqlite3.c: d545b24892278272ce4e40e0567d69c8babf12ea
</ol></p>
<a name="version_3_14"></a>
<h3>2016-08-08 (3.14)</h3><p><ol class='lessindent'>
<div style="width:280px;float:right;padding:10px;margin:0px 10px;">
<img src='images/sqlitepie.jpg' width=280 height=250></img><br>
<center>Celebrating the SQLite "<big>π</big> release"
with a home-baked pie.</center>
</div>
<li>Added support for <a href="vtab.html#worid">WITHOUT ROWID virtual tables</a>.
<li>Improved the query planner so that the <a href="optoverview.html#or_opt">OR optimization</a> can
be used on <a href="vtab.html">virtual tables</a> even if one or more of the disjuncts
use the <a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, <a href="lang_expr.html#regexp">REGEXP</a>, <a href="lang_expr.html#match">MATCH</a> operators.
<li>Added the <a href="csv.html">CSV virtual table</a> for reading
<a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted comma-separated
value files.
<li>Added the <a href="carray.html">carray() table-valued function</a> extension.
<li>Enabled <a href="loadext.html#persist">persistent loadable extensions</a> using the new
<a href="rescode.html#ok_load_permanently">SQLITE_OK_LOAD_PERMANENTLY</a> return code from the extension
entry point.
<li>Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">SQLITE_DBSTATUS_CACHE_USED_SHARED</a> option to <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
<li>Add the
<a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/vfsstat.c">vfsstat.c</a>
loadable extension - a VFS shim that measures I/O
together with an <a href="vtab.html#epovtab">eponymous virtual table</a> that provides access to the measurements.
<li>Improved algorithm for running queries with both an ORDER BY and a LIMIT where
only the inner-most loop naturally generates rows in the correct order.
<li>Enhancements to <a href="lemon.html">Lemon parser generator</a>, so that it generates a
faster parser.
<li>The <a href="pragma.html#pragma_compile_options">PRAGMA compile_options</a> command now attempts to show the version number
of the compiler that generated the library.
<li>Enhance <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> so that it provides information about
<a href="vtab.html#epovtab">eponymous virtual tables</a>.
<li>Added the "win32-none" VFS, analogous to the "unix-none" VFS, that works like
the default "win32" VFS except that it ignores all file locks.
<li>The query planner uses a full scan of a <a href="partialindex.html">partial index</a> instead of a
full scan of the main table, in cases where that makes sense.
<li>Allow <a href="vtab.html#tabfunc2">table-valued functions</a> to appear on the right-hand side of an <a href="lang_expr.html#in_op">IN operator</a>.
<li>Created the <a href="dbhash.html">dbhash.exe</a> command-line utility.
<li>Added two new C-language interfaces: <a href="c3ref/expanded_sql.html">sqlite3_expanded_sql()</a> and
<a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a>. These new interfaces subsume the functions of
<a href="c3ref/profile.html">sqlite3_trace()</a> and <a href="c3ref/profile.html">sqlite3_profile()</a> which are now deprecated.
<li>Added the <a href="json1.html#jquote">json_quote()</a> SQL function to <a href="json1.html">the json1 extension</a>.
<li>Disable the <a href="c3ref/set_authorizer.html">authorizer callback</a> while reparsing the schema.
<li>Added the <a href="compile.html#enable_unknown_sql_function">SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> compile-time option and turned that
option on by default when building the <a href="cli.html">command-line shell</a>.
<p><b>Bug Fixes:</b>
<li>Fix the <a href="lang_altertable.html">ALTER TABLE</a> command so that it does not corrupt <a href="lang_createindex.html#descidx">descending indexes</a>
when adding a column to a <a href="pragma.html#pragma_legacy_file_format">legacy file format</a> database. Ticket
<a href="https://www.sqlite.org/src/info/f68bf68513a1c15f">f68bf68513a1c15f</a>
<li>Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
clause references a non-existent collating sequence. Ticket
<a href="https://www.sqlite.org/src/info/e8d439c77685eca6">e8d439c77685eca6</a>.
<li>Improved the cost estimation for an index scan which includes a WHERE clause
that can be partially or fully evaluated using columns in the index and without
having to do a table lookup. This fixes a performance regression that occurred
for some obscure queries following the ORDER BY LIMIT optimization introduced
in <a href="#version_3_12_0">version 3.12.0</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
<li>SHA1 for sqlite3.c: 234a3275d03a287434ace3ccdf1afb208e6b0e92
</ol></p>
<a name="version_3_13_0"></a>
<h3>2016-05-18 (3.13.0)</h3><p><ol class='lessindent'>
<li>Postpone I/O associated with TEMP files for as long as possible, with the hope
that the I/O can ultimately be avoided completely.
<li>Merged the <a href="sessionintro.html">session</a> extension into trunk.
<li>Added the ".auth ON|OFF" command to the <a href="cli.html">command-line shell</a>.
<li>Added the "--indent" option to the ".schema" and ".fullschema" commands of
the <a href="cli.html">command-line shell</a>, to turn on pretty-printing.
<li>Added the ".eqp full" option to the <a href="cli.html">command-line shell</a>, that does both <a href="lang_explain.html">EXPLAIN</a>
and <a href="eqp.html">EXPLAIN QUERY PLAN</a> on each statement that is evaluated.
<li>Improved unicode filename handling in the <a href="cli.html">command-line shell</a> on Windows.
<li>Improved resistance against goofy query planner decisions caused by
incomplete or incorrect modifications to the <a href="fileformat2.html#stat1tab">sqlite_stat1</a>
table by the application.
<li>Added the <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>) interface
which allows the <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> C-API to be enabled while keeping the
<a href="lang_corefunc.html#load_extension">load_extension()</a> SQL function disabled for security.
<li>Change the <a href="tempfiles.html#tempdir">temporary directory search algorithm</a> on Unix to allow directories with
write and execute permission, but without read permission, to serve as temporary
directories. Apply this same standard to the "." fallback directory.
<p><b>Bug Fixes:</b>
<li>Fix a problem with the multi-row one-pass DELETE optimization that was
causing it to compute incorrect answers with a self-referential subquery in
the WHERE clause. Fix for ticket
<a href="https://www.sqlite.org/src/info/dc6ebeda9396087">dc6ebeda9396087</a>
<li>Fix a possible segfault with DELETE when table is a <a href="rowidtable.html">rowid table</a> with an
<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> and the WHERE clause contains a OR and
the table has one or more indexes that are able to trigger the OR optimization,
but none of the indexes reference any table columns other than the INTEGER PRIMARY KEY.
Ticket <a href="https://www.sqlite.org/src/info/16c9801ceba49">16c9801ceba49</a>.
<li>When checking for the WHERE-clause push-down optimization, verify that all terms
of the compound inner SELECT are non-aggregate, not just the last term. Fix for ticket
<a href="https://www.sqlite.org/src/info/f7f8c97e97597">f7f8c97e97597</a>.
<li>Fix a locking race condition in Windows that can occur when two or more processes
attempt to recover the same <a href="fileformat2.html#hotjrnl">hot journal</a> at the same time.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2"
<li>SHA1 for sqlite3.c: 9b9171b1e6ce7a980e6b714e9c0d9112657ad552
<p><b>Bug fixes backported into patch release 3.12.2 (2016-04-18):</b></p>
<li>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
the datatype keyword) were not being recognized as an
<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
<li>Fix a bug (present since <a href="#version_3_9_0">version 3.9.0</a>) that can cause the <a href="lang_delete.html">DELETE</a>
operation to miss rows if <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
<li>Fix a bug in the code generator that can cause incorrect results if
two or more <a href="vtab.html">virtual tables</a> are joined and the virtual table used in
outer loop of the join has an <a href="lang_expr.html#in_op">IN operator</a> constraint.
<li>Correctly interpret negative "PRAGMA cache_size" values when determining
the cache size used for sorting large amounts of data.
<p><b>Bug fixes backported into patch release 3.12.1 (2016-04-08):</b></p>
<li>Fix a boundary condition error introduced by version 3.12.0
that can result in a crash during heavy <a href="lang_savepoint.html">SAVEPOINT</a> usage.
Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
<li>Fix <a href="lang_createview.html">views</a> so that they inherit column datatypes from the
table that they are defined against, when possible.
<li>Fix the query planner so that IS and IS NULL operators are able
to drive an index on a LEFT OUTER JOIN.
</ol></p>
<a name="version_3_12_2"></a>
<h3>2016-04-18 (3.12.2)</h3><p><ol class='lessindent'>
<li>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
the datatype keyword) were not being recognized as an
<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
<li>Fix a bug (present since <a href="#version_3_9_0">version 3.9.0</a>) that can cause the <a href="lang_delete.html">DELETE</a>
operation to miss rows if <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
<li>Fix a bug in the code generator that can cause incorrect results if
two or more <a href="vtab.html">virtual tables</a> are joined and the virtual table used in
outer loop of the join has an <a href="lang_expr.html#in_op">IN operator</a> constraint.
<li>Correctly interpret negative "PRAGMA cache_size" values when determining
the cache size used for sorting large amounts of data.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-04-18 17:30:31 92dc59fd5ad66f646666042eb04195e3a61a9e8e"
<li>SHA1 for sqlite3.c: de5a5898ebd3a3477d4652db143746d008b24c83
</ol></p>
<a name="version_3_12_1"></a>
<h3>2016-04-08 (3.12.1)</h3><p><ol class='lessindent'>
<li>Fix a boundary condition error introduced by version 3.12.0
that can result in a crash during heavy <a href="lang_savepoint.html">SAVEPOINT</a> usage.
Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
<li>Fix <a href="lang_createview.html">views</a> so that they inherit column datatypes from the
table that they are defined against, when possible.
<li>Fix the query planner so that IS and IS NULL operators are able
to drive an index on a LEFT OUTER JOIN.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-04-08 15:09:49 fe7d3b75fe1bde41511b323925af8ae1b910bc4d"
<li>SHA1 for sqlite3.c: ebb18593350779850e3e1a930eb84a70fca8c1d1
</ol></p>
<a name="version_3_9_3"></a>
<h3>2016-04-01 (3.9.3)</h3><p><ol class='lessindent'>
<li>Backport a
<a href="https://www.sqlite.org/src/info/c648539b52ca28c0">simple query planner optimization</a>
that allows the IS operator
to drive an index on a LEFT OUTER JOIN. No other changes from the
<a href="#version_3_9_2">version 3.9.2</a> baseline.
</ol></p>
<a name="version_3_12_0"></a>
<h3>2016-03-29 (3.12.0)</h3><p><ol class='lessindent'>
<p><b>Potentially Disruptive Change:</b>
<li>The <a href="compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> is increased from 1024 to 4096.
The <a href="compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> is changed from 2000 to -2000 so
the same amount of cache memory is used by default.
See the application note on the
<a href="pgszchng2016.html">version 3.12.0 page size change</a> for further information.
<p><b>Performance enhancements:</b>
<li>Enhancements to the <a href="lemon.html">Lemon parser generator</a>
so that it creates a smaller and faster SQL parser.
<li>Only create <a href="tempfiles.html#superjrnl">master journal</a> files if two or more attached databases are all
modified, do not have <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF, and
do not have the <a href="pragma.html#pragma_journal_mode">journal_mode</a> set to OFF, MEMORY, or WAL.
<li>Only create <a href="tempfiles.html#stmtjrnl">statement journal</a> files when their size exceeds a threshold.
Otherwise the journal is held in memory and no I/O occurs. The threshold
can be configured at compile-time using <a href="compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> or at
start-time using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a>).
<li>The query planner is able to optimize IN operators on <a href="vtab.html">virtual tables</a>
even if the <a href="vtab.html#xbestindex">xBestIndex</a> method does not set the
sqlite3_index_constraint_usage.omit flag of the
virtual table column to the left of the IN operator.
<li>The query planner now does a better job of optimizing <a href="vtab.html">virtual table</a>
accesses in a 3-way or higher join where constraints on the virtual
table are split across two or more other tables of the join.
<li>More efficient handling of <a href="appfunc.html">application-defined SQL functions</a>, especially
in cases where the application defines hundreds or thousands of
custom functions.
<li>The query planner considers the LIMIT clause when estimating the cost
of ORDER BY.
<li>The configure script (on unix) automatically detects
pread() and pwrite() and sets compile-time options to use those OS
interfaces if they are available.
<li>Reduce the amount of memory needed to hold the schema.
<li>Other miscellaneous micro-optimizations for improved performance and reduced
memory usage.
<p><b>New Features:</b>
<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a>
which allows the two-argument version of the <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> SQL function to
be enabled or disabled at run-time.
<li>Added the <a href="https://www.sqlite.org/src/artifact/d7cc99350?ln=403-443">sqlite3rbu_bp_progress()</a>
interface to the <a href="rbu.html">RBU</a> extension.
<li>The <a href="pragma.html#pragma_defer_foreign_keys">PRAGMA defer_foreign_keys=ON</a> statement now also disables
<a href="foreignkeys.html#fk_actions">RESTRICT actions</a> on foreign key.
<li>Added the <a href="c3ref/system_errno.html">sqlite3_system_errno()</a> interface.
<li>Added the <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and <a href="compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS</a>
compile-time options. The <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> compile-time option
replaces the <a href="compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> option, which is no longer supported.
<li>Enhanced the ".stats" command in the <a href="cli.html">command-line shell</a> to show more
information about I/O performance obtained from /proc, when available.
<p><b>Bug fixes:</b>
<li>Make sure the <a href="c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> values from multiple triggers
within a single statement do not interfere with one another.
Ticket <a href="https://www.sqlite.org/src/info/dc9b1c91">dc9b1c91</a>.
<li>Fix the code generator for expressions of the form "x IN (SELECT...)" where
the SELECT statement on the RHS is a correlated subquery.
Ticket <a href="https://www.sqlite.org/src/info/5e3c886796e5512e">5e3c886796e5512e</a>.
<li>Fix a harmless TSAN warning associated with the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-03-29 10:14:15 e9bb4cf40f4971974a74468ef922bdee481c988b"
<li>SHA1 for sqlite3.c: cba2be96d27cb51978cd4a200397a4ad178986eb
</ol></p>
<a name="version_3_11_1"></a>
<h3>2016-03-03 (3.11.1)</h3><p><ol class='lessindent'>
<li>Improvements to the Makefiles and build scripts used by VisualStudio.
<li>Fix an <a href="fts5.html">FTS5</a> issue in which the 'optimize' command could cause index corruption.
<li>Fix a buffer overread that might occur if <a href="fts5.html">FTS5</a> is used to query a corrupt
database file.
<li>Increase the maximum "scope" value for the <a href="spellfix1.html">spellfix1</a> extension from 6 to 30.
<li>SQLITE_SOURCE_ID: "2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7"
<li>SHA1 for sqlite3.c: 3da832fd2af36eaedb05d61a8f4c2bb9f3d54265
</ol></p>
<a name="version_3_11_0"></a>
<h3>2016-02-15 (3.11.0)</h3><p><ol class='lessindent'>
<p><b>General improvements:</b>
<li>Enhanced <a href="wal.html">WAL mode</a> so that it works efficiently with transactions that are
larger than the <a href="pragma.html#pragma_cache_size">cache_size</a>.
<li>Added the <a href="fts5.html#the_detail_option">FTS5 detail option</a>.
<li>Added the "EXTRA" option to <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> that does a sync of the
containing directory when a rollback journal is unlinked in DELETE mode,
for better durability. The <a href="compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> compile-time option enables
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous=EXTRA</a> by default.
<li>Enhanced the <a href="optoverview.html">query planner</a> so that it is able to use
a <a href="queryplanner.html#covidx">covering index</a> as part of the <a href="optoverview.html#or_opt">OR optimization</a>.
<li>Avoid recomputing <a href="lang_createtable.html#notnullconst">NOT NULL</a> and <a href="lang_createtable.html#ckconst">CHECK constraints</a> on unchanged
columns in <a href="lang_update.html">UPDATE</a> statement.
<li>Many micro-optimizations, resulting in a library that is
faster than the previous release.
<p><b>Enhancements to the <a href="cli.html">command-line shell</a>:</b>
<li>By default, the shell is now in "auto-explain" mode. The output of
<a href="lang_explain.html">EXPLAIN</a> commands is automatically formatted.
<li>Added the ".vfslist" <a href="cli.html#dotcmd">dot-command</a>.
<li>The <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is now turned
on by default in the standard builds.
<p><b>Enhancements to the <a href="tclsqlite.html">TCL Interface</a>:</b>
<li>If a database connection is opened with the "-uri 1" option, then
<a href="uri.html">URI filenames</a> are honored by the "backup" and "restore" commands.
<li>Added the "-sourceid" option to the "sqlite3" command.
<p><b>Makefile improvements:</b>
<li>Improved pthreads detection in configure scripts.
<li>Add the ability to do MSVC Windows builds from the <a href="download.html">amalgamation tarball</a>.
<p><b>Bug fixes</b>
<li>Fix an issue with incorrect sharing of VDBE temporary registers between
co-routines that could cause incorrect query results in obscure cases. Ticket
<a href="https://www.sqlite.org/src/info/d06a25c84454a">d06a25c84454a</a>.
<li>Fix a problem in the <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface that could
cause problems for the <a href="json1.html">json1</a> extension under obscure circumstances.
Fix for ticket
<a href="https://www.sqlite.org/src/info/f45ac567eaa9f9">f45ac567eaa9f9</a>.
<li>Escape control characters in JSON strings. Fix for ticket
<a href="https://www.sqlite.org/src/info/ad2559db380abf8">ad2559db380abf8</a>.
<li>Reenable the xCurrentTime and xGetLastError methods in the built-in
unix <a href="vfs.html">VFSes</a> as long as <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a> is not defined.
<p><b>Backwards Compatibility:</b>
<li>Because of continuing security concerns, the two-argument version
of the seldom-used and little-known <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function is
disabled unless SQLite is compiled with the <a href="compile.html#enable_fts3_tokenizer">SQLITE_ENABLE_FTS3_TOKENIZER</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f"
<li>SHA1 for sqlite3.c: df01436c5fcfe72d1a95bc172158219796e1a90b
</ol></p>
<a name="version_3_10_2"></a>
<h3>2016-01-20 (3.10.2)</h3><p><ol class='lessindent'>
<p><b>Critical bug fix:</b>
<li>Version 3.10.0 introduced a case-folding bug in the <a href="lang_expr.html#like">LIKE</a> operator which is fixed
by this patch release. Ticket
<a href="https://www.sqlite.org/src/info/80369eddd5c94">80369eddd5c94</a>.
<p><b>Other miscellaneous bug fixes:</b>
<li>Fix a use-after-free that can occur when SQLite is compiled with -DSQLITE_HAS_CODEC.
<li>Fix the build so that it works with -DSQLITE_OMIT_WAL.
<li>Fix the configure script for the amalgamation so that the --readline option works again
on Raspberry PIs.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9"
<li>SHA1 for sqlite3.c: f7088b19d97cd7a1c805ee95c696abd54f01de4f
</ol></p>
<a name="version_3_10_1"></a>
<h3>2016-01-14 (3.10.1)</h3><p><ol class='lessindent'>
<p><b>New feature:</b>
<li>Add the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> file control.
<p><b>Bug fix:</b>
<li>Fix a 16-month-old bug in the query planner that could generate incorrect results
when a scalar subquery attempts to use the <a href="queryplanner.html#partialsort">block sorting</a> optimization. Ticket
<a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a>.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588"
<li>SHA1 for sqlite3.c: 1398ba8e4043550a533cdd0834bfdad1c9eab0f4
</ol></p>
<a name="version_3_10_0"></a>
<h3>2016-01-06 (3.10.0)</h3><p><ol class='lessindent'>
<p><b>General improvements:</b>
<li>Added support for <a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, and <a href="lang_expr.html#regexp">REGEXP</a> operators on <a href="vtab.html">virtual tables</a>.
<li>Added the <a href="vtab.html#colUsed">colUsed field</a> to <a href="c3ref/index_info.html">sqlite3_index_info</a> for use by
the <a href="vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method.
<li>Enhance the <a href="pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> statement to accept a 32-bit integer
parameter which is the threshold below which cache spilling is prohibited.
<li>On unix, if a symlink to a database file is opened, then the corresponding
journal files are based on the actual filename, not the symlink name.
<li>Added the "--transaction" option to <a href="sqldiff.html">sqldiff</a>.
<li>Added the <a href="c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> interface.
<li>Added the <a href="c3ref/strlike.html">sqlite3_strlike()</a> interface.
<li>When using <a href="mmap.html">memory-mapped I/O</a> map the database file read-only so that stray pointers
and/or array overruns in the application cannot accidentally modify the database file.
<li>Added the <em>experimental</em> <a href="c3ref/snapshot_get.html">sqlite3_snapshot_get()</a>, <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
and <a href="c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interfaces. These are subject to change or removal in
a subsequent release.
<li>Enhance the <a href="lang_datefunc.html#localtime">'utc' modifier</a> in the <a href="lang_datefunc.html">date and time functions</a> so that it is a no-op if
the date/time is known to already be in UTC. (This is not a compatibility break since
the behavior has long been documented as "undefined" in that case.)
<li>Added the <a href="json1.html#jgrouparray">json_group_array()</a> and <a href="json1.html#jgroupobject">json_group_object()</a> SQL functions in the
<a href="json1.html#jmini">json</a> extension.
<li>Added the <a href="compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> compile-time option.
<li>Many small performance optimizations.
<p><b>Portability enhancements:</b>
<li>Work around a sign-extension bug in the optimizer of the HP C compiler on HP/UX.
<a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67">(details)</a>
<p><b>Enhancements to the <a href="cli.html">command-line shell</a>:</b>
<li>Added the ".changes ON|OFF" and ".vfsinfo" <a href="cli.html#dotcmd">dot-commands</a>.
<li>Translate between MBCS and UTF8 when
running in <a href="https://en.wikipedia.org/wiki/Cmd.exe">cmd.exe</a> on Windows.
<p><b>Enhancements to makefiles:</b>
<li>Added the --enable-editline and --enable-static-shell options
to the various autoconf-generated configure scripts.
<li>Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
<p><b>Important fixes:</b>
<li>Fix inconsistent integer to floating-point comparison operations that
could result in a corrupt index if the index is created on a table
column that contains both large integers and floating point values
of similar magnitude. Ticket
<a href="https://www.sqlite.org/src/tktview?name=38a97a87a6">38a97a87a6</a>.
<li>Fix an infinite-loop in the query planner that could occur on
malformed <a href="lang_with.html">common table expressions</a>.
<li>Various bug fixes in the <a href="sqldiff.html">sqldiff</a> tool.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566"
<li>SHA1 for sqlite3.c: b92ca988ebb6df02ac0c8f866dbf3256740408ac
</ol></p>
<a name="version_3_9_2"></a>
<h3>2015-11-02 (3.9.2)</h3><p><ol class='lessindent'>
<li>Fix the schema parser so that it interprets certain
(obscure and ill-formed)
CREATE TABLE statements the same as legacy. Fix for ticket
<a href="https://www.sqlite.org/src/info/ac661962a2aeab3c331">ac661962a2aeab3c331</a>
<li>Fix a query planner problem that could result in an incorrect
answer due to the use of <a href="optoverview.html#autoindex">automatic indexing</a> in subqueries in
the FROM clause of a correlated scalar subqueries. Fix for ticket
<a href="https://www.sqlite.org/src/info/8a2adec1">8a2adec1</a>.
<li>SQLITE_SOURCE_ID: "2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328"
<li>SHA1 for sqlite3.c: 1c4013876f50bbaa3e6f0f98e0147c76287684c1
</ol></p>
<a name="version_3_9_1"></a>
<h3>2015-10-16 (3.9.1)</h3><p><ol class='lessindent'>
<li>Fix <a href="json1.html">the json1 extension</a> so that it does <u>not</u> recognize ASCII form-feed as a
whitespace character, in order to comply with RFC-7159. Fix for ticket
<a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d">57eec374ae1d0a1d</a>
<li>Add a few #ifdef and build script changes to address compilation issues that
appeared after the 3.9.0 release.
<li>SQLITE_SOURCE_ID: ""2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02"
<li>SHA1 for sqlite3.c: 5e6d1873a32d82c2cf8581f143649940cac8ae49
</ol></p>
<a name="version_3_9_0"></a>
<h3>2015-10-14 (3.9.0)</h3><p><ol class='lessindent'>
<p><b>Policy Changes:</b>
<li>The <a href="versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
emerging standard of <a href="http://semver.org/">semantic versioning</a>.
<p><b>New Features And Enhancements:</b>
<li>Added <a href="json1.html">the json1 extension</a> module in the source tree, and in the <a href="amalgamation.html">amalgamation</a>.
Enable support using the <a href="compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
<li>Added <a href="fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="amalgamation.html">amalgamation</a>, enabled
using <a href="compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>. FTS5 will be considered "experimental" (subject
to incompatible changes) for at least one more release cycle.
<li>The <a href="lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
column names following the view name.
<li>Added support for <a href="expridx.html">indexes on expressions</a>.
<li>Added support for <a href="vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
<a href="lang_select.html">SELECT</a> statement.
<li>Added support for <a href="vtab.html#epovtab">eponymous virtual tables</a>.
<li>A <a href="lang_createview.html">VIEW</a> may now reference undefined tables and functions when
initially created. Missing tables and functions are reported when
the VIEW is used in a query.
<li>Added the <a href="c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a>
interfaced (used by <a href="json1.html">the json1 extension</a>).
<li>The query planner is now able to use <a href="partialindex.html">partial indexes</a> that contain
AND-connected terms in the WHERE clause.
<li>The sqlite3_analyzer.exe utility is updated to report the depth of
each btree and to show the average fanout for indexes and
WITHOUT ROWID tables.
<li>Enhanced the <a href="dbstat.html">dbstat virtual table</a> so that it can be used as a
<a href="vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
analyzed.
<p><b>Other changes:</b>
<li>The <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
undocumented for 8 years, is changed into a no-op.
<p><b>Important fixes:</b>
<li>Fixed a critical bug in the
<a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
could cause the database to become unreadable and unrecoverable if a <a href="lang_vacuum.html">VACUUM</a> command
changed the size of the encryption nonce.
<li>Added a memory barrier in the implementation of
<a href="c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
<li>Fix the <a href="optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
do not use an index.
<li>Do not apply the WHERE-clause pushdown optimization on terms that originate
in the ON or USING clause of a LEFT JOIN. Fix for ticket
<a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.
<li>SQLITE_SOURCE_ID: "2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d"
<li>SHA1 for sqlite3.c: c03e47e152ddb9c342b84ffb39448bf4a2bd4288
</ol></p>
<a name="version_3_8_11_1"></a>
<h3>2015-07-29 (3.8.11.1)</h3><p><ol class='lessindent'>
<li>Restore an undocumented side-effect of <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a>: force
the database schema to be parsed if the database has not been previously accessed.
<li>Fix a long-standing problem in <a href="c3ref/changes.html">sqlite3_changes()</a> for <a href="withoutrowid.html">WITHOUT ROWID</a>
tables that was reported a few hours after the 3.8.11 release.
<li>SQLITE_SOURCE_ID: "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f"
<li>SHA1 for sqlite3.c: 3be71d99121fe5b17f057011025bcf84e7cc6c84
</ol></p>
<a name="version_3_8_11"></a>
<h3>2015-07-27 (3.8.11)</h3><p><ol class='lessindent'>
<li>Added the experimental <a href="rbu.html">RBU</a> extension. Note that this extension is experimental
and subject to change in incompatible ways.
<li>Added the experimental <a href="fts5.html">FTS5</a> extension. Note that this extension is experimental
and subject to change in incompatible ways.
<li>Added the <a href="c3ref/value_dup.html">sqlite3_value_dup()</a> and <a href="c3ref/value_dup.html">sqlite3_value_free()</a> interfaces.
<li>Enhance the <a href="spellfix1.html">spellfix1</a> extension to support <a href="lang_conflict.html">ON CONFLICT</a> clauses.
<li>The <a href="lang_expr.html#isisnot">IS operator</a> is now able to drive indexes.
<li>Enhance the query planner to permit <a href="optoverview.html#autoindex">automatic indexing</a> on FROM-clause
subqueries that are implemented by co-routine.
<li>Disallow the use of "rowid" in <a href="lang_with.html">common table expressions</a>.
<li>Added the <a href="pragma.html#pragma_cell_size_check">PRAGMA cell_size_check</a> command for better and earlier
detection of database file corruption.
<li>Added the <a href="fts3.html#matchinfo-b">matchinfo 'b' flag</a> to the <a href="fts3.html#matchinfo">matchinfo()</a> function in <a href="fts3.html">FTS3</a>.
<li>Improved fuzz-testing of database files, with fixes for problems found.
<li>Add the fuzzcheck test program and automatically run this program
using both SQL and database test cases on "make test".
<li>Added the <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS1</a> static mutex and use it in the
Windows <a href="vfs.html">VFS</a>.
<li>The <a href="c3ref/profile.html">sqlite3_profile()</a> callback is invoked (by <a href="c3ref/reset.html">sqlite3_reset()</a> or
<a href="c3ref/finalize.html">sqlite3_finalize()</a>) for statements that did not run to completion.
<li>Enhance the page cache so that it can preallocate a block of memory to
use for the initial set page cache lines. Set the default preallocation
to 100 pages. Yields about a 5% performance increase on common workloads.
<li>Miscellaneous micro-optimizations result in 22.3% more work for the same
number of CPU cycles relative to the previous release.
SQLite now runs twice as fast as <a href="#version_3_8_0">version 3.8.0</a> and three times as
fast as <a href="#version_3_3_9">version 3.3.9</a>.
(Measured using
<a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
<a href="https://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
<li>Added the <a href="c3ref/result_blob.html">sqlite3_result_zeroblob64()</a> and <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob64()</a>
interfaces.
<p><b>Important bug fixes:</b>
<li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that columns of type TEXT never end up
holding an INT value. Ticket
<a href="https://www.sqlite.org/src/info/f2ad7de056ab1dc9200">f2ad7de056ab1dc9200</a>
<li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that it does not leave NULL entries in the
<a href="schematab.html">sqlite_master table</a> if the SELECT statement on the right-hand side
aborts with an error. Ticket
<a href="https://www.sqlite.org/src/info/873cae2b6e25b">873cae2b6e25b</a>
<li>Fix the <a href="optoverview.html#skipscan">skip-scan optimization</a> so that it works correctly when
the <a href="optoverview.html#or_opt">OR optimization</a> is used on <a href="withoutrowid.html">WITHOUT ROWID</a> tables. Ticket
<a href="https://www.sqlite.org/src/info/8fd39115d8f46">8fd39115d8f46</a>
<li>Fix the <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces
so that they actually do provide a 64-bit answer.
<p><b>Hashes:</b>
<li>SQLITE_SOURCE_ID: "2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0"
<li>SHA1 for sqlite3.c: 719f6891abcd9c459b5460b191d731cd12a3643e
</ol></p>
<a name="version_3_8_10_2"></a>
<h3>2015-05-20 (3.8.10.2)</h3><p><ol class='lessindent'>
<li>Fix an index corruption issue introduced by <a href="#version_3_8_7">version 3.8.7</a>. An index
with a TEXT key can be corrupted by an <a href="lang_insert.html">INSERT</a> into the corresponding
table if the table has two nested triggers that convert the key value to INTEGER
and back to TEXT again.
Ticket <a href="https://www.sqlite.org/src/info/34cd55d68e0e6e7c9a0711aab81a2ee3c354b4c0">34cd55d68e0</a>
<li>SQLITE_SOURCE_ID: "2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4"
<li>SHA1 for sqlite3.c: 638abb77965332c956dbbd2c8e4248e84da4eb63
</ol></p>
<a name="version_3_8_10_1"></a>
<h3>2015-05-09 (3.8.10.1)</h3><p><ol class='lessindent'>
<li>Make <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> responsive to the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a>
compile-time option.
<li>Fix a harmless warning in the <a href="cli.html">command-line shell</a> on some versions of MSVC.
<li>Fix minor issues with the <a href="dbstat.html">dbstat virtual table</a>.
<li>SQLITE_SOURCE_ID: "2015-05-09 12:14:55 05b4b1f2a937c06c90db70c09890038f6c98ec40"
<li>SHA1 for sqlite3.c: 85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2
</ol></p>
<a name="version_3_8_10"></a>
<h3>2015-05-07 (3.8.10)</h3><p><ol class='lessindent'>
<li>Added the <a href="sqldiff.html">sqldiff.exe</a> utility program for computing the differences between two
SQLite database files.
<li>Added the <a href="fts3.html#matchinfo-y">matchinfo y flag</a> to the
<a href="fts3.html#matchinfo">matchinfo()</a> function of <a href="fts3.html">FTS3</a>.
<li>Performance improvements for <a href="lang_select.html#orderby">ORDER BY</a>, <a href="lang_vacuum.html">VACUUM</a>, <a href="lang_createindex.html">CREATE INDEX</a>,
<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>.
<li>Fix many obscure problems discovered while <a href="testing.html#fuzztesting">SQL fuzzing</a>.
<li>Identify all methods for important objects in the interface documentation.
(<a href="c3ref/context.html">example</a>)
<li>Made the <a href="testing.html#aflfuzz">American Fuzzy Lop fuzzer</a>
a standard part of SQLite's <a href="testing.html">testing strategy</a>.
<li>Add the ".binary" and ".limits" commands to the <a href="cli.html">command-line shell</a>.
<li>Make the <a href="dbstat.html">dbstat virtual table</a> part of standard builds when
compiled with the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option.
<li>SQLITE_SOURCE_ID: "2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437"
<li>SHA1 for sqlite3.c: 0b34f0de356a3f21b9dfc761f3b7821b6353c570
</ol></p>
<a name="version_3_8_9"></a>
<h3>2015-04-08 (3.8.9)</h3><p><ol class='lessindent'>
<li>Add VxWorks-7 as an officially supported and tested platform.
<li>Added the <a href="c3ref/status.html">sqlite3_status64()</a> interface.
<li>Fix memory size tracking so that it works even if SQLite uses more
than 2GiB of memory.
<li>Added the <a href="pragma.html#pragma_index_xinfo">PRAGMA index_xinfo</a> command.
<li>Fix a potential 32-bit integer overflow problem in the
<a href="c3ref/blob_read.html">sqlite3_blob_read()</a> and <a href="c3ref/blob_write.html">sqlite3_blob_write()</a> interfaces.
<li>Ensure that prepared statements automatically reset on extended
error codes of SQLITE_BUSY and SQLITE_LOCKED even when compiled
using <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a>.
<li>Correct miscounts in the sqlite3_analyzer.exe utility related
to WITHOUT ROWID tables.
<li>Added the ".dbinfo" command to the <a href="cli.html">command-line shell</a>.
<li>Improve the performance of fts3/4 queries that use the OR operator
and at least one auxiliary fts function.
<li>Fix a bug in the fts3 snippet() function causing it to omit
leading separator characters from snippets that begin with the
first token in a column.
<li>SQLITE_SOURCE_ID: "2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09"
<li>SHA1 for sqlite3.c: 49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42
</ol></p>
<a name="version_3_8_8_3"></a>
<h3>2015-02-25 (3.8.8.3)</h3><p><ol class='lessindent'>
<li>Fix a bug (ticket
<a href="https://www.sqlite.org/src/info/2326c258d02ead33">2326c258d02ead33</a>) that can lead
to incorrect results if the qualifying constraint of a <a href="partialindex.html">partial index</a> appears in the
ON clause of a LEFT JOIN.
<li>Added the ability to link against the
"<a href="https://github.com/antirez/linenoise">linenoise</a>"
command-line editing library in unix builds of the <a href="cli.html">command-line shell</a>.
<li>SQLITE_SOURCE_ID: "2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b"
<li>SHA1 for sqlite3.c: 74ee38c8c6fd175ec85a47276dfcefe8a262827a
</ol></p>
<a name="version_3_8_8_2"></a>
<h3>2015-01-30 (3.8.8.2)</h3><p><ol class='lessindent'>
<li>Enhance <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2(TRUNCATE)</a> interface so that it truncates the
WAL file even if there is no checkpoint work to be done.
<li>SQLITE_SOURCE_ID: "2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098"
<li>SHA1 for sqlite3.c: 85ce79948116aa9a087ec345c9d2ce2c1d3cd8af
</ol></p>
<a name="version_3_8_8_1"></a>
<h3>2015-01-20 (3.8.8.1)</h3><p><ol class='lessindent'>
<li>Fix a bug in the sorting logic, present since version 3.8.4, that can cause
output to appear in the wrong order on queries that contains an ORDER BY clause,
a LIMIT clause, and that have approximately 60 or more columns in the result set.
Ticket <a href="https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79">f97c4637102a3ae72b79</a>.
<li>SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
<li>SHA1 for sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
</ol></p>
<a name="version_3_8_8"></a>
<h3>2015-01-16 (3.8.8)</h3><p><ol class='lessindent'>
<p><b>New Features:</b>
<li>Added the <a href="pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
a database file has been modified by another process.
<li>Added the <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
<a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
to <a href="pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
<li>Added the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
compiled with <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
<li>The <a href="c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
<a href="withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
a table if the column name parameter is NULL. The interface is now
also included in the build by default, without requiring
the <a href="compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
<li>Added the <a href="compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
<li>Added the <a href="compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
<li>Added the <a href="compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
start-time option.
<li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="c3ref/config.html">sqlite3_config()</a>
which makes it easier for applications to determine the appropriate
amount of memory for use with <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
<li>The number of rows in a <a href="lang_select.html#values">VALUES clause</a> is no longer limited by
<a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
<li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
<a href="loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
evaluate SQL.
<p><b>Performance Enhancements:</b>
<li>Reduce the number of memcpy() operations involved in balancing a b-tree,
for 3.2% overall performance boost.
<li>Improvements to cost estimates for the <a href="optoverview.html#skipscan">skip-scan optimization</a>.
<li>The <a href="optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
a <a href="partialindex.html">partial index</a> if that is appropriate.
<p><b>Bug fixes:</b>
<li>Ensure durability following a power loss with
"PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
the journal file.
<li>The query planner now recognizes that any column in the right-hand
table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
constraint. Avoid trying to optimize out NULL tests in those cases.
Fix for ticket
<a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
<li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
operator is implemented using a descending index. Fix for ticket
<a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
<li>Fix data races that might occur under stress when running with many threads
in <a href="sharedcache.html">shared cache mode</a> where some of the threads are opening and
closing connections.
<li>Fix obscure crash bugs found by
<a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>. Ticket
<a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
<li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
<a href="rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
<p><b>Other changes:</b>
<li>Disable the use of the strchrnul() C-library routine unless it is
specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
<li>Improvements to the effectiveness and accuracy of the
<a href="lang_corefunc.html#likelihood">likelihood()</a>, <a href="lang_corefunc.html#likely">likely()</a>, and <a href="lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
<li>SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
<li>SHA1 for sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
</ol></p>
<a name="version_3_8_7_4"></a>
<h3>2014-12-09 (3.8.7.4)</h3><p><ol class='lessindent'>
<li>Bug fix: Add in a mutex that was omitted from the previous release.
<li>SQLITE_SOURCE_ID: "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
<li>SHA1 for sqlite3.c: 0a56693a3c24aa3217098afab1b6fecccdedfd23
</ol></p>
<a name="version_3_8_7_3"></a>
<h3>2014-12-05 (3.8.7.3)</h3><p><ol class='lessindent'>
<li>Bug fix: Ensure the cached KeyInfo objects (an internal abstraction not visible to the
application) do not go stale when operating in <a href="sharedcache.html">shared cache mode</a> and frequently closing
and reopening some database connections while leaving other database connections on the
same shared cache open continuously. Ticket
<a href="https://www.sqlite.org/src/info/e4a18565a36884b00edf">e4a18565a36884b00edf</a>.
<li>Bug fix: Recognize that any column in the right-hand table of a LEFT JOIN can be
NULL even if the column has a NOT NULL constraint. Do not apply optimizations that
assume the column is never NULL. Ticket
<a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
<li>SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
<li>SHA1 for sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
</ol></p>
<a name="version_3_8_7_2"></a>
<h3>2014-11-18 (3.8.7.2)</h3><p><ol class='lessindent'>
<li>Enhance the <a href="lang_transaction.html">ROLLBACK</a> command so that pending queries are allowed to continue as long
as the schema is unchanged. Formerly, a ROLLBACK would cause all pending queries to
fail with an <a href="rescode.html#abort">SQLITE_ABORT</a> or <a href="rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a> error. That error is still returned
if the ROLLBACK modifies the schema.
<li>Bug fix: Make sure that NULL results from OP_Column are fully and completely NULL and
do not have the MEM_Ephem bit set.
Ticket <a href="https://www.sqlite.org/src/info/094d39a4c95ee4">094d39a4c95ee4</a>.
<li>Bug fix: The %c format in sqlite3_mprintf() is able to handle precisions greater than 70.
<li>Bug fix: Do not automatically remove the DISTINCT keyword from a SELECT that forms
the right-hand side of an IN operator since it is necessary if the SELECT also
contains a LIMIT.
Ticket <a href="https://www.sqlite.org/src/info/db87229497">db87229497</a>.
<li>SQLITE_SOURCE_ID: "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
<li>SHA1 for sqlite3.c: b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
</ol></p>
<a name="version_3_8_7_1"></a>
<h3>2014-10-29 (3.8.7.1)</h3><p><ol class='lessindent'>
<li>In <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=TRUNCATE</a> mode, call fsync() immediately after truncating
the journal file to ensure that the transaction is durable across a power loss.
<li>Fix an assertion fault that can occur when updating the NULL value of a field
at the end of a table that was added using <a href="lang_altertable.html">ALTER TABLE ADD COLUMN</a>.
<li>Do not attempt to use the strchrnul() function from the standard C library unless
the HAVE_STRCHRNULL compile-time option is set.
<li>Fix a couple of problems associated with running an UPDATE or DELETE on a
<a href="lang_createview.html">VIEW</a> with a <a href="lang_createtable.html#rowid">rowid</a> in the WHERE clause.
<li>SQLITE_SOURCE_ID: "2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221"
<li>SHA1 for sqlite3.c: 2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
</ol></p>
<a name="version_3_8_7"></a>
<h3>2014-10-17 (3.8.7)</h3><p><ol class='lessindent'>
<p><b>Performance Enhancements:</b>
<li>Many micro-optimizations result in 20.3% more work for the same number
of CPU cycles relative to the previous release.
The cumulative performance increase since <a href="#version_3_8_0">version 3.8.0</a> is 61%.
(Measured using
<a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
<a href="https://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
Ubuntu 13.10 x64 with gcc 4.8.1 and -Os. Your performance may vary.)
<li>The sorter can use auxiliary helper threads to increase real-time response.
This feature is off by default and may be
enabled using the <a href="pragma.html#pragma_threads">PRAGMA threads</a> command or the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a>
compile-time option.
<li>Enhance the <a href="optoverview.html#skipscan">skip-scan</a> optimization so that it is able to skip index terms that
occur in the middle of the index, not just as the left-hand side of the index.
<li>Improved optimization of <a href="lang_expr.html#castexpr">CAST</a> operators.
<li>Various improvements in how the query planner uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a>
information to estimate plan costs.
<p><b>New Features:</b>
<li>Added new interfaces with 64-bit length parameters:
<a href="c3ref/free.html">sqlite3_malloc64()</a>,
<a href="c3ref/free.html">sqlite3_realloc64()</a>,
<a href="c3ref/bind_blob.html">sqlite3_bind_blob64()</a>,
<a href="c3ref/result_blob.html">sqlite3_result_blob64()</a>,
<a href="c3ref/bind_blob.html">sqlite3_bind_text64()</a>, and
<a href="c3ref/result_blob.html">sqlite3_result_text64()</a>.
<li>Added the new interface <a href="c3ref/free.html">sqlite3_msize()</a> that returns the size of a memory allocation
obtained from <a href="c3ref/free.html">sqlite3_malloc64()</a> and its variants.
<li>Added the <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> option to <a href="c3ref/limit.html">sqlite3_limit()</a> and
<a href="pragma.html#pragma_threads">PRAGMA threads</a> command for configuring the number of available worker threads.
<li>The <a href="spellfix1.html">spellfix1</a> extension allows the application to optionally specify the rowid for
each INSERT.
<li>Added the <a href="https://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt">User Authentication</a>
extension.
<p><b>Bug Fixes:</b>
<li>Fix a bug in the <a href="partialindex.html">partial index</a> implementation that might result in an incorrect
answer if a partial index is used in a subquery or in a <a href="lang_createview.html">view</a>.
Ticket <a href="https://www.sqlite.org/src/info/98d973b8f5">98d973b8f5</a>.
<li>Fix a query planner bug that might cause a table to be scanned in the wrong direction
(thus reversing the order of output) when a DESC index is used to implement the ORDER BY
clause on a query that has an identical GROUP BY clause.
Ticket <a href="https://www.sqlite.org/src/info/ba7cbfaedc7e6">ba7cbfaedc7e6</a>.
<li>Fix a bug in <a href="c3ref/profile.html">sqlite3_trace()</a> that was causing it to sometimes fail to print
an SQL statement if that statement needed to be re-prepared.
Ticket <a href="https://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a>
<li>Fix a faulty assert() statement.
Ticket <a href="https://www.sqlite.org/src/info/369d57fb8e5ccdff06f1">369d57fb8e5ccdff06f1</a>
<p><b>Test, Debug, and Analysis Changes:</b>
<li>Show ASCII-art abstract syntax tree diagrams using the ".selecttrace"
and ".wheretrace" commands in the
<a href="cli.html">command-line shell</a> when compiled with <a href="compile.html#debug">SQLITE_DEBUG</a>, SQLITE_ENABLE_SELECTTRACE,
and SQLITE_ENABLE_WHERETRACE. Also provide the sqlite3TreeViewExpr() and
sqlite3TreeViewSelect() entry points that can be invoked from with the
debugger to show the parse tree when stopped at a breakpoint.
<li>Drop support for SQLITE_ENABLE_TREE_EXPLAIN. The SELECTTRACE mechanism provides
more useful diagnostics information.
<li>New options to the <a href="cli.html">command-line shell</a> for configuring auxiliary
memory usage: --pagecache, --lookaside, and --scratch.
<li>SQLITE_SOURCE_ID: "2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4"
<li>SHA1 for sqlite3.c: 56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd
</ol></p>
<a name="version_3_8_6"></a>
<h3>2014-08-15 (3.8.6)</h3><p><ol class='lessindent'>
<li>Added support for <a href="lang_expr.html#hexint">hexadecimal integer literals</a> in the SQL parser.
(Ex: 0x123abc)
<li>Enhanced the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to detect <a href="lang_createtable.html#uniqueconst">UNIQUE</a> and
<a href="lang_createtable.html#notnullconst">NOT NULL</a> constraint violations.
<li>Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 62 to 125.
<li>Increase the timeout in <a href="wal.html">WAL mode</a> before issuing an <a href="rescode.html#protocol">SQLITE_PROTOCOL</a>
error from 1 second to 10 seconds.
<li>Added the <a href="lang_corefunc.html#likely">likely(X)</a> SQL function.
<li>The <a href="fts3.html#unicode61">unicode61</a> tokenizer is now included in <a href="fts3.html#fts4">FTS4</a> by default.
<li>Trigger automatic reprepares on all prepared statements when <a href="lang_analyze.html">ANALYZE</a> is
run.
<li>Added a new
<a href="loadext.html">loadable extension</a> source code file to the source tree:
<a href="https://www.sqlite.org/src/finfo?name=ext/misc/fileio.c">fileio.c</a>
<li>Add extension functions <a href="cli.html#fileio">readfile(X) and writefile(X,Y)</a>
(using code copy/pasted from fileio.c in the previous bullet) to the
<a href="cli.html">command-line shell</a>.
<li>Added the <a href="cli.html#fullschema">.fullschema</a> dot-command to the <a href="cli.html">command-line shell</a>.
<p><b>Performance Enhancements:</b>
<li>Deactivate the <a href="lang_select.html#distinct">DISTINCT</a> keyword on subqueries on the
right-hand side of the <a href="lang_expr.html#in_op">IN operator</a>.
<li>Add the capability of evaluating an <a href="lang_expr.html#in_op">IN operator</a> as a sequence
of comparisons as an alternative to using a table lookup. Use the sequence
of comparisons implementation in circumstances where it is likely to be
faster, such as when the right-hand side of the IN operator
is small and/or changes frequently.
<li>The query planner now uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a> information (created by <a href="lang_analyze.html">ANALYZE</a>)
to help determine if the <a href="optoverview.html#skipscan">skip-scan optimization</a> is appropriate.
<li>Ensure that the query planner never tries to use a self-made transient
index in place of a schema-defined index.
<li>Other minor tweaks to improve the quality of <a href="opcode.html">VDBE</a> code.
<p><b>Bug Fixes:</b>
<li>Fix a bug in <a href="lang_createindex.html">CREATE UNIQUE INDEX</a>, introduced when <a href="withoutrowid.html">WITHOUT ROWID</a>
support added in version 3.8.2, that allows a non-unique NOT NULL column to be
given a UNIQUE index.
Ticket <a href="https://www.sqlite.org/src/info/9a6daf340df99ba93c">9a6daf340df99ba93c</a>
<li>Fix a bug in <a href="rtree.html">R-Tree extension</a>, introduced in the previous release,
that can cause an
incorrect results for queries that use the rowid of the R-Tree on the
left-hand side of an <a href="lang_expr.html#in_op">IN operator</a>.
Ticket <a href="https://www.sqlite.org/src/info/d2889096e7bdeac6">d2889096e7bdeac6</a>.
<li>Fix the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface so that it gives the correct answer
for <a href="lang_transaction.html">ROLLBACK</a> statements that have been stepped but never reset.
<li>Fix a bug in that would cause a null pointer to be dereferenced
if a column with a DEFAULT that is an aggregate function tried to usee its
DEFAULT.
Ticket <a href="https://www.sqlite.org/src/info/3a88d85f36704eebe1">3a88d85f36704eebe1</a>
<li>CSV output from the <a href="cli.html">command-line shell</a> now always uses CRNL for the
row separator and avoids inserting CR in front of NLs contained in
data.
<li>Fix a <a href="datatype3.html#affinity">column affinity</a> problem with the <a href="lang_expr.html#in_op">IN operator</a>.
Ticket <a href="https://www.sqlite.org/src/info/9a8b09f8e6">9a8b09f8e6</a>.
<li>Fix the <a href="lang_analyze.html">ANALYZE</a> command so that it adds correct samples for
<a href="withoutrowid.html">WITHOUT ROWID</a> tables in the <a href="fileformat2.html#stat4tab">sqlite_stat4</a> table.
Ticket <a href="https://www.sqlite.org/src/info/b2fa5424e6fcb15">b2fa5424e6fcb15</a>.
<li>SQLITE_SOURCE_ID: "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
<li>SHA1 for sqlite3.c: 72c64f05cd9babb9c0f9b3c82536d83be7804b1c
</ol></p>
<a name="version_3_8_5"></a>
<h3>2014-06-04 (3.8.5)</h3><p><ol class='lessindent'>
<li>Added support for <a href="queryplanner.html#partialsort">partial sorting by index</a>.
<li>Enhance the query planner so that it always prefers an index that uses a superset of
WHERE clause terms relative to some other index.
<li>Improvements to the <a href="fts3.html#*fts4automergecmd">automerge command</a> of <a href="fts3.html#fts4">FTS4</a> to better control the index size
for a full-text index that is subject to a large number of updates.
<li>Added the <a href="rtree.html#xquery">sqlite3_rtree_query_callback()</a> interface to <a href="rtree.html">R-Tree extension</a>
<li>Added new <a href="uri.html#coreqp">URI query parameters</a> "nolock" and "immutable".
<li>Use less memory by not remembering CHECK constraints on read-only
database connections.
<li>Enable the <a href="queryplanner.html#or_in_where">OR optimization</a> for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
<li>Render expressions of the form "x IN (?)" (with a single value in
the list on the right-hand side of the IN operator) as if they where "x==?",
Similarly optimize "x NOT IN (?)"
<li>Add the ".system" and ".once" commands to the <a href="cli.html">command-line shell</a>.
<li>Added the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a> bit to the set of bits that can be returned by
the xDeviceCharacteristics method of a <a href="vfs.html">VFS</a>.
<li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BYTEORDER</a> test control.
<p><b>Bug Fixes:</b>
<li>OFFSET clause ignored on queries without a FROM clause.
Ticket <a href="https://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a>
<li>Assertion fault on queries involving expressions of the form
"x IN (?)". Ticket <a href="https://www.sqlite.org/src/info/e39d032577">e39d032577</a>.
<li>Incorrect column datatype reported.
Ticket <a href="https://www.sqlite.org/src/info/a8a0d2996a">a8a0d2996a</a>
<li>Duplicate row returned on a query against a table with more than
16 indices, each on a separate column, and all used via OR-connected constraints.
Ticket <a href="https://www.sqlite.org/src/info/10fb063b11">10fb063b11</a>
<li>Partial index causes assertion fault on UPDATE OR REPLACE.
Ticket <a href="https://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a>
<li>Crash when calling undocumented SQL function sqlite_rename_parent()
with NULL parameters.
Ticket <a href="https://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a>
<li>ORDER BY ignored if the query has an identical GROUP BY.
Ticket <a href="https://www.sqlite.org/src/info/b75a9ca6b0499">b75a9ca6b0</a>
<li>The group_concat(x,'') SQL function returns NULL instead of an empty string
when all inputs are empty strings.
Ticket <a href="https://www.sqlite.org/src/info/55746f9e65f85">55746f9e65</a>
<li>Fix a bug in the VDBE code generator that caused crashes when
doing an INSERT INTO ... SELECT statement where the number of columns
being inserted is larger than the number of columns in the destination
table.
Ticket <a href="https://www.sqlite.org/src/info/e9654505cfda9">e9654505cfd</a>
<li>Fix a problem in CSV import in the <a href="cli.html">command-line shell</a>
where if the leftmost field of the first row
in the CSV file was both zero bytes in size and unquoted no data would
be imported.
<li>Fix a problem in FTS4 where the left-most column that contained
the <a href="fts3.html#fts4notindexed">notindexed column</a> name as a prefix
was not indexed rather than the column whose name matched exactly.
<li>Fix the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface so that it returns true if
the database is read-only due to the file format write version number
being too large.
<li>SQLITE_SOURCE_ID: "2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212"
<li>SHA1 for sqlite3.c: 7bc194957238c61b1a47f301270286be5bc5208c
</ol></p>
<a name="version_3_8_4_3"></a>
<h3>2014-04-03 (3.8.4.3)</h3><p><ol class='lessindent'>
<li>Add a
<a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=7d539cedb1c&v2=ebad891b7494d&smhdr">one-character fix</a>
for a problem that might cause incorrect query results on a query that mixes
DISTINCT, GROUP BY in a subquery, and ORDER BY.
<a href="https://www.sqlite.org/src/info/98825a79ce1456863">Ticket 98825a79ce14</a>.
<li>SQLITE_SOURCE_ID: "2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3"
<li>SHA1 for sqlite3.c: 310a1faeb9332a3cd8d1f53b4a2e055abf537bdc
</ol></p>
<a name="version_3_8_4_2"></a>
<h3>2014-03-26 (3.8.4.2)</h3><p><ol class='lessindent'>
<li>Fix a potential buffer overread that could result when trying to search a
corrupt database file.
<li>SQLITE_SOURCE_ID: "2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e"
<li>SHA1 for sqlite3.c: 4685ca86c2ea0649ed9f59a500013e90b3fe6d03
</ol></p>
<a name="version_3_8_4_1"></a>
<h3>2014-03-11 (3.8.4.1)</h3><p><ol class='lessindent'>
<li>Work around a C-preprocessor macro conflict that breaks the build for some
configurations with Microsoft Visual Studio.
<li>When computing the cost of the <a href="optoverview.html#skipscan">skip-scan optimization</a>, take into account the
fact that multiple seeks are required.
<li>SQLITE_SOURCE_ID: "2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0"
<li>SHA1 for sqlite3.c: d5cd1535053a50aa8633725e3595740b33709ac5
</ol></p>
<a name="version_3_8_4"></a>
<h3>2014-03-10 (3.8.4)</h3><p><ol class='lessindent'>
<li>Code optimization and refactoring for improved performance.
<li>Add the ".clone" and ".save" commands to the command-line shell.
<li>Update the banner on the command-line shell to alert novice users when they
are using an ephemeral in-memory database.
<li>Fix editline support in the command-line shell.
<li>Add support for coverage testing of VDBE programs using the
<a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="c3ref/test_control.html">sqlite3_test_control()</a>.
<li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
<li>Change the datatype of SrcList.nSrc from type u8 to type int to work around
an issue in the C compiler on AIX.
<li>Get extension loading working on Cygwin.
<li>Bug fix: Fix the <a href="lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
rather than an "out of memory" error when called with zero arguments.
<li>Bug fix: DISTINCT now recognizes that a <a href="lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
0x00 bytes are the same thing.
<a href="https://www.sqlite.org/src/info/fccbde530a">Ticket [fccbde530a]</a>
<li>Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
term in the WHERE clause and also contain an OR term in the WHERE clause and
are compiled with <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
<a href="https://www.sqlite.org/src/info/4c86b126f2">Ticket [4c86b126f2]</a>
<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between
normal tables and WITHOUT ROWID tables.
<a href="https://www.sqlite.org/src/info/c34d0557f7">Ticket [c34d0557f7]</a>
<li>Bug fix: Make sure the same temporary registers are not used in concurrent
co-routines used to implement compound SELECT statements containing ORDER
BY clauses, as such use can lead to incorrect answers.
<a href="https://www.sqlite.org/src/info/8c63ff0eca">Ticket [8c63ff0eca]</a>
<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
<a href="https://www.sqlite.org/src/info/65bdeb9739">Ticket [65bdeb9739]</a>
<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements
contained within a TRIGGER.
<a href="https://www.sqlite.org/src/info/4ef7e3cfca">Ticket [4ef7e3cfca]</a>
<li>Bug fix: Fix column default values expressions of the form
"DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
the column to a floating point value approximately equal to
+9223372036854775808.0.
<li>SQLITE_SOURCE_ID: "2014-03-10 12:20:37 530a1ee7dc2435f80960ce4710a3c2d2bfaaccc5"
<li>SHA1 for sqlite3.c: b0c22e5f15f5ba2afd017ecd990ea507918afe1c
</ol></p>
<a name="version_3_8_3_1"></a>
<h3>2014-02-11 (3.8.3.1)</h3><p><ol class='lessindent'>
<li>Fix a bug (ticket <a href="https://www.sqlite.org/src/info/4c86b126f2">4c86b126f2</a>)
that causes rows to go missing on some queries with OR clauses and
IS NOT NULL operators in the WHERE clause, when the <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>
or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time options are used.
<li>Fix a harmless compiler warning that was causing problems for VS2013.
<li>SQLITE_SOURCE_ID: "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
<li>SHA1 for sqlite3.c: 990004ef2d0eec6a339e4caa562423897fe02bf0
</ol></p>
<a name="version_3_8_3"></a>
<h3>2014-02-03 (3.8.3)</h3><p><ol class='lessindent'>
<li>Added support for <a href="lang_with.html">common table expressions</a> and the <a href="lang_with.html">WITH clause</a>.
<li>Added the <a href="lang_corefunc.html#printf">printf()</a> SQL function.
<li>Added <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> as an optional bit in the 4th argument to the
<a href="c3ref/create_function.html">sqlite3_create_function()</a> and related interfaces, providing applications with
the ability to create new functions that can be factored out of inner loops when
they have constant arguments.
<li>Add <a href="rescode.html#readonly_dbmoved">SQLITE_READONLY_DBMOVED</a> error code, returned at the beginning of a
transaction, to indicate that the underlying database file has been renamed
or moved out from under SQLite.
<li>Allow arbitrary expressions, including function calls and subqueries, in
the filename argument to <a href="lang_attach.html">ATTACH</a>.
<li>Allow a <a href="lang_select.html#values">VALUES clause</a> to be used anywhere a <a href="lang_select.html">SELECT</a> statement is valid.
<li>Reseed the PRNG used by <a href="c3ref/randomness.html">sqlite3_randomness(N,P)</a> when invoked with N==0.
Automatically reseed after a fork() on unix.
<li>Enhance the <a href="spellfix1.html">spellfix1</a> virtual table so that it can search efficiently by rowid.
<li>Performance enhancements.
<li>Improvements to the comments in the VDBE byte-code display when running <a href="lang_explain.html">EXPLAIN</a>.
<li>Add the "%token_class" directive to <a href="lemon.html">Lemon parser generator</a> and use it to simplify
the grammar.
<li>Change the <a href="lemon.html">Lemon</a> source code to avoid calling C-library functions that OpenBSD
considers dangerous. (Ex: sprintf).
<li>Bug fix: In the <a href="cli.html">command-line shell</a> CSV import feature, do not end a field
when an escaped double-quote occurs at the end of a CRLN line.
<li>SQLITE_SOURCE_ID:
"2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
<li>SHA1 for sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
</ol></p>
<a name="version_3_8_2"></a>
<h3>2013-12-06 (3.8.2)</h3><p><ol class='lessindent'>
<li>Changed the defined behavior for the <a href="lang_expr.html#castexpr">CAST expression</a> when floating point values
greater than +9223372036854775807 are cast into integers so that the
result is the largest possible integer, +9223372036854775807, instead of
the smallest possible integer, -9223372036854775808. After this change,
CAST(9223372036854775809.0 as INT) yields +9223372036854775807 instead
of -9223372036854775808.
<b><big>←</big> Potentially Incompatible Change!</b>
<li>Added support for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
<li>Added the <a href="optoverview.html#skipscan">skip-scan optimization</a> to the query planner.
<li>Extended the <a href="vtab.html">virtual table</a> interface, and in particular the
<a href="c3ref/index_info.html">sqlite3_index_info</a> object to allow a virtual table to report its estimate
on the number of rows that will be returned by a query.
<li>Update the <a href="rtree.html">R-Tree extension</a> to make use of the enhanced virtual table
interface.
<li>Add the <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option.
<li>Enhanced the comments that are inserted into <a href="lang_explain.html">EXPLAIN</a> output when the
<a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is enabled.
<li>Performance enhancements in the VDBE, especially to the OP_Column opcode.
<li>Factor constant subexpressions in inner loops out to the initialization code
in prepared statements.
<li>Enhanced the ".explain" output formatting of the <a href="cli.html">command-line shell</a>
so that loops are indented to better show the structure of the program.
<li>Enhanced the ".timer" feature of the <a href="cli.html">command-line shell</a> so that it
shows wall-clock time in addition to system and user times.
<li>SQLITE_SOURCE_ID:
"2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d"
<li>SHA1 for sqlite3.c: 6422c7d69866f5ea3db0968f67ee596e7114544e
</ol></p>
<a name="version_3_8_1"></a>
<h3>2013-10-17 (3.8.1)</h3><p><ol class='lessindent'>
<li>Added the <a href="lang_corefunc.html#unlikely">unlikely()</a> and <a href="lang_corefunc.html#likelihood">likelihood()</a> SQL functions to be used
as hints to the query planner.
<li>Enhancements to the query planner:
<ol type='a'>
<li>Take into account the fact WHERE clause terms that cannot be used with indices
still probably reduce the number of output rows.
<li>Estimate the sizes of table and index rows and use the smallest applicable B-Tree
for full scans and "count(*)" operations.
</ol>
<li>Added the <a href="pragma.html#pragma_soft_heap_limit">soft_heap_limit pragma</a>.
<li>Added support for <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>
<li>Added support for "sz=NNN" parameters at the end of
<a href="fileformat2.html#stat1tab">sqlite_stat1.stat</a> fields
used to specify the average length in bytes for table and index rows.
<li>Avoid running foreign-key constraint checks on an UPDATE if none of the
modified columns are associated with foreign keys.
<li>Added the <a href="compile.html#minimum_file_descriptor">SQLITE_MINIMUM_FILE_DESCRIPTOR</a> compile-time option
<li>Added the win32-longpath VFS on windows, permitting filenames up to 32K
characters in length.
<li>The <a href="lang_datefunc.html">Date And Time Functions</a> are enhanced so that the current time
(ex: julianday('now')) is always the same for multiple function invocations
within the same <a href="c3ref/step.html">sqlite3_step()</a> call.
<li>Add the "totype.c" extension, implementing the tointeger() and toreal()
SQL functions.
<li><a href="fts3.html#fts4">FTS4</a> queries are better able to make use of docid<$limit constraints to
limit the amount of I/O required.
<li>Added the hidden <a href="fts3.html#f4alid">fts4aux languageid column</a> to the <a href="fts3.html#fts4aux">fts4aux</a> virtual table.
<li>The <a href="lang_vacuum.html">VACUUM</a> command packs the database about 1% tighter.
<li>The sqlite3_analyzer utility program is updated to provide better descriptions
and to compute a more accurate estimate for "Non-sequential pages"
<li>Refactor the implementation of PRAGMA statements to improve parsing performance.
<li>The directory used to hold temporary files on unix can now be set using
the SQLITE_TMPDIR environment variable, which takes precedence over the
TMPDIR environment variable. The <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global variable
still has higher precedence than both environment variables, however.
<li>Added the <a href="pragma.html#pragma_stats">PRAGMA stats</a> statement.
<li><b>Bug fix:</b> Return the correct answer for "SELECT count(*) FROM table" even if
there is a <a href="partialindex.html">partial index</a> on the table. Ticket
<a href="https://www.sqlite.org/src/info/a5c8ed66ca">a5c8ed66ca</a>.
<li>SQLITE_SOURCE_ID:
"2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a"
<li>SHA1 for sqlite3.c: 0a54d76566728c2ba96292a49b138e4f69a7c391
</ol></p>
<a name="version_3_8_0_2"></a>
<h3>2013-09-03 (3.8.0.2)</h3><p><ol class='lessindent'>
<li>Fix a bug in the optimization that attempts to omit unused LEFT JOINs
<li>SQLITE_SOURCE_ID:
"2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef"
<li>SHA1 for sqlite3.c: 6cf0c7b46975a87a0dc3fba69c229a7de61b0c21
</ol></p>
<a name="version_3_8_0_1"></a>
<h3>2013-08-29 (3.8.0.1)</h3><p><ol class='lessindent'>
<li>Fix an off-by-one error that caused quoted empty string at the end of a
CRNL-terminated line of CSV input to be misread by the command-line shell.
<li>Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
constraint and then another INNER JOIN to the right that involves an OR constraint.
<li>Fix a query planner bug that could result in a segfault when querying tables
with a UNIQUE or PRIMARY KEY constraint with more than four columns.
<li>SQLITE_SOURCE_ID:
"2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49"
<li>SHA1 for sqlite3.c: 99906bf63e6cef63d6f3d7f8526ac4a70e76559e
</ol></p>
<a name="version_3_8_0"></a>
<h3>2013-08-26 (3.8.0)</h3><p><ol class='lessindent'>
<li>Add support for <a href="partialindex.html">partial indexes</a></li>
<li>Cut-over to the <a href="queryplanner-ng.html">next generation query planner</a> for faster and better query plans.
<li>The <a href="eqp.html">EXPLAIN QUERY PLAN</a> output no longer shows an estimate of the number of
rows generated by each loop in a join.
<li>Added the <a href="fts3.html#fts4notindexed">FTS4 notindexed option</a>, allowing non-indexed columns in an FTS4 table.
<li>Added the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> option to <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
<li>Added the <a href="pragma.html#pragma_cache_spill">cache_spill pragma</a>.
<li>Added the <a href="pragma.html#pragma_query_only">query_only pragma</a>.
<li>Added the <a href="pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> and the
<a href="c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...) C-language interface.
<li>Added the "percentile()" function as a <a href="loadext.html">loadable extension</a> in the ext/misc
subdirectory of the source tree.
<li>Added the <a href="compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> compile-time option.
<li>Add the <a href="c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface.
<li>A running SELECT statement that lacks a FROM clause (or any other statement that
never reads or writes from any database file) will not prevent a read
transaction from closing.
<li>Add the <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option. Setting this option
to 0 disables automatic indices by default.
<li>Issue an <a href="rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> warning on the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> whenever
the query planner uses an automatic index.
<li>Added the <a href="compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> compile-time option.
<li>Added an optional 5th parameter defining the collating sequence to the
next_char() extension SQL function.
<li>The <a href="rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> extended error code is returned in WAL mode when
a read transaction cannot be upgraded to a write transaction because the read is
on an older snapshot.
<li>Enhancements to the sqlite3_analyzer utility program to provide size
information separately for each individual index of a table, in addition to
the aggregate size.
<li>Allow read transactions to be freely opened and closed by SQL statements run
from within the implementation of <a href="appfunc.html">application-defined SQL functions</a> if the
function is called by a SELECT statement that does not access any database table.
<li>Disable the use of posix_fallocate() on all (unix) systems unless the
HAVE_POSIX_FALLOCATE compile-time option is used.
<li>Update the ".import" command in the <a href="cli.html">command-line shell</a> to support multi-line
fields and correct RFC-4180 quoting and to issue warning and/or error messages
if the input text is not strictly RFC-4180 compliant.
<li>Bug fix: In the <a href="fts3.html#unicode61">unicode61</a> tokenizer of <a href="fts3.html#fts4">FTS4</a>, treat all private code points
as identifier symbols.
<li>Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
names, but identifiers in expressions bind more tightly to input column names.
Identifiers in GROUP BY clauses always prefer output column names, however.
<li>Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
move to <a href="queryplanner-ng.html">NGQP</a>.
<li>SQLITE_SOURCE_ID:
"2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2"
<li>SHA1 for sqlite3.c: b7347f4b4c2a840e6ba12040093d606bd16ea21e
</ol></p>
<a name="version_3_7_17"></a>
<h3>2013-05-20 (3.7.17)</h3><p><ol class='lessindent'>
<li>Add support for <a href="mmap.html">memory-mapped I/O</a>.
<li>Add the <a href="c3ref/strglob.html">sqlite3_strglob()</a> convenience interface.
<li>Assigned the integer at offset 68 in the <a href="fileformat2.html#database_header">database header</a> as the
<a href="fileformat2.html#appid">Application ID</a> for when SQLite is used as an <a href="appfileformat.html">application file-format</a>.
Added the <a href="pragma.html#pragma_application_id">PRAGMA application_id</a> command to query and set the Application ID.
<li>Report rollback recovery in the <a href="errlog.html">error log</a> as SQLITE_NOTICE_RECOVER_ROLLBACK.
Change the error log code for WAL recover from
SQLITE_OK to SQLITE_NOTICE_RECOVER_WAL.
<li>Report the risky uses of <a href="howtocorrupt.html#unlink">unlinked database files</a> and
<a href="howtocorrupt.html#alias">database filename aliasing</a> as SQLITE_WARNING messages in the <a href="errlog.html">error log</a>.
<li>Added the <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option.
<li>Increase the default value of <a href="compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a> to 50 and make sure
that it is honored in every place that a schema change might force a statement
retry.
<li>Add a new test harness called "mptester" used to verify correct operation
when multiple processes are using the same database file at the same time.
<li>Enhance the <a href="loadext.html">extension loading</a> mechanism to be more flexible (while
still maintaining backwards compatibility) in two ways:
<ol>
<li>If the default entry point "sqlite3_extension_init" is not present in
the loadable extension, also try an entry point "sqlite3_X_init" where
"X" is based on the shared library filename. This allows every extension
to have a different entry point, which allows them to be statically linked
with no code changes.
<li>The shared library filename passed to <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> may
omit the filename suffix, and an appropriate architecture-dependent
suffix (".so", ".dylib", or ".dll") will be added automatically.
</ol>
<li>Added many new loadable extensions to the source tree, including
amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix,
and wholenumber. See header comments on each extension source file
for further information about what that extension does.
<li>Enhance <a href="fts3.html">FTS3</a> to avoid using excess stack space when there are a huge
number of terms on the right-hand side of the MATCH operator. A side-effect
of this change is that the MATCH operator can only accommodate 12 NEAR
operators at a time.
<li>Enhance the <a href="fts3.html#fts4aux">fts4aux</a> virtual table so that it can be a TEMP table.
<li>Added the <a href="fts3.html#fts3tok">fts3tokenize virtual table</a> to the <a href="fts3.html">full-text search</a> logic.
<li>Query planner enhancement: Use the transitive property of constraints
to move constraints into the outer loops of a join whenever possible,
thereby reducing the amount of work that needs to occur in inner loops.
<li>Discontinue the use of posix_fallocate() on unix, as it does not work on all
filesystems.
<li>Improved tracing and debugging facilities in the Windows <a href="vfs.html">VFS</a>.
<li>Bug fix: Fix a potential <b>database corruption bug</b>
in <a href="sharedcache.html">shared cache mode</a> when one
<a href="c3ref/sqlite3.html">database connection</a> is closed while another is in the middle of a write
transaction.
Ticket <a href="https://www.sqlite.org/src/info/e636a050b7">e636a050b7</a>
<li>Bug fix:
Only consider AS names from the result set as candidates for resolving
identifiers in the WHERE clause if there are no other matches. In the
ORDER BY clause, AS names take priority over any column names.
Ticket <a href="https://www.sqlite.org/src/info/2500cdb9be05">2500cdb9be05</a>
<li>Bug fix: Do not allow a virtual table to cancel the ORDER BY clause unless
all outer loops are guaranteed to return no more than one row result.
Ticket <a href="https://www.sqlite.org/src/info/ba82a4a41eac1">ba82a4a41eac1</a>.
<li>Bug fix: Do not suppress the ORDER BY clause on a virtual table query if
an IN constraint is used.
Ticket <a href="https://www.sqlite.org/src/info/f69b96e3076e">f69b96e3076e</a>.
<li>Bug fix: The <a href="cli.html">command-line shell</a> gives an exit code of 0 when terminated
using the ".quit" command.
<li>Bug fix: Make sure <a href="pragma.html#syntax">PRAGMA</a> statements appear in <a href="c3ref/profile.html">sqlite3_trace()</a> output.
<li>Bug fix: When a <a href="lang_select.html#compound">compound query</a> that uses an ORDER BY clause
with a <a href="lang_expr.html#collateop">COLLATE operator</a>, make sure that the sorting occurs
according to the specified collation and that the comparisons associate with
the compound query use the native collation. Ticket
<a href="https://www.sqlite.org/src/info/6709574d2a8d8">6709574d2a8d8</a>.
<li>Bug fix: Makes sure the <a href="c3ref/set_authorizer.html">authorizer</a> callback gets
a valid pointer to the string "ROWID" for the column-name parameter when
doing an <a href="lang_update.html">UPDATE</a> that changes the rowid. Ticket
<a href="https://www.sqlite.org/src/info/0eb70d77cb05bb2272">0eb70d77cb05bb2272</a>
<li>Bug fix: Do not move WHERE clause terms inside OR expressions that are
contained within an ON clause of a LEFT JOIN. Ticket
<a href="https://www.sqlite.org/src/info/f2369304e4">f2369304e4</a>
<li>Bug fix: Make sure an error is always reported when attempting to preform
an operation that requires a <a href="datatype3.html#collation">collating sequence</a> that is missing.
Ticket <a href="https://www.sqlite.org/src/info/0fc59f908b">0fc59f908b</a>
<li>SQLITE_SOURCE_ID:
"2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668"
<li>SHA1 for sqlite3.c: 246987605d0503c700a08b9ee99a6b5d67454aab
</ol></p>
<a name="version_3_7_16_2"></a>
<h3>2013-04-12 (3.7.16.2)</h3><p><ol class='lessindent'>
<li>Fix a bug (present since version 3.7.13) that could result in database corruption
on windows if two or more processes try to access the same database file at the
same time and immediately after third process crashed in the middle of committing
to that same file. See ticket
<a href="https://www.sqlite.org/src/info/7ff3120e4f">7ff3120e4f</a> for further
information.
<li>SQLITE_SOURCE_ID:
"2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
<li>SHA1 for sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94
</ol></p>
<a name="version_3_7_16_1"></a>
<h3>2013-03-29 (3.7.16.1)</h3><p><ol class='lessindent'>
<li>Fix for a bug in the ORDER BY optimizer that was introduced in
<a href="#version_3_7_15">version 3.7.15</a> which would sometimes optimize out the sorting step
when in fact the sort was required.
Ticket <a href="https://www.sqlite.org/src/info/a179fe7465">a179fe7465</a>
<li>Fix a long-standing bug in the <a href="lang_expr.html#castexpr">CAST expression</a> that would recognize UTF16
characters as digits even if their most-significant-byte was not zero.
Ticket <a href="https://www.sqlite.org/src/info/689137afb6da41">689137afb6da41</a>.
<li>Fix a bug in the NEAR operator of <a href="fts3.html">FTS3</a> when applied to subfields.
Ticket <a href="https://www.sqlite.org/src/info/38b1ae018f">38b1ae018f</a>.
<li>Fix a long-standing bug in the storage engine that would (very rarely)
cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
harmless.
Ticket <a href="https://www.sqlite.org/src/info/6bfb98dfc0c">6bfb98dfc0c</a>.
<li>The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is
now a required component of SQLite.
<li>Fixed lots of spelling errors in the source-code comments
<li>SQLITE_SOURCE_ID:
"2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d"
<li>SHA1 for sqlite3.c: 7a91ceceac9bcf47ceb8219126276e5518f7ff5a
</ol></p>
<a name="version_3_7_16"></a>
<h3>2013-03-18 (3.7.16)</h3><p><ol class='lessindent'>
<li>Added the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command.
<li>Added new extended error codes for all SQLITE_CONSTRAINT errors
<li>Added the SQLITE_READONLY_ROLLBACK extended error code for when a database
cannot be opened because it needs rollback recovery but is read-only.
<li>Added SQL functions <a href="lang_corefunc.html#unicode">unicode(A)</a> and <a href="lang_corefunc.html#char">char(X1,...,XN)</a>.
<li>Performance improvements for <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>, especially in
cases where the number of free pages is greater than what will fit on a
single trunk page of the freelist.
<li>Improved optimization of queries containing aggregate min() or max().
<li>Enhance virtual tables so that they can potentially use an index when
the WHERE clause contains the IN operator.
<li>Allow indices to be used for sorting even if prior terms of the index
are constrained by IN operators in the WHERE clause.
<li>Enhance the <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> command so that the "pk" column is an
increasing integer to show the order of columns in the primary key.
<li>Enhance the query optimizer to exploit transitive join constraints.
<li>Performance improvements in the query optimizer.
<li>Allow the error message from <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to be longer than
20000 bytes.
<li>Improved name resolution for deeply nested queries.
<li>Added the test_regexp.c module as a demonstration of how to implement
the REGEXP operator.
<li>Improved error messages in the <a href="rtree.html">RTREE</a> extension.
<li>Enhance the <a href="cli.html">command-line shell</a> so that a non-zero argument to the
".exit" command causes the shell to exit immediately without cleanly
shutting down the database connection.
<li>Improved error messages for invalid boolean arguments to dot-commands
in the <a href="cli.html">command-line shell</a>.
<li>Improved error messages for "foreign key mismatch" showing the names of
the two tables involved.
<li>Remove all uses of umask() in the unix VFS.
<li>Added the <a href="pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> and <a href="pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> commands.
<li>Change to use strncmp() or the equivalent instead of memcmp() when
comparing non-zero-terminated strings.
<li>Update cygwin interfaces to omit deprecated API calls.
<li>Enhance the <a href="spellfix1.html">spellfix1</a> extension so that the edit distance cost table can
be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
into the "command" field.
<li>Bug fix: repair a long-standing problem that could cause incorrect query
results in a 3-way or larger join that compared INTEGER fields against TEXT
fields in two or more places.
Ticket <a href="https://www.sqlite.org/src/info/fc7bd6358f">fc7bd6358f</a>
<li>Bug fix: Issue an error message if the 16-bit reference counter on a
view overflows due to an overly complex query.
<li>Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
nested UNION ALL queries.
<li>Bug fix: Make sure the schema is up-to-date prior to running pragmas
table_info, index_list, index_info, and foreign_key_list.
<li>SQLITE_SOURCE_ID:
"2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90"
<li>SHA1 for sqlite3.c: 7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6
</ol></p>
<a name="version_3_7_15_2"></a>
<h3>2013-01-09 (3.7.15.2)</h3><p><ol class='lessindent'>
<li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes an ORDER BY clause
to be optimized out of a three-way join when the ORDER BY is actually
required.
Ticket <a href="https://www.sqlite.org/src/info/598f5f7596b055">598f5f7596b055</a>
<li>SQLITE_SOURCE_ID:
"2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f"
<li>SHA1 for sqlite3.c: 5741f47d1bc38aa0a8c38f09e60a5fe0031f272d
</ol></p>
<a name="version_3_7_15_1"></a>
<h3>2012-12-19 (3.7.15.1)</h3><p><ol class='lessindent'>
<li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes a segfault if
the AS name of a result column of a SELECT statement is used as a logical
term in the WHERE clause. Ticket
<a href="https://www.sqlite.org/src/info/a7b7803e8d1e869">a7b7803e8d1e869</a>.
<li>SQLITE_SOURCE_ID:
"2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318"
<li>SHA1 for sqlite3.c: bbbaa68061e925bd4d7d18d7e1270935c5f7e39a
</ol></p>
<a name="version_3_7_15"></a>
<h3>2012-12-12 (3.7.15)</h3><p><ol class='lessindent'>
<li>Added the <a href="c3ref/errcode.html">sqlite3_errstr()</a> interface.
<li>Avoid invoking the <a href="c3ref/profile.html">sqlite3_trace()</a> callback multiple times when a
statement is automatically reprepared due to <a href="rescode.html#schema">SQLITE_SCHEMA</a> errors.
<li>Added support for Windows Phone 8 platforms
<li>Enhance IN operator processing to make use of indices with numeric
affinities.
<li>Do full-table scans using covering indices when possible, under the
theory that an index will be smaller and hence can be scanned with
less I/O.
<li>Enhance the query optimizer so that ORDER BY clauses are more aggressively
optimized, especially in joins where various terms of the ORDER BY clause
come from separate tables of the join.
<li>Add the ability to implement FROM clause subqueries as coroutines rather
that manifesting the subquery into a temporary table.
<li>Enhancements the command-line shell:
<ol type='a'>
<li>Added the ".print" command
<li>Negative numbers in the ".width" command cause right-alignment
<li>Add the ".wheretrace" command when compiled with SQLITE_DEBUG
</ol>
<li>Added the <a href="pragma.html#pragma_busy_timeout">busy_timeout pragma</a>.
<li>Added the <a href="lang_corefunc.html#instr">instr()</a> SQL function.
<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a> file control, used to allow VFS
implementations to get access to the busy handler callback.
<li>The xDelete method in the built-in <a href="vfs.html">VFSes</a> now return
SQLITE_IOERR_DELETE_NOENT if the file to be deleted does not exist.
<li>Enhanced support for QNX.
<li>Work around an optimizer bug in the MSVC compiler when targeting ARM.
<li>Bug fix: Avoid various concurrency problems in <a href="sharedcache.html">shared cache mode</a>.
<li>Bug fix: Avoid a deadlock or crash if the <a href="backup.html">backup API</a>, <a href="sharedcache.html">shared cache</a>,
and the SQLite Encryption Extension are all used at once.
<li>Bug fix: SQL functions created using the TCL interface honor the
"nullvalue" setting.
<li>Bug fix: Fix a 32-bit overflow problem on CREATE INDEX for databases
larger than 16GB.
<li>Bug fix: Avoid segfault when using the <a href="lang_expr.html#collateop">COLLATE operator</a> inside of a
<a href="lang_createtable.html#ckconst">CHECK constraint</a> or <a href="lang_createview.html">view</a> in <a href="sharedcache.html">shared cache mode</a>.
<li>SQLITE_SOURCE_ID:
"2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae"
<li>SHA1 for sqlite3.c: 2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff"
</ol></p>
<a name="version_3_7_14_1"></a>
<h3>2012-10-04 (3.7.14.1)</h3><p><ol class='lessindent'>
<li>Fix a bug (ticket
<a href="https://www.sqlite.org/src/tktview/d02e1406a58ea02d">[d02e1406a58ea02d]]</a>)
that causes a segfault on a LEFT JOIN that includes an OR in the ON clause.
<li>Work around a bug in the optimizer in the VisualStudio-2012 compiler that
causes invalid code to be generated when compiling SQLite on ARM.
<li>Fix the TCL interface so that the "nullvalue" setting is honored for
TCL implementations of SQL functions.
<li>SQLITE_SOURCE_ID:
"2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb"
<li>SHA1 for sqlite3.c: 62aaecaacab3a4bf4a8fe4aec1cfdc1571fe9a44
</ol></p>
<a name="version_3_7_14"></a>
<h3>2012-09-03 (3.7.14)</h3><p><ol class='lessindent'>
<li>Drop built-in support for OS/2. If you need to upgrade an OS/2
application to use this or a later version of SQLite,
then add an application-defined <a href="vfs.html">VFS</a> using the
<a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface. The code removed in this release can
serve as a baseline for the application-defined VFS.
<li>Ensure that floating point values are preserved exactly when reconstructing
a database from the output of the ".dump" command of the
<a href="cli.html">command-line shell</a>.
<li>Added the <a href="c3ref/close.html">sqlite3_close_v2()</a> interface.
<li>Updated the <a href="cli.html">command-line shell</a> so that it can be built using
<a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a> and <a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a>.
<li>Improvements to the windows makefiles and build processes.
<li>Enhancements to <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that
they can optionally check just a single attached database instead of all
attached databases.
<li>Enhancements to <a href="wal.html">WAL mode</a> processing that ensure that at least one
valid read-mark is available at all times, so that read-only processes
can always read the database.
<li>Performance enhancements in the sorter used by ORDER BY and CREATE INDEX.
<li>Added the <a href="compile.html#disable_fts4_deferred">SQLITE_DISABLE_FTS4_DEFERRED</a> compile-time option.
<li>Better handling of aggregate queries where the aggregate functions are
contained within subqueries.
<li>Enhance the query planner so that it will try to use a <a href="queryplanner.html#covidx">covering index</a>
on queries that make use of <a href="optoverview.html#or_opt">or optimization</a>.
<li>SQLITE_SOURCE_ID:
"2012-09-03 15:42:36 c0d89d4a9752922f9e367362366efde4f1b06f2a"
<li>SHA1 for sqlite3.c: 5fdf596b29bb426001f28b488ff356ae14d5a5a6
</ol></p>
<a name="version_3_7_13"></a>
<h3>2012-06-11 (3.7.13)</h3><p><ol class='lessindent'>
<li><a href="inmemorydb.html">In-memory databases</a> that are specified using
<a href="uri.html">URI filenames</a> are allowed to use <a href="sharedcache.html#inmemsharedcache">shared cache</a>,
so that the same
in-memory database can be accessed from multiple database connections.
<li>Recognize and use the <a href="uri.html#coreqp">mode=memory</a> query parameter in
<a href="uri.html">URI filenames</a>.
<li>Avoid resetting the schema of <a href="sharedcache.html">shared cache</a> connections when any one
connection closes. Instead, wait for the last connection to close before
resetting the schema.
<li>In the <a href="rtree.html">RTREE</a> extension, when rounding 64-bit floating point numbers
to 32-bit for storage, always round in a direction that causes the
bounding box to get larger.
<li>Adjust the unix driver to avoid unnecessary calls to fchown().
<li>Add interfaces sqlite3_quota_ferror() and sqlite3_quota_file_available()
to the test_quota.c module.
<li>The <a href="c3ref/create_module.html">sqlite3_create_module()</a> and <a href="c3ref/create_module.html">sqlite3_create_module_v2()</a> interfaces
return SQLITE_MISUSE on any attempt to overload or replace a <a href="vtab.html">virtual table</a>
module. The destructor is always called in this case, in accordance with
historical and current documentation.
<li>SQLITE_SOURCE_ID:
"2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc"
<li>SHA1 for sqlite3.c: ff0a771d6252545740ba9685e312b0e3bb6a641b
</ol></p>
<a name="version_3_7_12_1"></a>
<h3>2012-05-22 (3.7.12.1)</h3><p><ol class='lessindent'>
<li>Fix a bug
<a href="https://www.sqlite.org/src/info/c2ad16f997ee9c">(ticket c2ad16f997)</a>
in the 3.7.12 release that can cause a segfault for certain
obscure nested aggregate queries.
<li>Fix various other minor test script problems.
<li>SQLITE_SOURCE_ID:
"2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789"
<li>SHA1 for sqlite3.c: d494e8d81607f0515d4f386156fb0fd86d5ba7df
</ol></p>
<a name="version_3_7_12"></a>
<h3>2012-05-14 (3.7.12)</h3><p><ol class='lessindent'>
<li>Add the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">SQLITE_DBSTATUS_CACHE_WRITE</a> option for <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
<li>Optimize the <a href="lang_corefunc.html#typeof">typeof()</a> and <a href="lang_corefunc.html#length">length()</a> SQL functions so that they avoid
unnecessary reading of database content from disk.
<li>Add the <a href="fts3.html#*fts4mergecmd">FTS4 "merge" command</a>, the <a href="fts3.html#*fts4automergecmd">FTS4 "automerge" command</a>, and
the <a href="fts3.html#*fts4ickcmd">FTS4 "integrity-check" command</a>.
<li>Report the name of specific <a href="lang_createtable.html#ckconst">CHECK</a> constraints that fail.
<li>In the command-line shell, use popen() instead of fopen() if the first
character of the argument to the ".output" command is "|".
<li>Make use of OVERLAPPED in the windows <a href="vfs.html">VFS</a> to avoid some system calls
and thereby obtain a performance improvement.
<li>More aggressive optimization of the AND operator when one side or the
other is always false.
<li>Improved performance of queries with many OR-connected terms in the
WHERE clause that can all be indexed.
<li>Add the <a href="compile.html#rtree_int_only">SQLITE_RTREE_INT_ONLY</a> compile-time option to force the
<a href="rtree.html">R*Tree Extension Module</a> to use integer instead of
floating point values for both storage and computation.
<li>Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to use much less memory when
processing multi-gigabyte databases.
<li>New interfaces added to the test_quota.c add-on module.
<li>Added the ".trace" dot-command to the command-line shell.
<li>Allow virtual table constructors to be invoked recursively.
<li>Improved optimization of ORDER BY clauses on compound queries.
<li>Improved optimization of aggregate subqueries contained within an
aggregate query.
<li>Bug fix: Fix the <a href="lang_savepoint.html">RELEASE</a> command so that it does not cancel pending
queries. This repairs a problem introduced in 3.7.11.
<li>Bug fix: Do not discard the DISTINCT as superfluous unless a subset of
the result set is subject to a UNIQUE constraint <em>and</em> it none
of the columns in that subset can be NULL.
Ticket <a href="https://www.sqlite.org/src/info/385a5b56b9">385a5b56b9</a>.
<li>Bug fix: Do not optimize away an ORDER BY clause that has the same terms
as a UNIQUE index unless those terms are also NOT NULL.
Ticket <a href="https://www.sqlite.org/src/info/2a5629202f">2a5629202f</a>.
<li>SQLITE_SOURCE_ID:
"2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"
<li>SHA1 for sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
</ol></p>
<a name="version_3_7_11"></a>
<h3>2012-03-20 (3.7.11)</h3><p><ol class='lessindent'>
<li>Enhance the <a href="lang_insert.html">INSERT</a> syntax to allow multiple rows to be inserted
via the VALUES clause.
<li>Enhance the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> command to support the
IF NOT EXISTS clause.
<li>Added the <a href="c3ref/stricmp.html">sqlite3_stricmp()</a> interface as a counterpart to
<a href="c3ref/stricmp.html">sqlite3_strnicmp()</a>.
<li>Added the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control, giving <a href="vfs.html">VFS</a> implementations
the ability to add new <a href="pragma.html#syntax">PRAGMA</a> statements or to override built-in
PRAGMAs.
<li>Queries of the form: "SELECT max(x), y FROM table" returns the
value of y on the same row that contains the maximum x value.
<li>Added support for the <a href="fts3.html#*fts4languageid">FTS4 languageid option</a>.
<li>Documented support for the <a href="fts3.html#*fts4content">FTS4 content option</a>. This feature has
actually been in the code since <a href="#version_3_7_9">version 3.7.9</a> but is only now considered
to be officially supported.
<li>Pending statements no longer block <a href="lang_transaction.html">ROLLBACK</a>. Instead, the pending
statement will return SQLITE_ABORT upon next access after the ROLLBACK.
<li>Improvements to the handling of CSV inputs in the <a href="cli.html">command-line shell</a>
<li>Fix a <a href="https://www.sqlite.org/src/info/b7c8682cc1">bug</a> introduced
in <a href="#version_3_7_10">version 3.7.10</a> that might cause a LEFT JOIN
to be incorrectly converted into an INNER JOIN if the WHERE clause
indexable terms connected by OR.
<li>SQLITE_SOURCE_ID:
"2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669"
<li>SHA1 for sqlite3.c: d460d7eda3a9dccd291aed2a9fda868b9b120a10
</ol></p>
<a name="version_3_7_10"></a>
<h3>2012-01-16 (3.7.10)</h3><p><ol class='lessindent'>
<li>The default <a href="fileformat2.html#schemaformat">schema format number</a> is changed from 1 to 4.
This means that, unless
the <a href="pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format=ON</a> statement is
run, newly created database files will be unreadable by version of SQLite
prior to 3.3.0 (2006-01-10). It also means that the <a href="lang_createindex.html#descidx">descending indices</a>
are enabled by default.
<li>The sqlite3_pcache_methods structure and the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">SQLITE_CONFIG_PCACHE</a>
and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">SQLITE_CONFIG_GETPCACHE</a> configuration parameters are deprecated.
They are replaced by a new <a href="c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> structure and
<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">SQLITE_CONFIG_GETPCACHE2</a> configuration
parameters.
<li>Added the <a href="psow.html">powersafe overwrite</a> property to the VFS interface. Provide
the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> I/O capability, the
<a href="compile.html#powersafe_overwrite">SQLITE_POWERSAFE_OVERWRITE</a> compile-time option, and the
"psow=BOOLEAN" query parameter for <a href="uri.html">URI filenames</a>.
<li>Added the <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory()</a> interface and the
<a href="pragma.html#pragma_shrink_memory">shrink_memory pragma</a>.
<li>Added the <a href="c3ref/db_filename.html">sqlite3_db_filename()</a> interface.
<li>Added the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface.
<li>Added the <a href="c3ref/uri_boolean.html">sqlite3_uri_boolean()</a> and <a href="c3ref/uri_boolean.html">sqlite3_uri_int64()</a> interfaces.
<li>If the argument to <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> is negative N, that means to use
approximately -1024*N bytes of memory for the page cache regardless of
the page size.
<li>Enhanced the default memory allocator to make use of _msize() on windows,
malloc_size() on Mac, and malloc_usable_size() on Linux.
<li>Enhanced the query planner to support index queries with range constraints
on the rowid.
<li>Enhanced the query planner flattening logic to allow UNION ALL compounds
to be promoted upwards to replace a simple wrapper SELECT even if the
compounds are joins.
<li>Enhanced the query planner so that the xfer optimization can be used with
INTEGER PRIMARY KEY ON CONFLICT as long as the destination table is
initially empty.
<li>Enhanced the windows <a href="vfs.html">VFS</a> so that all system calls can be overridden
using the xSetSystemCall interface.
<li>Updated the "unix-dotfile" <a href="vfs.html">VFS</a> to use locking directories with mkdir()
and rmdir() instead of locking files with open() and unlink().
<li>Enhancements to the test_quota.c extension to support stdio-like interfaces
with quotas.
<li>Change the unix <a href="vfs.html">VFS</a> to be tolerant of read() system calls that return
less then the full number of requested bytes.
<li>Change both unix and windows <a href="vfs.html">VFSes</a> to report a sector size of 4096
instead of the old default of 512.
<li>In the <a href="tclsqlite.html">TCL Interface</a>, add the -uri option to the "sqlite3" TCL command
used for creating new database connection objects.
<li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_EXPLAIN_STMT</a> test-control option with the
<a href="compile.html#enable_tree_explain">SQLITE_ENABLE_TREE_EXPLAIN</a> compile-time option to enable the
<a href="cli.html">command-line shell</a> to display ASCII-art parse trees of SQL statements
that it processes, for debugging and analysis.
<li><b>Bug fix:</b>
Add an additional xSync when restarting a WAL in order to prevent an
exceedingly unlikely but theoretically possible
database corruption following power-loss.
Ticket <a href="https://www.sqlite.org/src/info/ff5be73dee">ff5be73dee</a>.
<li><b>Bug fix:</b>
Change the VDBE so that all registers are initialized to Invalid
instead of NULL.
Ticket <a href="https://www.sqlite.org/src/info/7bbfb7d442">7bbfb7d442</a>
<li><b>Bug fix:</b>
Fix problems that can result from 32-bit integer overflow.
Ticket <a href="https://www.sqlite.org/src/info/ac0ff496b7e2">ac00f496b7e2</a>
<li>SQLITE_SOURCE_ID:
"2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
<li>SHA1 for sqlite3.c: 6497cbbaad47220bd41e2e4216c54706e7ae95d4
</ol></p>
<a name="version_3_7_9"></a>
<h3>2011-11-01 (3.7.9)</h3><p><ol class='lessindent'>
<li>If a search token (on the right-hand side of the MATCH operator) in
<a href="fts3.html#fts4">FTS4</a> begins with "^" then that token must be the first in its field
of the document. <b>** Potentially Incompatible Change **</b>
<li>Added options <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">SQLITE_DBSTATUS_CACHE_HIT</a> and <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">SQLITE_DBSTATUS_CACHE_MISS</a>
to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
<li>Removed support for <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>, replacing it with the much
more capable <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> option.
<li>Enhancements to the sqlite3_analyzer utility program, including the
--pageinfo and --stats options and support for multiplexed databases.
<li>Enhance the <a href="c3ref/data_count.html">sqlite3_data_count()</a> interface so that it can be used to
determine if SQLITE_DONE has been seen on the prepared statement.
<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> file-control by which the SQLite core
indicates to the VFS that the current transaction will overwrite the
entire database file.
<li>Increase the default <a href="malloc.html#lookaside">lookaside memory allocator</a> allocation size from
100 to 128 bytes.
<li>Enhanced the query planner so that it can factor terms in and out of
OR expressions in the WHERE clause in an effort to find better indices.
<li>Added the <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> compile-time option, causing
<a href="fileformat2.html#ovflpgs">overflow pages</a> to be read directly from the database file,
bypassing the <a href="c3ref/pcache_methods2.html">page cache</a>.
<li>Remove limits on the magnitude of precision and width value in the
format specifiers of the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> family of string rendering
routines.
<li>Fix a bug that prevent <a href="lang_altertable.html">ALTER TABLE ... RENAME</a> from working
on some virtual tables in a database with a UTF16 encoding.
<li>Fix a bug in ASCII-to-float conversion that causes slow performance and
incorrect results when converting numbers with ridiculously large exponents.
<li>Fix a bug that causes incorrect results in aggregate queries that use
multiple aggregate functions whose arguments contain complicated expressions
that differ only in the case of string literals contained within those
expressions.
<li>Fix a bug that prevented the <a href="pragma.html#pragma_page_count">page_count</a> and <a href="pragma.html#pragma_quick_check">quick_check</a> pragmas from
working correctly if their names were capitalized.
<li>Fix a bug that caused <a href="lang_vacuum.html">VACUUM</a> to fail if the <a href="pragma.html#pragma_count_changes">count_changes pragma</a> was
engaged.
<li>Fix a bug in <a href="vtab.html">virtual table</a> implementation that causes a crash if
an <a href="fts3.html#fts4">FTS4</a> table is <a href="lang_droptable.html">dropped</a> inside a transaction and
a <a href="lang_savepoint.html">SAVEPOINT</a> occurs afterwards.
<li>SQLITE_SOURCE_ID:
"2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"
<li>SHA1 for sqlite3.c: becd16877f4f9b281b91c97e106089497d71bb47
</ol></p>
<a name="version_3_7_8"></a>
<h3>2011-09-19 (3.7.8)</h3><p><ol class='lessindent'>
<li> Orders of magnitude performance improvement for <a href="lang_createindex.html">CREATE INDEX</a> on
very large tables.
<li> Improved the windows VFS to better defend against interference
from anti-virus software.
<li> Improved query plan optimization when the DISTINCT keyword is present.
<li> Allow more system calls to be overridden in the unix VFS - to provide
better support for chromium sandboxes.
<li> Increase the default size of a lookahead cache line from 100 to 128 bytes.
<li> Enhancements to the test_quota.c module so that it can track
preexisting files.
<li> Bug fix: Virtual tables now handle IS NOT NULL constraints correctly.
<li> Bug fixes: Correctly handle nested correlated subqueries used with
indices in a WHERE clause.
<li> SQLITE_SOURCE_ID:
"2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177"
<li> SHA1 for sqlite3.c: bfcd74a655636b592c5dba6d0d5729c0f8e3b4de
</ol></p>
<a name="version_3_7_7_1"></a>
<h3>2011-06-28 (3.7.7.1)</h3><p><ol class='lessindent'>
<li> Fix <a href="https://www.sqlite.org/src/info/25ee812710">a bug</a> causing
<a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statements compiled using sqlite3_prepare()
to fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error.
<li> SQLITE_SOURCE_ID:
"2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
<li> SHA1 for sqlite3.c: d47594b8a02f6cf58e91fb673e96cb1b397aace0
</ol></p>
<a name="version_3_7_7"></a>
<h3>2011-06-23 (3.7.7)</h3><p><ol class='lessindent'>
<li> Add support for <a href="uri.html">URI filenames</a>
<li> Add the <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> interface in
support of <a href="lang_conflict.html">ON CONFLICT</a> clauses with <a href="vtab.html">virtual tables</a>.
<li> Add the <a href="vtab.html#xsavepoint">xSavepoint</a>, <a href="vtab.html#xsavepoint">xRelease</a> and <a href="vtab.html#xsavepoint">xRollbackTo</a> methods in
<a href="vtab.html">virtual tables</a> in support of <a href="lang_savepoint.html">SAVEPOINT</a> for virtual tables.
<li> Update the built-in <a href="fts3.html">FTS3/FTS4</a> and <a href="rtree.html">RTREE</a> virtual tables to support
<a href="lang_conflict.html">ON CONFLICT</a> clauses and <a href="lang_replace.html">REPLACE</a>.
<li> Avoid unnecessary reparsing of the database schema.
<li> Added support for the <a href="fts3.html#fts4prefix">FTS4 prefix option</a> and the <a href="fts3.html#fts4order">FTS4 order option</a>.
<li> Allow <a href="wal.html">WAL-mode</a> databases to be opened read-only as long as
there is an existing read/write connection.
<li> Added support for <a href="shortnames.html">short filenames</a>.
<li> SQLITE_SOURCE_ID:
"2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2"
<li> SHA1 for sqlite3.c: 5bbe79e206ae5ffeeca760dbd0d66862228db551
</ol></p>
<a name="version_3_7_6_3"></a>
<h3>2011-05-19 (3.7.6.3)</h3><p><ol class='lessindent'>
<li> Fix a problem with <a href="wal.html">WAL mode</a> which could cause transactions to
silently rollback if the <a href="pragma.html#pragma_cache_size">cache_size</a> is set very small (less than 10)
and SQLite comes under memory pressure.
</ol></p>
<a name="version_3_7_6_2"></a>
<h3>2011-04-17 (3.7.6.2)</h3><p><ol class='lessindent'>
<li> Fix the function prototype for the open(2) system call to agree with
POSIX. Without this fix, pthreads does not work correctly on NetBSD.
<li> SQLITE_SOURCE_ID:
"2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e"
<li> SHA1 for sqlite3.c: 806577fd524dd5f3bfd8d4d27392ed2752bc9701
</ol></p>
<a name="version_3_7_6_1"></a>
<h3>2011-04-13 (3.7.6.1)</h3><p><ol class='lessindent'>
<li> Fix a bug in 3.7.6 that only appears if the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a>
file control is used with a build of SQLite that makes use of the
HAVE_POSIX_FALLOCATE compile-time option and which has
SQLITE_ENABLE_LOCKING_MODE turned off.
<li> SQLITE_SOURCE_ID:
"2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695"
<li> SHA1 for sqlite3.c: b81bfa27d3e09caf3251475863b1ce6dd9f6ab66
</ol></p>
<a name="version_3_7_6"></a>
<h3>2011-04-12 (3.7.6)</h3><p><ol class='lessindent'>
<li> Added the <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface and enhanced the
<a href="pragma.html#pragma_wal_checkpoint">wal_checkpoint pragma</a> to support blocking checkpoints.
<li> Improvements to the query planner so that it makes better estimates of
plan costs and hence does a better job of choosing the right plan,
especially when <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> is used.
<li> Fix a bug which prevented deferred foreign key constraints from being
enforced when <a href="c3ref/finalize.html">sqlite3_finalize()</a> was not
called by one statement with a failed foreign key constraint prior to
another statement with foreign key constraints running.
<li> Integer arithmetic operations that would have resulted in overflow
are now performed using floating-point instead.
<li> Increased the version number on the <a href="c3ref/vfs.html">VFS object</a> to
3 and added new methods xSetSysCall, xGetSysCall, and xNextSysCall
used for doing full-coverage testing.
<li> Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 30 to 62
(though the default value remains at 10).
<li> Enhancements to FTS4:
<ol type="a">
<li> Added the <a href="fts3.html#fts4aux">fts4aux</a> table
<li> Added support for <a href="fts3.html#*fts4compression">compressed FTS4 content</a>
</ol>
<li> Enhance the <a href="lang_analyze.html">ANALYZE</a> command to support the name of an index
as its argument, in order to analyze just that one index.
<li> Added the "unix-excl" built-in VFS on unix and unix-like platforms.
<li> SQLITE_SOURCE_ID:
"2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7"
<li> SHA1 for sqlite3.c: f38df08547efae0ff4343da607b723f588bbd66b
</ol></p>
<a name="version_3_7_5"></a>
<h3>2011-02-01 (3.7.5)</h3><p><ol class='lessindent'>
<li> Added the <a href="c3ref/mprintf.html">sqlite3_vsnprintf()</a> interface.
<li> Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">SQLITE_DBSTATUS_LOOKASIDE_HIT</a>,
<a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a>, and
<a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a> options for the
<a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
<li> Added the <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> compile-time option.
<li> Added the <a href="compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a> compile-time option.
<li> Updates to <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> so that its result is well-defined
for all prepared statements and so that it works with <a href="lang_vacuum.html">VACUUM</a>.
<li> Added the "-heap" option to the <a href="cli.html">command-line shell</a>
<li> Fix <a href="https://www.sqlite.org/src/info/5d863f876e">a bug</a> involving
frequent changes in and out of WAL mode and
VACUUM that could (in theory) cause database corruption.
<li> Enhance the <a href="c3ref/profile.html">sqlite3_trace()</a> mechanism so that nested SQL statements
such as might be generated by virtual tables are shown but are shown
in comments and without parameter expansion. This
greatly improves tracing output when using the FTS3/4 and/or RTREE
virtual tables.
<li> Change the xFileControl() methods on all built-in VFSes to return
<a href="rescode.html#notfound">SQLITE_NOTFOUND</a> instead of <a href="rescode.html#error">SQLITE_ERROR</a> for an unrecognized
operation code.
<li> The SQLite core invokes the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">SQLITE_FCNTL_SYNC_OMITTED</a>
<a href="c3ref/file_control.html">file control</a>
to the VFS in place of a call to xSync if the database has
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF.
</ol></p>
<a name="version_3_7_4"></a>
<h3>2010-12-07 (3.7.4)</h3><p><ol class='lessindent'>
<li> Added the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to allow an existing
<a href="c3ref/blob.html">sqlite3_blob</a> object to be rebound to a new row.
<li> Use the new <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to improve the performance
of FTS.
<li> <a href="c3ref/vfs.html">VFSes</a> that do not support shared memory are allowed
to access <a href="wal.html">WAL</a> databases if <a href="pragma.html#pragma_locking_mode">PRAGMA locking_mode</a> is set to EXCLUSIVE.
<li> Enhancements to <a href="eqp.html">EXPLAIN QUERY PLAN</a>.
<li> Added the <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> interface.
<li> Added <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a>.
<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> option
to <a href="c3ref/file_control.html">sqlite3_file_control()</a>.
<li> Added support for <a href="fts3.html#fts4">FTS4</a> and enhancements
to the FTS <a href="fts3.html#matchinfo">matchinfo()</a> function.
<li> Added the test_superlock.c module which provides example
code for obtaining an exclusive lock to a rollback or WAL database.
<li> Added the test_multiplex.c module which provides
an example VFS that provides multiplexing (sharding)
of a DB, splitting it over multiple files of fixed size.
<li> A <a href="https://www.sqlite.org/src/info/80ba201079">very obscure bug</a>
associated with the <a href="optoverview.html#or_opt">or optimization</a> was fixed.
</ol></p>
<a name="version_3_7_3"></a>
<h3>2010-10-08 (3.7.3)</h3><p><ol class='lessindent'>
<li> Added the <a href="c3ref/create_function.html">sqlite3_create_function_v2()</a> interface that includes a
destructor callback.
<li> Added support for <a href="rtree.html#customquery">custom r-tree queries</a> using application-supplied
callback routines to define the boundary of the query region.
<li> The default page cache strives more diligently to avoid using memory
beyond what is allocated to it by <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>. Or if
using page cache is allocating from the heap, it strives to avoid
going over the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a>, even if
<a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> is not set.
<li> Added the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface as a replacement for
<a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>.
<li> The <a href="lang_analyze.html">ANALYZE</a> command now gathers statistics on tables even if they
have no indices.
<li> Tweaks to the query planner to help it do a better job of finding the
most efficient query plan for each query.
<li> Enhanced the internal text-to-numeric conversion routines so that they
work with UTF8 or UTF16, thereby avoiding some UTF16-to-UTF8 text
conversions.
<li> Fix a problem that was causing excess memory usage with large <a href="wal.html">WAL</a>
transactions in win32 systems.
<li> The interface between the VDBE and B-Tree layer is enhanced such that
the VDBE provides hints to the B-Tree layer letting the B-Tree layer
know when it is safe to use hashing instead of B-Trees for transient
tables.
<li> Miscellaneous documentation enhancements.
</ol></p>
<a name="version_3_7_2"></a>
<h3>2010-08-24 (3.7.2)</h3><p><ol class='lessindent'>
<li> Fix an <a href="https://www.sqlite.org/src/info/5e10420e8d">
old and very obscure bug</a> that can lead to corruption of the
database <a href="fileformat2.html#freelist">free-page list</a> when <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is used.
</ol></p>
<a name="version_3_7_1"></a>
<h3>2010-08-23 (3.7.1)</h3><p><ol class='lessindent'>
<li> Added new commands <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">SQLITE_DBSTATUS_SCHEMA_USED</a> and
<a href="c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">SQLITE_DBSTATUS_STMT_USED</a> to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface, in
order to report out the amount of memory used to hold the schema and
prepared statements of a connection.
<li> Increase the maximum size of a database pages from 32KiB to 64KiB.
<li> Use the <a href="optoverview.html#like_opt">LIKE optimization</a> even if the right-hand side string contains
no wildcards.
<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> verb to the <a href="c3ref/file_control.html">sqlite3_file_control()</a>
interface for both unix and windows, to cause database files to grow in
large chunks in order to reduce disk fragmentation.
<li> Fixed a bug in the query planner that caused performance regressions
relative to 3.6.23.1 on some complex joins.
<li> Fixed a typo in the OS/2 backend.
<li> Refactored the pager module.
<li> The SQLITE_MAX_PAGE_SIZE compile-time option is now silently ignored.
The maximum page size is hard-coded at 65536 bytes.
</ol></p>
<a name="version_3_7_0_1"></a>
<h3>2010-08-04 (3.7.0.1)</h3><p><ol class='lessindent'>
<li> Fix a potential database corruption bug that can occur if version 3.7.0
and version 3.6.23.1 alternately write to the same database file.
<a href="https://www.sqlite.org/src/info/51ae9cad317a1">
Ticket [51ae9cad317a1]</a>
<li> Fix a performance regression related to the query planner enhancements
of version 3.7.0.
</ol></p>
<a name="version_3_7_0"></a>
<h3>2010-07-21 (3.7.0)</h3><p><ol class='lessindent'>
<li> Added support for <a href="wal.html">write-ahead logging</a>.
<li> Query planner enhancement - automatic transient indices are created
when doing so reduces the estimated query time.
<li> Query planner enhancement - the ORDER BY becomes a no-op if the query
also contains a GROUP BY clause that forces the correct output order.
<li> Add the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">SQLITE_DBSTATUS_CACHE_USED</a> verb for <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
<li> The logical database size is now stored in the database header so that
bytes can be appended to the end of the database file without corrupting
it and so that SQLite will work correctly on systems that lack support
for ftruncate().
</ol></p>
<a name="version_3_6_23_1"></a>
<h3>2010-03-26 (3.6.23.1)</h3><p><ol class='lessindent'>
<li> Fix a bug in the offsets() function of <a href="fts3.html">FTS3</a>
<li> Fix a missing "sync" that when omitted could lead to database
corruption if a power failure or OS crash occurred just as a
ROLLBACK operation was finishing.
</ol></p>
<a name="version_3_6_23"></a>
<h3>2010-03-09 (3.6.23)</h3><p><ol class='lessindent'>
<li> Added the <a href="pragma.html#pragma_secure_delete">secure_delete pragma</a>.
<li> Added the <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> and
<a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> interfaces as well as the
<a href="pragma.html#pragma_compile_options">compile_options pragma</a> and the <a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and
<a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions.
<li> Added the <a href="c3ref/log.html">sqlite3_log()</a> interface together with the
<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> verb to <a href="c3ref/config.html">sqlite3_config()</a>. The ".log" command
is added to the <a href="cli.html">Command Line Interface</a>.
<li> Improvements to <a href="fts3.html">FTS3</a>.
<li> Improvements and bug-fixes in support for <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a>.
<li> The <a href="pragma.html#pragma_integrity_check">integrity_check pragma</a> is enhanced to detect out-of-order rowids.
<li> The ".genfkey" operator has been removed from the
<a href="cli.html">Command Line Interface</a>.
<li> Updates to the co-hosted <a href="lemon.html">Lemon LALR(1) parser generator</a>. (These
updates did not affect SQLite.)
<li> Various minor bug fixes and performance enhancements.
</ol></p>
<a name="version_3_6_22"></a>
<h3>2010-01-06 (3.6.22)</h3><p><ol class='lessindent'>
<li>Fix bugs that can (rarely) lead to incorrect query results when
the CAST or OR operators are used in the WHERE clause of a query.
<li>Continuing enhancements and improvements to <a href="fts3.html">FTS3</a>.
<li>Other miscellaneous bug fixes.
</ol></p>
<a name="version_3_6_21"></a>
<h3>2009-12-07 (3.6.21)</h3><p><ol class='lessindent'>
<li>The SQL output resulting from <a href="c3ref/profile.html">sqlite3_trace()</a> is now modified to include
the values of <a href="lang_expr.html#varparam">bound parameters</a>.
<li>Performance optimizations targeting a specific use case from
a single high-profile user of SQLite. A 12% reduction in the number of
CPU operations is achieved (as measured by Valgrind). Actual performance
improvements in practice may vary depending on workload. Changes
include:
<ol type='a'>
<li>The <a href="lang_corefunc.html#ifnull">ifnull()</a> and <a href="lang_corefunc.html#coalesce">coalesce()</a> SQL functions are now implemented
using in-line VDBE code rather than calling external functions, so that
unused arguments need never be evaluated.
<li>The <a href="lang_corefunc.html#substr">substr()</a> SQL function does not bother to measure the length
its entire input string if it is only computing a prefix
<li>Unnecessary OP_IsNull, OP_Affinity, and OP_MustBeInt VDBE opcodes
are suppressed
<li>Various code refactorizations for performance
</ol>
<li>The FTS3 extension has undergone a major rework and cleanup.
New <a href="fts3.html">FTS3 documentation</a> is now available.
<li>The <a href="compile.html#secure_delete">SQLITE_SECURE_DELETE</a> compile-time option fixed to make sure that
content is deleted even when the <a href="lang_delete.html#truncateopt">truncate optimization</a> applies.
<li>Improvements to "dot-command" handling in the
<a href="cli.html">Command Line Interface</a>.
<li>Other minor bug fixes and documentation enhancements.
</ol></p>
<a name="version_3_6_20"></a>
<h3>2009-11-04 (3.6.20)</h3><p><ol class='lessindent'>
<li>Optimizer enhancement: <a href="c3ref/stmt.html">prepared statements</a> are automatically
re-compiled when a binding on the RHS of a LIKE operator changes or
when any range constraint changes under <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>.
<li>Various minor bug fixes and documentation enhancements.
</ol></p>
<a name="version_3_6_16_1"></a>
<h3>2009-10-30 (3.6.16.1)</h3><p><ol class='lessindent'>
<li>A small patch to version 3.6.16 to fix
<a href="https://www.sqlite.org/src/info/6b00e0a34c">the OP_If bug</a>.
</ol></p>
<a name="version_3_6_19"></a>
<h3>2009-10-14 (3.6.19)</h3><p><ol class='lessindent'>
<li>Added support for <a href="foreignkeys.html">foreign key constraints</a>. Foreign key constraints
are disabled by default. Use the <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a> to turn them on.
<li>Generalized the IS and IS NOT operators to take arbitrary expressions
on their right-hand side.
<li>The <a href="tclsqlite.html">TCL Interface</a> has been enhanced to use the
<a href="http://www.tcl-lang.org/cgi-bin/tct/tip/322.html">Non-Recursive Engine (NRE)</a>
interface to the TCL interpreter when linked against TCL 8.6 or later.
<li>Fix a bug introduced in 3.6.18 that can lead to a segfault when an
attempt is made to write on a read-only database.
</ol></p>
<a name="version_3_6_18"></a>
<h3>2009-09-11 (3.6.18)</h3><p><ol class='lessindent'>
<li>Versioning of the SQLite source code has transitioned from CVS to
<a href="http://www.fossil-scm.org/">Fossil</a>.
<li>Query planner enhancements.
<li>The <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> compile-time option causes the <a href="lang_analyze.html">ANALYZE</a>
command to collect a small histogram of each index, to help SQLite better
select among competing range query indices.
<li>Recursive triggers can be enabled using the <a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a>
statement.
<li>Delete triggers fire when rows are removed due to a
<a href="lang_conflict.html">REPLACE conflict resolution</a>. This feature is only
enabled when recursive triggers are enabled.
<li>Added the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> and <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a>
flags for <a href="c3ref/open.html">sqlite3_open_v2()</a> used to override the global
<a href="sharedcache.html">shared cache mode</a> settings for individual database connections.
<li>Added improved version identification features:
C-Preprocessor macro <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>,
C/C++ interface <a href="c3ref/libversion.html">sqlite3_sourceid()</a>, and SQL function <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
<li>Obscure bug fix on triggers
(<a href="https://www.sqlite.org/src/info/efc02f9779">[efc02f9779]</a>).
</ol></p>
<a name="version_3_6_17"></a>
<h3>2009-08-10 (3.6.17)</h3><p><ol class='lessindent'>
<li>Expose the <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a> interface for use by extensions and
applications.
<li>Remove the restriction on <a href="vtab.html">virtual tables</a> and <a href="sharedcache.html">shared cache mode</a>.
Virtual tables and shared cache can now be used at the same time.
<li>Many code simplifications and obscure bug fixes in support of
providing <a href="testing.html#coverage">100% branch test coverage</a>.
</ol></p>
<a name="version_3_6_16"></a>
<h3>2009-06-27 (3.6.16)</h3><p><ol class='lessindent'>
<li>Fix a bug (ticket #3929) that occasionally causes INSERT or UPDATE
operations to fail on an indexed table that has a self-modifying trigger.
<li>Other minor bug fixes and performance optimizations.
</ol></p>
<a name="version_3_6_15"></a>
<h3>2009-06-15 (3.6.15)</h3><p><ol class='lessindent'>
<li>Refactor the internal representation of SQL expressions so that they
use less memory on embedded platforms.
<li>Reduce the amount of stack space used
<li>Fix an 64-bit alignment bug on HP/UX and Sparc
<li>The <a href="c3ref/create_function.html">sqlite3_create_function()</a> family of interfaces now return
<a href="rescode.html#misuse">SQLITE_MISUSE</a> instead of <a href="rescode.html#error">SQLITE_ERROR</a> when passed invalid
parameter combinations.
<li>When new tables are created using CREATE TABLE ... AS SELECT ... the
datatype of the columns is the simplified SQLite datatype (TEXT, INT,
REAL, NUMERIC, or BLOB) instead of a copy of the original datatype from
the source table.
<li>Resolve race conditions when checking for a hot rollback journal.
<li>The <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interface frees all mutexes under windows.
<li>Enhanced robustness against corrupt database files
<li>Continuing improvements to the test suite and fixes to obscure
bugs and inconsistencies that the test suite improvements are
uncovering.
</ol></p>
<a name="version_3_6_14_2"></a>
<h3>2009-05-25 (3.6.14.2)</h3><p><ol class='lessindent'>
<li>Fix a code generator bug introduced in <a href="#version_3_6_14">version 3.6.14</a>. This bug
can cause incorrect query results under obscure circumstances.
Ticket #3879.
</ol></p>
<a name="version_3_6_14_1"></a>
<h3>2009-05-19 (3.6.14.1)</h3><p><ol class='lessindent'>
<li>Fix a bug in <a href="lang_aggfunc.html#group_concat">group_concat()</a>, ticket #3841
<li>Fix a performance bug in the pager cache, ticket #3844
<li>Fix a bug in the <a href="c3ref/backup.html">sqlite3_backup</a> implementation that can lead
to a corrupt backup database. Ticket #3858.
</ol></p>
<a name="version_3_6_14"></a>
<h3>2009-05-07 (3.6.14)</h3><p><ol class='lessindent'>
<li>Added the optional <a href="asyncvfs.html">asynchronous VFS</a> module.</li>
<li>Enhanced the query optimizer so that <a href="vtab.html">virtual tables</a> are able to
make use of OR and IN operators in the WHERE clause.</li>
<li>Speed improvements in the btree and pager layers.</li>
<li>Added the <a href="compile.html#have_isnan">SQLITE_HAVE_ISNAN</a> compile-time option which will cause
the isnan() function from the standard math library to be used instead
of SQLite's own home-brew NaN checker.</li>
<li>Countless minor bug fixes, documentation improvements, new and
improved test cases, and code simplifications and cleanups.</p>
</ol></p>
<a name="version_3_6_13"></a>
<h3>2009-04-13 (3.6.13)</h3><p><ol class='lessindent'>
<li>Fix a bug in <a href="#version_3_6_12">version 3.6.12</a> that causes a segfault when running
a count(*) on the sqlite_master table of an empty database. Ticket #3774.
<li>Fix a bug in <a href="#version_3_6_12">version 3.6.12</a> that causes a segfault that when
inserting into a table using a DEFAULT value where there is a
function as part of the DEFAULT value expression. Ticket #3791.
<li>Fix data structure alignment issues on Sparc. Ticket #3777.
<li>Other minor bug fixes.
</ol></p>
<a name="version_3_6_12"></a>
<h3>2009-03-31 (3.6.12)</h3><p><ol class='lessindent'>
<li>Fixed a bug that caused database corruption when an <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is
rolled back in an in-memory database. Ticket #3761.
<li>Added the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> interface.
<li>Added the <a href="pragma.html#pragma_reverse_unordered_selects">reverse_unordered_selects pragma</a>.
<li>The default page size on windows is automatically adjusted to match the
capabilities of the underlying filesystem.
<li>Add the new ".genfkey" command in the <a href="cli.html">CLI</a> for generating triggers to
implement foreign key constraints.
<li>Performance improvements for "count(*)" queries.
<li>Reduce the amount of heap memory used, especially by TRIGGERs.
<li>
</ol></p>
<a name="version_3_6_11"></a>
<h3>2009-02-18 (3.6.11)</h3><p><ol class='lessindent'>
<li>Added the <a href="c3ref/backup_finish.html#sqlite3backupinit">hot-backup interface</a>.
<li>Added new commands ".backup" and ".restore" to the <a href="cli.html">CLI</a>.
<li>Added new methods <a href="tclsqlite.html#backup">backup</a> and
<a href="tclsqlite.html#restore">restore</a> to the TCL interface.
<li>Improvements to the <a href="syntaxdiagrams.html">syntax bubble
diagrams</a>
<li>Various minor bug fixes
</ol></p>
<a name="version_3_6_10"></a>
<h3>2009-01-15 (3.6.10)</h3><p><ol class='lessindent'>
<li>Fix a cache coherency problem that could lead to database corruption.
Ticket #3584.
</ol></p>
<a name="version_3_6_9"></a>
<h3>2009-01-14 (3.6.9)</h3><p><ol class='lessindent'>
<li>Fix two bugs, which when combined might result in incorrect
query results. Both bugs were harmless by themselves; only when
they team up do they cause problems. Ticket #3581.
</ol></p>
<a name="version_3_6_8"></a>
<h3>2009-01-12 (3.6.8)</h3><p><ol class='lessindent'>
<li>Added support for <a href="lang_savepoint.html">nested transactions</a></li>
<li>Enhanced the query optimizer so that it is able to use
multiple indices to efficiently process
<a href="optoverview.html#or_opt">OR-connected constraints</a>
in a WHERE clause.</li>
<li>Added support for parentheses in FTS3 query patterns using the
<a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.</li>
</ol></p>
<a name="version_3_6_7"></a>
<h3>2008-12-16 (3.6.7)</h3><p><ol class='lessindent'>
<li>Reorganize the Unix interface in os_unix.c</li>
<li>Added support for "Proxy Locking" on Mac OS X.</li>
<li>Changed the prototype of the <a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a> interface in a
way that is backwards compatible but which might cause warnings in new
builds of applications that use that interface.</li>
<li>Changed the signature of the xDlSym method of the <a href="c3ref/vfs.html">sqlite3_vfs</a> object
in a way that is backwards compatible but which might cause
compiler warnings.</li>
<li>Added superfluous casts and variable initializations in order
to suppress nuisance compiler warnings.</li>
<li>Fixes for various minor bugs.</li>
</ol></p>
<a name="version_3_6_6_2"></a>
<h3>2008-11-26 (3.6.6.2)</h3><p><ol class='lessindent'>
<li>Fix a bug in the b-tree delete algorithm that seems like it might be
able to cause database corruption. The bug was first introduced in
<a href="#version_3_6_6">version 3.6.6</a> by check-in [5899] on 2008-11-13.</li>
<li>Fix a memory leak that can occur following a disk I/O error.</li>
</ol></p>
<a name="version_3_6_6_1"></a>
<h3>2008-11-22 (3.6.6.1)</h3><p><ol class='lessindent'>
<li>Fix a bug in the page cache that can lead database corruption following
a rollback. This bug was first introduced in <a href="#version_3_6_4">version 3.6.4</a>.</li>
<li>Two other very minor bug fixes</li>
</ol></p>
<a name="version_3_6_6"></a>
<h3>2008-11-19 (3.6.6)</h3><p><ol class='lessindent'>
<li>Fix a #define that prevented <a href="malloc.html#memsys5">memsys5</a> from compiling</li>
<li>Fix a problem in the virtual table commit mechanism that was causing
a crash in FTS3. Ticket #3497.</li>
<li>Add the <a href="c3ref/pcache_methods2.html">application-defined page cache</a></li>
<li>Added built-in support for VxWorks</li>
</ol></p>
<a name="version_3_6_5"></a>
<h3>2008-11-12 (3.6.5)</h3><p><ol class='lessindent'>
<li>Add the MEMORY option to the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>.</li>
<li>Added the <a href="c3ref/db_mutex.html">sqlite3_db_mutex()</a> interface.</li>
<li>Added the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
<li>Fixed the <a href="lang_delete.html#truncateopt">truncate optimization</a> so that <a href="c3ref/changes.html">sqlite3_changes()</a> and
<a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces and the <a href="pragma.html#pragma_count_changes">count_changes pragma</a>
return the correct values.</li>
<li>Added the <a href="c3ref/errcode.html">sqlite3_extended_errcode()</a> interface.</li>
<li>The <a href="lang_transaction.html">COMMIT</a> command now succeeds even if there are pending queries.
It returns <a href="rescode.html#busy">SQLITE_BUSY</a> if there are pending incremental BLOB I/O requests.
<li>The error code is changed to <a href="rescode.html#busy">SQLITE_BUSY</a> (instead of <a href="rescode.html#error">SQLITE_ERROR</a>)
when an attempt is made to <a href="lang_transaction.html">ROLLBACK</a> while one or more queries are
still pending.</li>
<li>Drop all support for the <a href="malloc.html#memsysx">experimental memory allocators</a> memsys4 and
memsys6.</li>
<li>Added the <a href="compile.html#zero_malloc">SQLITE_ZERO_MALLOC</a> compile-time option.</li>
</ol></p>
<a name="version_3_6_4"></a>
<h3>2008-10-15 (3.6.4)</h3><p><ol class='lessindent'>
<li>Add option support for LIMIT and ORDER BY clauses on <a href="lang_delete.html">DELETE</a> and
<a href="lang_update.html">UPDATE</a> statements. Only works if SQLite is compiled with
<a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>.
<li>Added the <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface for performance monitoring.</li>
<li>Add the <a href="lang_indexedby.html">INDEXED BY</a> clause.</li>
<li>The LOCKING_STYLE extension is now enabled by default on Mac OS X</li>
<li>Added the TRUNCATE option to <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a></li>
<li>Performance enhancements to tree balancing logic in the B-Tree layer.</li>
<li>Added the
<a href="https://www.sqlite.org/src/finfo?name=tool/genfkey.c">
source code</a> and
<a href="https://www.sqlite.org/src/finfo?name=tool/genfkey.README">
documentation</a> for the <b>genfkey</b> program for automatically generating
triggers to enforce foreign key constraints.</li>
<li>Added the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
<li>The <a href="lang.html">SQL language documentation</a> is converted to use
<a href="syntaxdiagrams.html">syntax diagrams</a> instead of BNF.</li>
<li>Other minor bug fixes</li>
</ol></p>
<a name="version_3_6_3"></a>
<h3>2008-09-22 (3.6.3)</h3><p><ol class='lessindent'>
<li>Fix for a bug in the SELECT DISTINCT logic that was introduced by the
prior version.</li>
<li>Other minor bug fixes</li>
</ol></p>
<a name="version_3_6_2"></a>
<h3>2008-08-30 (3.6.2)</h3><p><ol class='lessindent'>
<li>Split the pager subsystem into separate pager and pcache subsystems.</li>
<li>Factor out identifier resolution procedures into separate files.</li>
<li>Bug fixes</li>
</ol></p>
<a name="version_3_6_1"></a>
<h3>2008-08-06 (3.6.1)</h3><p><ol class='lessindent'>
<li>Added the <a href="malloc.html#lookaside">lookaside memory allocator</a> for a speed improvement in excess
of 15% on some workloads. (Your mileage may vary.)</li>
<li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a> verb to <a href="c3ref/config.html">sqlite3_config()</a> to control
the default lookaside configuration.</li>
<li>Added verbs <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">SQLITE_STATUS_PAGECACHE_SIZE</a> and
<a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">SQLITE_STATUS_SCRATCH_SIZE</a> to the <a href="c3ref/status.html">sqlite3_status()</a> interface.
<li>Modified <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">SQLITE_CONFIG_SCRATCH</a> to remove
the "+4" magic number in the buffer size computation.
<li>Added the <a href="c3ref/db_config.html">sqlite3_db_config()</a> and <a href="c3ref/db_status.html">sqlite3_db_status()</a> interfaces for
controlling and monitoring the lookaside allocator separately on each
<a href="c3ref/sqlite3.html">database connection</a>.</li>
<li>Numerous other performance enhancements</li>
<li>Miscellaneous minor bug fixes</li>
</ol></p>
<h3>2008-07-16 (3.6.0 beta)</h3><p><ol class='lessindent'>
<li>Modifications to the <a href="c3ref/vfs.html">virtual file system</a> interface
to support a wider range of embedded systems.
See <a href="35to36.html">35to36.html</a> for additional information.
<font color="red">*** Potentially incompatible change ***</font></li>
<li>All C-preprocessor macros used to control compile-time options
now begin with the prefix "SQLITE_". This may require changes to
applications that compile SQLite using their own makefiles and with
custom compile-time options, hence we mark this as a
<font color="red">*** Potentially incompatible change ***</font></li>
<li>The SQLITE_MUTEX_APPDEF compile-time option is no longer supported.
Alternative mutex implementations can now be added at run-time using
the <a href="c3ref/config.html">sqlite3_config()</a> interface with the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> verb.
<font color="red">*** Potentially incompatible change ***</font></li>
<li>The handling of IN and NOT IN operators that contain a NULL on their
right-hand side expression is brought into compliance with the SQL
standard and with other SQL database engines. This is a bug fix,
but as it has the potential to break legacy applications that depend
on the older buggy behavior, we mark that as a
<font color="red">*** Potentially incompatible change ***</font></li>
<li>The result column names generated for compound subqueries have been
simplified to show only the name of the column of the original table and
omit the table name. This makes SQLite operate more like other SQL
database engines.</li>
<li>Added the <a href="c3ref/config.html">sqlite3_config()</a> interface for doing run-time configuration
of the entire SQLite library.</li>
<li>Added the <a href="c3ref/status.html">sqlite3_status()</a> interface used for querying run-time status
information about the overall SQLite library and its subsystems.</li>
<li>Added the <a href="c3ref/initialize.html">sqlite3_initialize()</a> and <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interfaces.</li>
<li>The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> option was added to <a href="c3ref/open.html">sqlite3_open_v2()</a>.</li>
<li>Added the <a href="pragma.html#pragma_page_count">PRAGMA page_count</a> command.</li>
<li>Added the <a href="c3ref/next_stmt.html">sqlite3_next_stmt()</a> interface.</li>
<li>Added a new <a href="rtree.html">R*Tree virtual table</a></li>
</ol></p>
<a name="version_3_5_9"></a>
<h3>2008-05-14 (3.5.9)</h3><p><ol class='lessindent'>
<li>Added <em>experimental</em>
support for the <a href="pragma.html#pragma_journal_mode">journal_mode</a> PRAGMA and persistent journal.</li>
<li><a href="pragma.html#pragma_journal_mode">Journal mode PERSIST</a> is the default behavior in
<a href="pragma.html#pragma_locking_mode">exclusive locking mode</a>.</li>
<li>Fix a performance regression on LEFT JOIN (see ticket #3015)
that was mistakenly introduced in <a href="#version_3_5_8">version 3.5.8</a>.</li>
<li>Performance enhancement: Reengineer the internal routines used
to interpret and render variable-length integers.</li>
<li>Fix a buffer-overrun problem in <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> which occurs
when a string without a zero-terminator is passed to "%.*s".</li>
<li>Always convert IEEE floating point NaN values into NULL during
processing. (Ticket #3060)</li>
<li>Make sure that when a connection blocks on a RESERVED lock that
it is able to continue after the lock is released. (Ticket #3093)</li>
<li>The "configure" scripts should now automatically configure Unix
systems for large file support. Improved error messages for
when large files are encountered and large file support is disabled.</li>
<li>Avoid cache pages leaks following disk-full or I/O errors</li>
<li>And, many more minor bug fixes and performance enhancements....</li>
</ol></p>
<a name="version_3_5_8"></a>
<h3>2008-04-16 (3.5.8)</h3><p><ol class='lessindent'>
<li>Expose SQLite's internal pseudo-random number generator (PRNG)
via the <a href="c3ref/randomness.html">sqlite3_randomness()</a> interface</li>
<li>New interface <a href="c3ref/context_db_handle.html">sqlite3_context_db_handle()</a> that returns the
<a href="c3ref/sqlite3.html">database connection</a> handle that has invoked an application-defined
SQL function.</li>
<li>New interface <a href="c3ref/limit.html">sqlite3_limit()</a> allows size and length limits to be
set on a per-connection basis and at run-time.</li>
<li>Improved crash-robustness: write the database page size into the rollback
journal header.</li>
<li>Allow the <a href="lang_vacuum.html">VACUUM</a> command to change the page size of a database file.</li>
<li>The xAccess() method of the VFS is allowed to return -1 to signal
a memory allocation error.</li>
<li>Performance improvement: The OP_IdxDelete opcode uses unpacked records,
obviating the need for one OP_MakeRecord opcode call for each index
record deleted.</li>
<li>Performance improvement: Constant subexpressions are factored out of
loops.</li>
<li>Performance improvement: Results of OP_Column are reused rather than
issuing multiple OP_Column opcodes.</li>
<li>Fix a bug in the RTRIM collating sequence.</li>
<li>Fix a bug in the SQLITE_SECURE_DELETE option that was causing
Firefox crashes. Make arrangements to always test SQLITE_SECURE_DELETE
prior to each release.</li>
<li>Other miscellaneous performance enhancements.</li>
<li>Other miscellaneous minor bug fixes.</li>
</ol></p>
<a name="version_3_5_7"></a>
<h3>2008-03-17 (3.5.7)</h3><p><ol class='lessindent'>
<li>Fix a bug (ticket #2927) in the register allocation for
compound selects - introduced by the new VM code in version 3.5.5.</li>
<li>ALTER TABLE uses double-quotes instead of single-quotes for quoting
filenames.</li>
<li>Use the WHERE clause to reduce the size of a materialized VIEW in
an UPDATE or DELETE statement. (Optimization)</li>
<li>Do not apply the flattening optimization if the outer query is an
aggregate and the inner query contains ORDER BY. (Ticket #2943)</li>
<li>Additional OS/2 updates</li>
<li>Added an experimental power-of-two, first-fit memory allocator.</li>
<li>Remove all instances of sprintf() from the code</li>
<li>Accept "Z" as the zulu timezone at the end of date strings</li>
<li>Fix a bug in the LIKE optimizer that occurs when the last character
before the first wildcard is an upper-case "Z"</li>
<li>Added the "bitvec" object for keeping track of which pages have
been journalled. Improves speed and reduces memory consumption, especially
for large database files.</li>
<li>Get the SQLITE_ENABLE_LOCKING_STYLE macro working again on Mac OS X.</li>
<li>Store the statement journal in the temporary file directory instead of
collocated with the database file.</li>
<li>Many improvements and cleanups to the configure script</li>
</ol></p>
<a name="version_3_5_6"></a>
<h3>2008-02-06 (3.5.6)</h3><p><ol class='lessindent'>
<li>Fix a bug (ticket #2913)
that prevented virtual tables from working in a LEFT JOIN.
The problem was introduced into shortly before the 3.5.5 release.</li>
<li>Bring the OS/2 porting layer up-to-date.</li>
<li>Add the new <a href="c3ref/result_blob.html">sqlite3_result_error_code()</a> API and use it in the
implementation of <a href="lang_attach.html">ATTACH</a> so that proper error codes are returned
when an <a href="lang_attach.html">ATTACH</a> fails.</li>
</ol></p>
<a name="version_3_5_5"></a>
<h3>2008-01-31 (3.5.5)</h3><p><ol class='lessindent'>
<li>Convert the underlying virtual machine to be a register-based machine
rather than a stack-based machine. The only user-visible change
is in the output of EXPLAIN.</li>
<li>Add the build-in RTRIM collating sequence.</li>
</ol></p>
<a name="version_3_5_4"></a>
<h3>2007-12-14 (3.5.4)</h3><p><ol class='lessindent'>
<li>Fix a critical bug in UPDATE or DELETE that occurs when an
OR REPLACE clause or a trigger causes rows in the same table to
be deleted as side effects. (See ticket #2832.) The most likely
result of this bug is a segmentation fault, though database
corruption is a possibility.</li>
<li>Bring the processing of ORDER BY into compliance with the
SQL standard for case where a result alias and a table column name
are in conflict. Correct behavior is to prefer the result alias.
Older versions of SQLite incorrectly picked the table column.
(See ticket #2822.)</li>
<li>The <a href="lang_vacuum.html">VACUUM</a> command preserves
the setting of the
<a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a>.
(Ticket #2804.)</li>
<li>Productize and officially support the group_concat() SQL function.</li>
<li>Better optimization of some IN operator expressions.</li>
<li>Add the ability to change the
<a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> status of a
database by setting the auto_vaccum pragma and VACUUMing the database.</li>
<li>Prefix search in FTS3 is much more efficient.</li>
<li>Relax the SQL statement length restriction in the CLI so that
the ".dump" output of databases with very large BLOBs and strings can
be played back to recreate the database.</li>
<li>Other small bug fixes and optimizations.</li>
</ol></p>
<a name="version_3_5_3"></a>
<h3>2007-11-27 (3.5.3)</h3><p><ol class='lessindent'>
<li>Move website and documentation files out of the source tree into
a <a href="https://www.sqlite.org/docsrc/">separate CM system</a>.
<li>Fix a long-standing bug in INSERT INTO ... SELECT ... statements
where the SELECT is compound.
<li>Fix a long-standing bug in RAISE(IGNORE) as used in BEFORE triggers.
<li>Fixed the operator precedence for the ~ operator.
<li>On Win32, do not return an error when attempting to delete a file
that does not exist.
<li>Allow collating sequence names to be quoted.
<li>Modify the TCL interface to use <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>.
<li>Fix multiple bugs that can occur following a malloc() failure.
<li><a href="c3ref/step.html">sqlite3_step()</a> returns <a href="rescode.html#misuse">SQLITE_MISUSE</a> instead of crashing when
called with a NULL parameter.
<li>FTS3 now uses the SQLite memory allocator exclusively. The
FTS3 amalgamation can now be appended to the SQLite amalgamation to
generate a super-amalgamation containing both.
<li>The DISTINCT keyword now will sometimes use an INDEX if an
appropriate index is available and the optimizer thinks its use
might be advantageous.
</ol></p>
<a name="version_3_5_2"></a>
<h3>2007-11-05 (3.5.2)</h3><p><ol class='lessindent'>
<li>Dropped support for the <a href="compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a> compile-time
option.
<li>Always open files using FILE_FLAG_RANDOM_ACCESS under Windows.
<li>The 3rd parameter of the built-in SUBSTR() function is now optional.
<li>Bug fix: do not invoke the authorizer when reparsing the schema after
a schema change.
<li>Added the experimental malloc-free memory allocator in mem3.c.
<li>Virtual machine stores 64-bit integer and floating point constants
in binary instead of text for a performance boost.
<li>Fix a race condition in test_async.c.
<li>Added the ".timer" command to the CLI
</ol></p>
<a name="version_3_5_1"></a>
<h3>2007-10-04 (3.5.1)</h3><p><ol class='lessindent'>
<li><i><b>Nota Bene:</b> We are not using terms "alpha" or "beta" on this
release because the code is stable and because if we use those terms,
nobody will upgrade. However, we still reserve the right to make
incompatible changes to the new VFS interface in future releases.</i></li>
<li>Fix a bug in the handling of <a href="rescode.html#full">SQLITE_FULL</a> errors that could lead
to database corruption. Ticket #2686.
<li>The test_async.c drive now does full file locking and works correctly
when used simultaneously by multiple processes on the same database.
<li>The CLI ignores whitespace (including comments) at the end of lines
<li>Make sure the query optimizer checks dependencies on all terms of
a compound SELECT statement. Ticket #2640.
<li>Add demonstration code showing how to build a VFS for a raw
mass storage without a filesystem.
<li>Added an output buffer size parameter to the xGetTempname() method
of the VFS layer.
<li>Sticky <a href="rescode.html#full">SQLITE_FULL</a> or <a href="rescode.html#ioerr">SQLITE_IOERR</a> errors in the pager are reset
when a new transaction is started.
</ol></p>
<a name="version_3_5_0"></a>
<h3>2007-09-04 (3.5.0) alpha</h3><p><ol class='lessindent'>
<li>Redesign the OS interface layer. See
<a href="34to35.html">34to35.html</a> for details.
<font color="red">*** Potentially incompatible change ***</font>
<li>The <a href="c3ref/release_memory.html">sqlite3_release_memory()</a>, <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>,
and <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> interfaces now work cross all
threads in the process, not just the single thread in which they
are invoked.
<font color="red">*** Potentially incompatible change ***</font>
<li>Added the <a href="c3ref/open.html">sqlite3_open_v2()</a> interface.
<li>Reimplemented the memory allocation subsystem and made it
replaceable at compile-time.
<li>Created a new mutex subsystem and made it replicable at
compile-time.
<li>The same database connection may now be used simultaneously by
separate threads.
</ol></p>
<a name="version_3_4_2"></a>
<h3>2007-08-13 (3.4.2)</h3><p><ol class='lessindent'>
<li>Fix a database corruption bug that might occur if a ROLLBACK command
is executed in <a href="pragma.html#pragma_auto_vacuum">auto-vacuum mode</a>
and a very small <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a> is set.
Ticket #2565.
<li>Add the ability to run a full regression test with a small
<a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a>.
<li>Fix other minor problems with using small soft heap limits.
<li>Work-around for
<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32575">GCC bug 32575</a>.
<li>Improved error detection of misused aggregate functions.
<li>Improvements to the amalgamation generator script so that all symbols
are prefixed with either SQLITE_PRIVATE or SQLITE_API.
</ol></p>
<a name="version_3_4_1"></a>
<h3>2007-07-20 (3.4.1)</h3><p><ol class='lessindent'>
<li>Fix a bug in <a href="lang_vacuum.html">VACUUM</a> that can lead to
database corruptio if two
processes are connected to the database at the same time and one
VACUUMs then the other then modifies the database.</li>
<li>The expression "+column" is now considered the same as "column"
when computing the collating sequence to use on the expression.</li>
<li>In the <a href="tclsqlite.html">TCL language interface</a>,
"@variable" instead of "$variable" always binds as a blob.</li>
<li>Added <a href="pragma.html#pragma_freelist_count">PRAGMA freelist_count</a>
for determining the current size of the freelist.</li>
<li>The <a href="pragma.html#pragma_auto_vacuum">
PRAGMA auto_vacuum=incremental</a> setting is now persistent.</li>
<li>Add FD_CLOEXEC to all open files under Unix.</li>
<li>Fix a bug in the <a href="optoverview.html#minmax">
min()/max() optimization</a> when applied to
descending indices.</li>
<li>Make sure the TCL language interface works correctly with 64-bit
integers on 64-bit machines.</li>
<li>Allow the value -9223372036854775808 as an integer literal in SQL
statements.</li>
<li>Add the capability of "hidden" columns in virtual tables.</li>
<li>Use the macro SQLITE_PRIVATE (defaulting to "static") on all
internal functions in the amalgamation.</li>
<li>Add pluggable tokenizers and <a href="https://icu.unicode.org">ICU</a>
tokenization support to FTS2</li>
<li>Other minor bug fixes and documentation enhancements</li>
</ol></p>
<a name="version_3_4_0"></a>
<h3>2007-06-18 (3.4.0)</h3><p><ol class='lessindent'>
<li>Fix a bug that can lead to database corruption if an <a href="rescode.html#busy">SQLITE_BUSY</a> error
occurs in the middle of an explicit transaction and that transaction
is later committed. Ticket #2409.
<li>Fix a bug that can lead to database corruption if autovacuum mode is
on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement
which itself follows a cache overflow inside a transaction. See
ticket #2418.
</li>
<li>Added explicit <a href="limits.html">upper bounds</a> on the sizes and
quantities of things SQLite can process. This change might cause
compatibility problems for
applications that use SQLite in the extreme, which is why the current
release is 3.4.0 instead of 3.3.18.</li>
<li>Added support for <a href="c3ref/blob_open.html">Incremental BLOB I/O</a>.</li>
<li>Added the <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob()</a> API</a>
and the <a href="lang_corefunc.html#zeroblob">zeroblob()</a> SQL function.</li>
<li>Added support for <a href="pragma.html#pragma_incremental_vacuum">
Incremental Vacuum</a>.</li>
<li>Added the SQLITE_MIXED_ENDIAN_64BIT_FLOAT compile-time option to support
ARM7 processors with goofy endianness.</li>
<li>Removed all instances of sprintf() and strcpy() from the core library.</li>
<li>Added support for
<a href="https://icu.unicode.org">International Components for Unicode (ICU)</a>
to the full-text search extensions.
<li>In the Windows OS driver, reacquire a SHARED lock if an attempt to
acquire an EXCLUSIVE lock fails. Ticket #2354</li>
<li>Fix the REPLACE() function so that it returns NULL if the second argument
is an empty string. Ticket #2324.</li>
<li>Document the hazards of type conversions in
<a href="c3ref/column_blob.html">sqlite3_column_blob()</a>
and related APIs. Fix unnecessary type conversions. Ticket #2321.</li>
<li>Internationalization of the TRIM() function. Ticket #2323</li>
<li>Use memmove() instead of memcpy() when moving between memory regions
that might overlap. Ticket #2334</li>
<li>Fix an optimizer bug involving subqueries in a compound SELECT that has
both an ORDER BY and a LIMIT clause. Ticket #2339.</li>
<li>Make sure the <a href="c3ref/mprintf.html">sqlite3_snprintf()</a>
interface does not zero-terminate the buffer if the buffer size is
less than 1. Ticket #2341</li>
<li>Fix the built-in printf logic so that it prints "NaN" not "Inf" for
floating-point NaNs. Ticket #2345</li>
<li>When converting BLOB to TEXT, use the text encoding of the main database.
Ticket #2349</li>
<li>Keep the full precision of integers (if possible) when casting to
NUMERIC. Ticket #2364</li>
<li>Fix a bug in the handling of UTF16 codepoint 0xE000</li>
<li>Consider explicit collate clauses when matching WHERE constraints
to indices in the query optimizer. Ticket #2391</li>
<li>Fix the query optimizer to correctly handle constant expressions in
the ON clause of a LEFT JOIN. Ticket #2403</li>
<li>Fix the query optimizer to handle rowid comparisons to NULL
correctly. Ticket #2404</li>
<li>Fix many potential segfaults that could be caused by malicious SQL
statements.</li>
</ol></p>
<a name="version_3_3_17"></a>
<h3>2007-04-25 (3.3.17)</h3><p><ol class='lessindent'>
<li>When the "write_version" value of the database header is larger than
what the library understands, make the database read-only instead of
unreadable.</li>
<li>Other minor bug fixes</li>
</ol></p>
<a name="version_3_3_16"></a>
<h3>2007-04-18 (3.3.16)</h3><p><ol class='lessindent'>
<li>Fix a bug that caused VACUUM to fail if NULLs appeared in a
UNIQUE column.</li>
<li>Reinstate performance improvements that were added in
<a href="#version_3_3_14">Version 3.3.14</a>
but regressed in <a href="#version_3_3_15">Version 3.3.15</a>.</li>
<li>Fix problems with the handling of ORDER BY expressions on
compound SELECT statements in subqueries.</li>
<li>Fix a potential segfault when destroying locks on WinCE in
a multi-threaded environment.</li>
<li>Documentation updates.</li>
</ol></p>
<a name="version_3_3_15"></a>
<h3>2007-04-09 (3.3.15)</h3><p><ol class='lessindent'>
<li>Fix a bug introduced in 3.3.14 that caused a rollback of
CREATE TEMP TABLE to leave the database connection wedged.</li>
<li>Fix a bug that caused an extra NULL row to be returned when
a descending query was interrupted by a change to the database.</li>
<li>The FOR EACH STATEMENT clause on a trigger now causes a syntax
error. It used to be silently ignored.</li>
<li>Fix an obscure and relatively harmless problem that might have caused
a resource leak following an I/O error.</li>
<li>Many improvements to the test suite. Test coverage now exceeded 98%</li>
</ol></p>
<a name="version_3_3_14"></a>
<h3>2007-04-02 (3.3.14)</h3><p><ol class='lessindent'>
<li>Fix a bug (ticket #2273)
that could cause a segfault when the IN operator
is used one term of a two-column index and the right-hand side of
the IN operator contains a NULL.</li>
<li>Added a new OS interface method for determining the sector size
of underlying media: sqlite3OsSectorSize().</li>
<li>A new algorithm for statements of the form
INSERT INTO <i>table1</i> SELECT * FROM <i>table2</i>
is faster and reduces fragmentation. VACUUM uses statements of
this form and thus runs faster and defragments better.</li>
<li>Performance enhancements through reductions in disk I/O:
<ol type='a'>
<li>Do not read the last page of an overflow chain when
deleting the row - just add that page to the freelist.</li>
<li>Do not store pages being deleted in the
rollback journal.</li>
<li>Do not read in the (meaningless) content of
pages extracted from the freelist.</li>
<li>Do not flush the page cache (and thus avoiding
a cache refill) unless another process changes the underlying
database file.</li>
<li>Truncate rather than delete the rollback journal when committing
a transaction in exclusive access mode, or when committing the TEMP
database.</li>
</ol></li>
<li>Added support for exclusive access mode using
<a href="pragma.html#pragma_locking_mode">
"PRAGMA locking_mode=EXCLUSIVE"</a></li>
<li>Use heap space instead of stack space for large buffers in the
pager - useful on embedded platforms with stack-space
limitations.</li>
<li>Add a makefile target "sqlite3.c" that builds an amalgamation containing
the core SQLite library C code in a single file.</li>
<li>Get the library working correctly when compiled
with GCC option "-fstrict-aliasing".</li>
<li>Removed the vestigal SQLITE_PROTOCOL error.</li>
<li>Improvements to test coverage, other minor bugs fixed,
memory leaks plugged,
code refactored and/or recommended in places for easier reading.</li>
</ol></p>
<a name="version_3_3_13"></a>
<h3>2007-02-13 (3.3.13)</h3><p><ol class='lessindent'>
<li>Add a "fragmentation" measurement in the output of sqlite3_analyzer.</li>
<li>Add the COLLATE operator used to explicitly set the collating sequence
used by an expression. This feature is considered experimental pending
additional testing.</li>
<li>Allow up to 64 tables in a join - the old limit was 32.</li>
<li>Added two new experimental functions:
<a href="lang_corefunc.html#randomblob">randomblob()</a> and
<a href="lang_corefunc.html#hex">hex()</a>.
Their intended use is to facilitate generating
<a href="http://en.wikipedia.org/wiki/UUID">UUIDs</a>.
</li>
<li>Fix a problem where
<a href="pragma.html#pragma_count_changes">PRAGMA count_changes</a> was
causing incorrect results for updates on tables with triggers</li>
<li>Fix a bug in the ORDER BY clause optimizer for joins where the
left-most table in the join is constrained by a UNIQUE index.</li>
<li>Fixed a bug in the "copy" method of the TCL interface.</li>
<li>Bug fixes in fts1 and fts2 modules.</li>
</ol></p>
<a name="version_3_3_12"></a>
<h3>2007-01-27 (3.3.12)</h3><p><ol class='lessindent'>
<li>Fix another bug in the IS NULL optimization that was added in
version 3.3.9.</li>
<li>Fix an assertion fault that occurred on deeply nested views.</li>
<li>Limit the amount of output that
<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
generates.</li>
<li>Minor syntactic changes to support a wider variety of compilers.</li>
</ol></p>
<a name="version_3_3_11"></a>
<h3>2007-01-22 (3.3.11)</h3><p><ol class='lessindent'>
<li>Fix another bug in the implementation of the new
<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API.
We'll get it right eventually...</li>
<li>Fix a bug in the IS NULL optimization that was added in version 3.3.9 -
the bug was causing incorrect results on certain LEFT JOINs that included
in the WHERE clause an IS NULL constraint for the right table of the
LEFT JOIN.</li>
<li>Make AreFileApisANSI() a no-op macro in WinCE since WinCE does not
support this function.</li>
</ol></p>
<a name="version_3_3_10"></a>
<h3>2007-01-09 (3.3.10)</h3><p><ol class='lessindent'>
<li>Fix bugs in the implementation of the new
<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API
that can lead to segfaults.</li>
<li>Fix 1-second round-off errors in the
strftime() function</li>
<li>Enhance the Windows OS layer to provide detailed error codes</li>
<li>Work around a win2k problem so that SQLite can use single-character
database file names</li>
<li>The
<a href="pragma.html#pragma_user_version">user_version</a> and
<a href="pragma.html#pragma_schema_version">schema_version</a> pragmas
correctly set their column names in the result set</li>
<li>Documentation updates</li>
</ol></p>
<a name="version_3_3_9"></a>
<h3>2007-01-04 (3.3.9)</h3><p><ol class='lessindent'>
<li>Fix bugs in pager.c that could lead to database corruption if two
processes both try to recover a hot journal at the same instant</li>
<li>Added the <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
API.</li>
<li>Fixed the ".dump" command in the command-line shell to show
indices, triggers and views again.</li>
<li>Change the table_info pragma so that it returns NULL for the default
value if there is no default value</li>
<li>Support for non-ASCII characters in win95 filenames</li>
<li>Query optimizer enhancements:
<ol type='a'>
<li>Optimizer does a better job of using indices to satisfy ORDER BY
clauses that sort on the integer primary key</li>
<li>Use an index to satisfy an IS NULL operator in the WHERE clause</li>
<li>Fix a bug that was causing the optimizer to miss an OR optimization
opportunity</li>
<li>The optimizer has more freedom to reorder tables in the FROM clause
even in there are LEFT joins.</li>
</ol>
<li>Extension loading supported added to WinCE</li>
<li>Allow constraint names on the DEFAULT clause in a table definition</li>
<li>Added the ".bail" command to the command-line shell</li>
<li>Make CSV (comma separate value) output from the command-line shell
more closely aligned to accepted practice</li>
<li>Experimental FTS2 module added</li>
<li>Use sqlite3_mprintf() instead of strdup() to avoid libc dependencies</li>
<li>VACUUM uses a temporary file in the official TEMP folder, not in the
same directory as the original database</li>
<li>The prefix on temporary filenames on Windows is changed from "sqlite"
to "etilqs".</li>
</ol></p>
<a name="version_3_3_8"></a>
<h3>2006-10-09 (3.3.8)</h3><p><ol class='lessindent'>
<li>Support for full text search using the FTS1 module (beta)</li>
<li>Added Mac OS X locking patches (beta - disabled by default)</li>
<li>Introduce extended error codes and add error codes for various
kinds of I/O errors.</li>
<li>Added support for IF EXISTS on CREATE/DROP TRIGGER/VIEW</li>
<li>Fix the regression test suite so that it works with Tcl8.5</li>
<li>Enhance sqlite3_set_authorizer() to provide notification of calls to
SQL functions.</li>
<li>Added experimental API: sqlite3_auto_extension()</li>
<li>Various minor bug fixes</li>
</ol></p>
<a name="version_3_3_7"></a>
<h3>2006-08-12 (3.3.7)</h3><p><ol class='lessindent'>
<li>Added support for virtual tables (beta)</li>
<li>Added support for dynamically loaded extensions (beta)</li>
<li>The
<a href="c3ref/interrupt.html">sqlite3_interrupt()</a>
routine can be called for a different thread</li>
<li>Added the <a href="lang_expr.html#match">MATCH</a> operator.</li>
<li>The default file format is now 1.
</ol></p>
<a name="version_3_3_6"></a>
<h3>2006-06-06 (3.3.6)</h3><p><ol class='lessindent'>
<li>Plays better with virus scanners on Windows</li>
<li>Faster :memory: databases</li>
<li>Fix an obscure segfault in UTF-8 to UTF-16 conversions</li>
<li>Added driver for OS/2</li>
<li>Correct column meta-information returned for aggregate queries</li>
<li>Enhanced output from EXPLAIN QUERY PLAN</li>
<li>LIMIT 0 now works on subqueries</li>
<li>Bug fixes and performance enhancements in the query optimizer</li>
<li>Correctly handle NULL filenames in ATTACH and DETACH</li>
<li>Improved syntax error messages in the parser</li>
<li>Fix type coercion rules for the IN operator</li>
</ol></p>
<a name="version_3_3_5"></a>
<h3>2006-04-05 (3.3.5)</h3><p><ol class='lessindent'>
<li>CHECK constraints use conflict resolution algorithms correctly.</li>
<li>The SUM() function throws an error on integer overflow.</li>
<li>Choose the column names in a compound query from the left-most SELECT
instead of the right-most.</li>
<li>The sqlite3_create_collation() function
honors the SQLITE_UTF16_ALIGNED flag.</li>
<li>SQLITE_SECURE_DELETE compile-time option causes deletes to overwrite
old data with zeros.</li>
<li>Detect integer overflow in abs().</li>
<li>The random() function provides 64 bits of randomness instead of
only 32 bits.</li>
<li>Parser detects and reports automaton stack overflow.</li>
<li>Change the round() function to return REAL instead of TEXT.</li>
<li>Allow WHERE clause terms on the left table of a LEFT OUTER JOIN to
contain aggregate subqueries.</li>
<li>Skip over leading spaces in text to numeric conversions.</li>
<li>Various minor bug and documentation typo fixes and
performance enhancements.</li>
</ol></p>
<a name="version_3_3_4"></a>
<h3>2006-02-11 (3.3.4)</h3><p><ol class='lessindent'>
<li>Fix a blunder in the Unix mutex implementation that can lead to
deadlock on multithreaded systems.</li>
<li>Fix an alignment problem on 64-bit machines</li>
<li>Added the fullfsync pragma.</li>
<li>Fix an optimizer bug that could have caused some unusual LEFT OUTER JOINs
to give incorrect results.</li>
<li>The SUM function detects integer overflow and converts to accumulating
an approximate result using floating point numbers</li>
<li>Host parameter names can begin with '@' for compatibility with SQL Server.
</li>
<li>Other miscellaneous bug fixes</li>
</ol></p>
<a name="version_3_3_3"></a>
<h3>2006-01-31 (3.3.3)</h3><p><ol class='lessindent'>
<li>Removed support for an ON CONFLICT clause on CREATE INDEX - it never
worked correctly so this should not present any backward compatibility
problems.</li>
<li>Authorizer callback now notified of ALTER TABLE ADD COLUMN commands</li>
<li>After any changes to the TEMP database schema, all prepared statements
are invalidated and must be recreated using a new call to
sqlite3_prepare()</li>
<li>Other minor bug fixes in preparation for the first stable release
of version 3.3</li>
</ol></p>
<h3>2006-01-24 (3.3.2 beta)</h3><p><ol class='lessindent'>
<li>Bug fixes and speed improvements. Improved test coverage.</li>
<li>Changes to the OS-layer interface: mutexes must now be recursive.</li>
<li>Discontinue the use of thread-specific data for out-of-memory
exception handling</li>
</ol></p>
<h3>2006-01-16 (3.3.1 alpha)</h3><p><ol class='lessindent'>
<li>Countless bug fixes</li>
<li>Speed improvements</li>
<li>Database connections can now be used by multiple threads, not just
the thread in which they were created.</li>
</ol></p>
<h3>2006-01-11 (3.3.0 alpha)</h3><p><ol class='lessindent'>
<li>CHECK constraints</li>
<li>IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX.</li>
<li>DESC indices</li>
<li>More efficient encoding of boolean values resulting in smaller database
files</li>
<li>More aggressive <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a></li>
<li>Separate INTEGER and REAL affinity</li>
<li>Added a virtual function layer for the OS interface</li>
<li>"exists" method added to the TCL interface</li>
<li>Improved response to out-of-memory errors</li>
<li>Database cache can be optionally shared between connections
in the same thread</li>
<li>Optional READ UNCOMMITTED isolation (instead of the default
isolation level of SERIALIZABLE) and table level locking when
database connections share a common cache.</li>
</ol></p>
<a name="version_3_2_8"></a>
<h3>2005-12-19 (3.2.8)</h3><p><ol class='lessindent'>
<li>Fix an obscure bug that can cause database corruption under the
following unusual circumstances: A large INSERT or UPDATE statement which
is part of an even larger transaction fails due to a uniqueness constraint
but the containing transaction commits.</li>
</ol></p>
<a name="version_2_8_17"></a>
<h3>2005-12-19 (2.8.17)</h3><p><ol class='lessindent'>
<li>Fix an obscure bug that can cause database corruption under the
following unusual circumstances: A large INSERT or UPDATE statement which
is part of an even larger transaction fails due to a uniqueness contraint
but the containing transaction commits.</li>
</ol></p>
<a name="version_3_2_7"></a>
<h3>2005-09-24 (3.2.7)</h3><p><ol class='lessindent'>
<li>GROUP BY now considers NULLs to be equal again, as it should
</li>
<li>Now compiles on Solaris and OpenBSD and other Unix variants
that lack the fdatasync() function</li>
<li>Now compiles on MSVC++6 again</li>
<li>Fix uninitialized variables causing malfunctions for various obscure
queries</li>
<li>Correctly compute a LEFT OUTER JOINs that is constrained on the
left table only</li>
</ol></p>
<a name="version_3_2_6"></a>
<h3>2005-09-17 (3.2.6)</h3><p><ol class='lessindent'>
<li>Fix a bug that can cause database corruption if a VACUUM (or
autovacuum) fails and is rolled back on a database that is
larger than 1GiB</li>
<li>LIKE optimization now works for columns with COLLATE NOCASE</li>
<li>ORDER BY and GROUP BY now use bounded memory</li>
<li>Added support for COUNT(DISTINCT expr)</li>
<li>Change the way SUM() handles NULL values in order to comply with
the SQL standard</li>
<li>Use fdatasync() instead of fsync() where possible in order to speed
up commits slightly</li>
<li>Use of the CROSS keyword in a join turns off the table reordering
optimization</li>
<li>Added the experimental and undocumented EXPLAIN QUERY PLAN capability</li>
<li>Use the unicode API in Windows</li>
</ol></p>
<a name="version_3_2_5"></a>
<h3>2005-08-27 (3.2.5)</h3><p><ol class='lessindent'>
<li>Fix a bug effecting DELETE and UPDATE statements that changed
more than 40960 rows.</li>
<li>Change the makefile so that it no longer requires GNUmake extensions</li>
<li>Fix the --enable-threadsafe option on the configure script</li>
<li>Fix a code generator bug that occurs when the left-hand side of an IN
operator is constant and the right-hand side is a SELECT statement</li>
<li>The PRAGMA synchronous=off statement now disables syncing of the
master journal file in addition to the normal rollback journals</li>
</ol></p>
<a name="version_3_2_4"></a>
<h3>2005-08-24 (3.2.4)</h3><p><ol class='lessindent'>
<li>Fix a bug introduced in the previous release
that can cause a segfault while generating code
for complex WHERE clauses.</li>
<li>Allow floating point literals to begin or end with a decimal point.</li>
</ol></p>
<a name="version_3_2_3"></a>
<h3>2005-08-21 (3.2.3)</h3><p><ol class='lessindent'>
<li>Added support for the CAST operator</li>
<li>Tcl interface allows BLOB values to be transferred to user-defined
functions</li>
<li>Added the "transaction" method to the Tcl interface</li>
<li>Allow the DEFAULT value of a column to call functions that have constant
operands</li>
<li>Added the ANALYZE command for gathering statistics on indices and
using those statistics when picking an index in the optimizer</li>
<li>Remove the limit (formerly 100) on the number of terms in the
WHERE clause</li>
<li>The right-hand side of the IN operator can now be a list of expressions
instead of just a list of constants</li>
<li>Rework the optimizer so that it is able to make better use of indices</li>
<li>The order of tables in a join is adjusted automatically to make
better use of indices</li>
<li>The IN operator is now a candidate for optimization even if the left-hand
side is not the left-most term of the index. Multiple IN operators can be
used with the same index.</li>
<li>WHERE clause expressions using BETWEEN and OR are now candidates
for optimization</li>
<li>Added the "case_sensitive_like" pragma and the SQLITE_CASE_SENSITIVE_LIKE
compile-time option to set its default value to "on".</li>
<li>Use indices to help with GLOB expressions and LIKE expressions too
when the case_sensitive_like pragma is enabled</li>
<li>Added support for grave-accent quoting for compatibility with MySQL</li>
<li>Improved test coverage</li>
<li>Dozens of minor bug fixes</li>
</ol></p>
<a name="version_3_2_2"></a>
<h3>2005-06-12 (3.2.2)</h3><p><ol class='lessindent'>
<li>Added the sqlite3_db_handle() API</li>
<li>Added the sqlite3_get_autocommit() API</li>
<li>Added a REGEXP operator to the parser. There is no function to back
up this operator in the standard build but users can add their own using
sqlite3_create_function()</li>
<li>Speed improvements and library footprint reductions.</li>
<li>Fix byte alignment problems on 64-bit architectures.</li>
<li>Many, many minor bug fixes and documentation updates.</li>
</ol></p>
<a name="version_3_2_1"></a>
<h3>2005-03-29 (3.2.1)</h3><p><ol class='lessindent'>
<li>Fix a memory allocation error in the new ADD COLUMN comment.</li>
<li>Documentation updates</li>
</ol></p>
<a name="version_3_2_0"></a>
<h3>2005-03-21 (3.2.0)</h3><p><ol class='lessindent'>
<li>Added support for ALTER TABLE ADD COLUMN.</li>
<li>Added support for the "T" separator in ISO-8601 date/time strings.</li>
<li>Improved support for Cygwin.</li>
<li>Numerous bug fixes and documentation updates.</li>
</ol></p>
<a name="version_3_1_6"></a>
<h3>2005-03-17 (3.1.6)</h3><p><ol class='lessindent'>
<li>Fix a bug that could cause database corruption when inserting
record into tables with around 125 columns.</li>
<li>sqlite3_step() is now much more likely to invoke the busy handler
and less likely to return SQLITE_BUSY.</li>
<li>Fix memory leaks that used to occur after a malloc() failure.</li>
</ol></p>
<a name="version_3_1_5"></a>
<h3>2005-03-11 (3.1.5)</h3><p><ol class='lessindent'>
<li>The ioctl on Mac OS X to control syncing to disk is F_FULLFSYNC,
not F_FULLSYNC. The previous release had it wrong.</li>
</ol></p>
<a name="version_3_1_4"></a>
<h3>2005-03-11 (3.1.4)</h3><p><ol class='lessindent'>
<li>Fix a bug in autovacuum that could cause database corruption if
a CREATE UNIQUE INDEX fails because of a constraint violation.
This problem only occurs if the new autovacuum feature introduced in
version 3.1 is turned on.</li>
<li>The F_FULLSYNC ioctl (currently only supported on Mac OS X) is disabled
if the synchronous pragma is set to something other than "full".</li>
<li>Add additional forward compatibility to the future version 3.2 database
file format.</li>
<li>Fix a bug in WHERE clauses of the form (rowid<'2')</li>
<li>New <a href="compile.html#omitfeatures">SQLITE_OMIT_...</a> compile-time options added</li>
<li>Updates to the man page</li>
<li>Remove the use of strcasecmp() from the shell</li>
<li>Windows DLL exports symbols Tclsqlite_Init and Sqlite_Init</li>
</ol></p>
<a name="version_3_1_3"></a>
<h3>2005-02-19 (3.1.3)</h3><p><ol class='lessindent'>
<li>Fix a problem with VACUUM on databases from which tables containing
AUTOINCREMENT have been dropped.</li>
<li>Add forward compatibility to the future version 3.2 database file
format.</li>
<li>Documentation updates</li>
</ol></p>
<a name="version_3_1_2"></a>
<h3>2005-02-15 (3.1.2)</h3><p><ol class='lessindent'>
<li>Fix a bug that can lead to database corruption if there are two
open connections to the same database and one connection does a VACUUM
and the second makes some change to the database.</li>
<li>Allow "?" parameters in the LIMIT clause.</li>
<li>Fix VACUUM so that it works with AUTOINCREMENT.</li>
<li>Fix a race condition in AUTOVACUUM that can lead to corrupt databases</li>
<li>Add a numeric version number to the sqlite3.h include file.</li>
<li>Other minor bug fixes and performance enhancements.</li>
</ol></p>
<a name="version_2_8_16"></a>
<h3>2005-02-15 (2.8.16)</h3><p><ol class='lessindent'>
<li>Fix a bug that can lead to database corruption if there are two
open connections to the same database and one connection does a VACUUM
and the second makes some change to the database.</li>
<li>Correctly handle quoted names in CREATE INDEX statements.</li>
<li>Fix a naming conflict between sqlite.h and sqlite3.h.</li>
<li>Avoid excess heap usage when copying expressions.</li>
<li>Other minor bug fixes.</li>
</ol></p>
<h3>2005-02-01 (3.1.1 BETA)</h3><p><ol class='lessindent'>
<li>Automatic caching of prepared statements in the TCL interface</li>
<li>ATTACH and DETACH as well as some other operations cause existing
prepared statements to expire.</li>
<li>Numerous minor bug fixes</li>
</ol></p>
<h3>2005-01-21 (3.1.0 ALPHA)</h3><p><ol class='lessindent'>
<li>Autovacuum support added</li>
<li>CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP added</li>
<li>Support for the EXISTS clause added.</li>
<li>Support for correlated subqueries added.</li>
<li>Added the ESCAPE clause on the LIKE operator.</li>
<li>Support for ALTER TABLE ... RENAME TABLE ... added</li>
<li>AUTOINCREMENT keyword supported on INTEGER PRIMARY KEY</li>
<li>Many SQLITE_OMIT_ macros inserts to omit features at compile-time
and reduce the library footprint.</li>
<li>The REINDEX command was added.</li>
<li>The engine no longer consults the main table if it can get
all the information it needs from an index.</li>
<li>Many nuisance bugs fixed.</li>
</ol></p>
<a name="version_3_0_8"></a>
<h3>2004-10-12 (3.0.8)</h3><p><ol class='lessindent'>
<li>Add support for DEFERRED, IMMEDIATE, and EXCLUSIVE transactions.</li>
<li>Allow new user-defined functions to be created when there are
already one or more precompiled SQL statements.<li>
<li>Fix portability problems for MinGW/MSYS.</li>
<li>Fix a byte alignment problem on 64-bit Sparc machines.</li>
<li>Fix the ".import" command of the shell so that it ignores \r
characters at the end of lines.</li>
<li>The "csv" mode option in the shell puts strings inside double-quotes.</li>
<li>Fix typos in documentation.</li>
<li>Convert array constants in the code to have type "const".</li>
<li>Numerous code optimizations, specially optimizations designed to
make the code footprint smaller.</li>
</ol></p>
<a name="version_3_0_7"></a>
<h3>2004-09-18 (3.0.7)</h3><p><ol class='lessindent'>
<li>The BTree module allocates large buffers using malloc() instead of
off of the stack, in order to play better on machines with limited
stack space.</li>
<li>Fixed naming conflicts so that versions 2.8 and 3.0 can be
linked and used together in the same ANSI-C source file.</li>
<li>New interface: sqlite3_bind_parameter_index()</li>
<li>Add support for wildcard parameters of the form: "?nnn"</li>
<li>Fix problems found on 64-bit systems.</li>
<li>Removed encode.c file (containing unused routines) from the
version 3.0 source tree.</li>
<li>The sqlite3_trace() callbacks occur before each statement
is executed, not when the statement is compiled.</li>
<li>Makefile updates and miscellaneous bug fixes.</li>
</ol></p>
<h3>2004-09-02 (3.0.6 beta)</h3><p><ol class='lessindent'>
<li>Better detection and handling of corrupt database files.</li>
<li>The sqlite3_step() interface returns SQLITE_BUSY if it is unable
to commit a change because of a lock</li>
<li>Combine the implementations of LIKE and GLOB into a single
pattern-matching subroutine.</li>
<li>Miscellaneous code size optimizations and bug fixes</li>
</ol></p>
<h3>2004-08-29 (3.0.5 beta)</h3><p><ol class='lessindent'>
<li>Support for ":AAA" style bind parameter names.</li>
<li>Added the new sqlite3_bind_parameter_name() interface.</li>
<li>Support for TCL variable names embedded in SQL statements in the
TCL bindings.</li>
<li>The TCL bindings transfer data without necessarily doing a conversion
to a string.</li>
<li>The database for TEMP tables is not created until it is needed.</li>
<li>Add the ability to specify an alternative temporary file directory
using the "sqlite_temp_directory" global variable.</li>
<li>A compile-time option (SQLITE_BUSY_RESERVED_LOCK) causes the busy
handler to be called when there is contention for a RESERVED lock.</li>
<li>Various bug fixes and optimizations</li>
</ol></p>
<h3>2004-08-09 (3.0.4 beta)</h3><p><ol class='lessindent'>
<li>CREATE TABLE and DROP TABLE now work correctly as prepared statements.</li>
<li>Fix a bug in VACUUM and UNIQUE indices.</li>
<li>Add the ".import" command to the command-line shell.</li>
<li>Fix a bug that could cause index corruption when an attempt to
delete rows of a table is blocked by a pending query.</li>
<li>Library size optimizations.</li>
<li>Other minor bug fixes.</li>
</ol></p>
<a name="version_2_8_15"></a>
<h3>2004-07-22 (2.8.15)</h3><p><ol class='lessindent'>
<li>This is a maintenance release only. Various minor bugs have been
fixed and some portability enhancements are added.</li>
</ol></p>
<h3>2004-07-22 (3.0.3 beta)</h3><p><ol class='lessindent'>
<li>The second beta release for SQLite 3.0.</li>
<li>Add support for "PRAGMA page_size" to adjust the page size of
the database.</li>
<li>Various bug fixes and documentation updates.</li>
</ol></p>
<h3>2004-06-30 (3.0.2 beta)</h3><p><ol class='lessindent'>
<li>The first beta release for SQLite 3.0.</li>
</ol></p>
<h3>2004-06-22 (3.0.1 alpha)</h3><p><ol class='lessindent'>
<li><font color="red"><b>
*** Alpha Release - Research And Testing Use Only ***</b></font>
<li>Lots of bug fixes.</li>
</ol></p>
<h3>2004-06-18 (3.0.0 alpha)</h3><p><ol class='lessindent'>
<li><font color="red"><b>
*** Alpha Release - Research And Testing Use Only ***</b></font>
<li>Support for internationalization including UTF-8, UTF-16, and
user defined collating sequences.</li>
<li>New file format that is 25% to 35% smaller for typical use.</li>
<li>Improved concurrency.</li>
<li>Atomic commits for ATTACHed databases.</li>
<li>Remove cruft from the APIs.</li>
<li>BLOB support.</li>
<li>64-bit rowids.</li>
<li><a href="version3.html">More information</a>.
</ol></p>
<a name="version_2_8_14"></a>
<h3>2004-06-09 (2.8.14)</h3><p><ol class='lessindent'>
<li>Fix the min() and max() optimizer so that it works when the FROM
clause consists of a subquery.</li>
<li>Ignore extra whitespace at the end of "." commands in the shell.</li>
<li>Bundle sqlite_encode_binary() and sqlite_decode_binary() with the
library.</li>
<li>The TEMP_STORE and DEFAULT_TEMP_STORE pragmas now work.</li>
<li>Code changes to compile cleanly using OpenWatcom.</li>
<li>Fix VDBE stack overflow problems with INSTEAD OF triggers and
NULLs in IN operators.</li>
<li>Add the global variable sqlite_temp_directory which if set defines the
directory in which temporary files are stored.</li>
<li>sqlite_interrupt() plays well with VACUUM.</li>
<li>Other minor bug fixes.</li>
</ol></p>
<a name="version_2_8_13"></a>
<h3>2004-03-08 (2.8.13)</h3><p><ol class='lessindent'>
<li>Refactor parts of the code in order to make the code footprint
smaller. The code is now also a little bit faster.</li>
<li>sqlite_exec() is now implemented as a wrapper around sqlite_compile()
and sqlite_step().</li>
<li>The built-in min() and max() functions now honor the difference between
NUMERIC and TEXT datatypes. Formerly, min() and max() always assumed
their arguments were of type NUMERIC.</li>
<li>New HH:MM:SS modifier to the built-in date/time functions.</li>
<li>Experimental sqlite_last_statement_changes() API added. Fixed
the last_insert_rowid() function so that it works correctly with
triggers.</li>
<li>Add functions prototypes for the database encryption API.</li>
<li>Fix several nuisance bugs.</li>
</ol></p>
<a name="version_2_8_12"></a>
<h3>2004-02-08 (2.8.12)</h3><p><ol class='lessindent'>
<li>Fix a bug that will might corrupt the rollback journal if a power failure
or external program halt occurs in the middle of a COMMIT. The corrupt
journal can lead to database corruption when it is rolled back.</li>
<li>Reduce the size and increase the speed of various modules, especially
the virtual machine.</li>
<li>Allow "<expr> IN <table>" as a shorthand for
"<expr> IN (SELECT * FROM <table>".</li>
<li>Optimizations to the sqlite_mprintf() routine.</li>
<li>Make sure the MIN() and MAX() optimizations work within subqueries.</li>
</ol></p>
<a name="version_2_8_11"></a>
<h3>2004-01-14 (2.8.11)</h3><p><ol class='lessindent'>
<li>Fix a bug in how the IN operator handles NULLs in subqueries. The bug
was introduced by the previous release.</li>
</ol></p>
<a name="version_2_8_10"></a>
<h3>2004-01-14 (2.8.10)</h3><p><ol class='lessindent'>
<li>Fix a potential database corruption problem on Unix caused by the fact
that all POSIX advisory locks are cleared whenever you close() a file.
The work around it to embargo all close() calls while locks are
outstanding.</li>
<li>Performance enhancements on some corner cases of COUNT(*).</li>
<li>Make sure the in-memory backend response sanely if malloc() fails.</li>
<li>Allow sqlite_exec() to be called from within user-defined SQL
functions.</li>
<li>Improved accuracy of floating-point conversions using "long double".</li>
<li>Bug fixes in the experimental date/time functions.</li>
</ol></p>
<a name="version_2_8_9"></a>
<h3>2004-01-06 (2.8.9)</h3><p><ol class='lessindent'>
<li>Fix a 32-bit integer overflow problem that could result in corrupt
indices in a database if large negative numbers (less than -2147483648)
were inserted into an indexed numeric column.</li>
<li>Fix a locking problem on multi-threaded Linux implementations.</li>
<li>Always use "." instead of "," as the decimal point even if the locale
requests ",".</li>
<li>Added UTC to localtime conversions to the experimental date/time
functions.</li>
<li>Bug fixes to date/time functions.</li>
</ol></p>
<a name="version_2_8_8"></a>
<h3>2003-12-18 (2.8.8)</h3><p><ol class='lessindent'>
<li>Fix a critical bug introduced into 2.8.0 which could cause
database corruption.</li>
<li>Fix a problem with 3-way joins that do not use indices</li>
<li>The VACUUM command now works with the non-callback API</li>
<li>Improvements to the "PRAGMA integrity_check" command</li>
</ol></p>
<a name="version_2_8_7"></a>
<h3>2003-12-04 (2.8.7)</h3><p><ol class='lessindent'>
<li>Added experimental sqlite_bind() and sqlite_reset() APIs.</li>
<li>If the name of the database is an empty string, open a new database
in a temporary file that is automatically deleted when the database
is closed.</li>
<li>Performance enhancements in the <a href="lemon.html">Lemon</a>-generated parser</li>
<li>Experimental date/time functions revised.</li>
<li>Disallow temporary indices on permanent tables.</li>
<li>Documentation updates and typo fixes</li>
<li>Added experimental sqlite_progress_handler() callback API</li>
<li>Removed support for the Oracle8 outer join syntax.</li>
<li>Allow GLOB and LIKE operators to work as functions.</li>
<li>Other minor documentation and makefile changes and bug fixes.</li>
</ol></p>
<a name="version_2_8_6"></a>
<h3>2003-08-22 (2.8.6)</h3><p><ol class='lessindent'>
<li>Moved the CVS repository to www.sqlite.org</li>
<li>Update the NULL-handling documentation.</li>
<li>Experimental date/time functions added.</li>
<li>Bug fix: correctly evaluate a view of a view without segfaulting.</li>
<li>Bug fix: prevent database corruption if you dropped a
trigger that had the same name as a table.</li>
<li>Bug fix: allow a VACUUM (without segfaulting) on an empty
database after setting the EMPTY_RESULT_CALLBACKS pragma.</li>
<li>Bug fix: if an integer value will not fit in a 32-bit int, store it in
a double instead.</li>
<li>Bug fix: Make sure the journal file directory entry is committed to disk
before writing the database file.</li>
</ol></p>
<a name="version_2_8_5"></a>
<h3>2003-07-22 (2.8.5)</h3><p><ol class='lessindent'>
<li>Make LIMIT work on a compound SELECT statement.</li>
<li>LIMIT 0 now shows no rows. Use LIMIT -1 to see all rows.</li>
<li>Correctly handle comparisons between an INTEGER PRIMARY KEY and
a floating point number.</li>
<li>Fix several important bugs in the new ATTACH and DETACH commands.</li>
<li>Updated the <a href="nulls.html">NULL-handling document</a>.</li>
<li>Allow NULL arguments in sqlite_compile() and sqlite_step().</li>
<li>Many minor bug fixes</li>
</ol></p>
<a name="version_2_8_4"></a>
<h3>2003-06-29 (2.8.4)</h3><p><ol class='lessindent'>
<li>Enhanced the "PRAGMA integrity_check" command to verify indices.</li>
<li>Added authorization hooks for the new ATTACH and DETACH commands.</li>
<li>Many documentation updates</li>
<li>Many minor bug fixes</li>
</ol></p>
<a name="version_2_8_3"></a>
<h3>2003-06-04 (2.8.3)</h3><p><ol class='lessindent'>
<li>Fix a problem that will corrupt the indices on a table if you
do an INSERT OR REPLACE or an UPDATE OR REPLACE on a table that
contains an INTEGER PRIMARY KEY plus one or more indices.</li>
<li>Fix a bug in Windows locking code so that locks work correctly
when simultaneously accessed by Win95 and WinNT systems.</li>
<li>Add the ability for INSERT and UPDATE statements to refer to the
"rowid" (or "_rowid_" or "oid") columns.</li>
<li>Other important bug fixes</li>
</ol></p>
<a name="version_2_8_2"></a>
<h3>2003-05-17 (2.8.2)</h3><p><ol class='lessindent'>
<li>Fix a problem that will corrupt the database file if you drop a
table from the main database that has a TEMP index.</li>
</ol></p>
<a name="version_2_8_1"></a>
<h3>2003-05-17 (2.8.1)</h3><p><ol class='lessindent'>
<li>Reactivated the VACUUM command that reclaims unused disk space in
a database file.</li>
<li>Added the ATTACH and DETACH commands to allow interacting with multiple
database files at the same time.</li>
<li>Added support for TEMP triggers and indices.</li>
<li>Added support for in-memory databases.</li>
<li>Removed the experimental sqlite_open_aux_file(). Its function is
subsumed in the new ATTACH command.</li>
<li>The precedence order for ON CONFLICT clauses was changed so that
ON CONFLICT clauses on BEGIN statements have a higher precedence than
ON CONFLICT clauses on constraints.
<li>Many, many bug fixes and compatibility enhancements.</li>
</ol></p>
<a name="version_2_8_0"></a>
<h3>2003-02-16 (2.8.0)</h3><p><ol class='lessindent'>
<li>Modified the journal file format to make it more resistant to corruption
that can occur after an OS crash or power failure.</li>
<li>Added a new C/C++ API that does not use callback for returning data.</li>
</ol></p>
<a name="version_2_7_6"></a>
<h3>2003-01-25 (2.7.6)</h3><p><ol class='lessindent'>
<li>Performance improvements. The library is now much faster.</li>
<li>Added the <b>sqlite_set_authorizer()</b> API. Formal documentation has
not been written - see the source code comments for instructions on
how to use this function.</li>
<li>Fix a bug in the GLOB operator that was preventing it from working
with upper-case letters.</li>
<li>Various minor bug fixes.</li>
</ol></p>
<a name="version_2_7_5"></a>
<h3>2002-12-28 (2.7.5)</h3><p><ol class='lessindent'>
<li>Fix an uninitialized variable in pager.c which could (with a probability
of about 1 in 4 billion) result in a corrupted database.</li>
</ol></p>
<a name="version_2_7_4"></a>
<h3>2002-12-17 (2.7.4)</h3><p><ol class='lessindent'>
<li>Database files can now grow to be up to 2^41 bytes. The old limit
was 2^31 bytes.</li>
<li>The optimizer will now scan tables in the reverse if doing so will
satisfy an ORDER BY ... DESC clause.</li>
<li>The full pathname of the database file is now remembered even if
a relative path is passed into sqlite_open(). This allows
the library to continue operating correctly after a chdir().</li>
<li>Speed improvements in the VDBE.</li>
<li>Lots of little bug fixes.</li>
</ol></p>
<a name="version_2_7_3"></a>
<h3>2002-10-31 (2.7.3)</h3><p><ol class='lessindent'>
<li>Various compiler compatibility fixes.</li>
<li>Fix a bug in the "expr IN ()" operator.</li>
<li>Accept column names in parentheses.</li>
<li>Fix a problem with string memory management in the VDBE</li>
<li>Fix a bug in the "table_info" pragma"</li>
<li>Export the sqlite_function_type() API function in the Windows DLL</li>
<li>Fix locking behavior under Windows</li>
<li>Fix a bug in LEFT OUTER JOIN</li>
</ol></p>
<a name="version_2_7_2"></a>
<h3>2002-09-25 (2.7.2)</h3><p><ol class='lessindent'>
<li>Prevent journal file overflows on huge transactions.</li>
<li>Fix a memory leak that occurred when sqlite_open() failed.</li>
<li>Honor the ORDER BY and LIMIT clause of a SELECT even if the
result set is used for an INSERT.</li>
<li>Do not put write locks on the file used to hold TEMP tables.</li>
<li>Added documentation on SELECT DISTINCT and on how SQLite handles NULLs.</li>
<li>Fix a problem that was causing poor performance when many thousands
of SQL statements were executed by a single sqlite_exec() call.</li>
</ol></p>
<a name="version_2_7_1"></a>
<h3>2002-08-31 (2.7.1)</h3><p><ol class='lessindent'>
<li>Fix a bug in the ORDER BY logic that was introduced in version 2.7.0</li>
<li>C-style comments are now accepted by the tokenizer.</li>
<li>INSERT runs a little faster when the source is a SELECT statement.</li>
</ol></p>
<a name="version_2_7_0"></a>
<h3>2002-08-25 (2.7.0)</h3><p><ol class='lessindent'>
<li>Make a distinction between numeric and text values when sorting.
Text values sort according to memcmp(). Numeric values sort in
numeric order.</li>
<li>Allow multiple simultaneous readers under Windows by simulating
the reader/writers locks that are missing from Win95/98/ME.</li>
<li>An error is now returned when trying to start a transaction if
another transaction is already active.</li>
</ol></p>
<a name="version_2_6_3"></a>
<h3>2002-08-13 (2.6.3)</h3><p><ol class='lessindent'>
<li>Add the ability to read both little-endian and big-endian databases.
So a database created under SunOS or Mac OS X can be read and written
under Linux or Windows and vice versa.</li>
<li>Convert to the new website: https://www.sqlite.org/</li>
<li>Allow transactions to span Linux Threads</li>
<li>Bug fix in the processing of the ORDER BY clause for GROUP BY queries</li>
</ol></p>
<a name="version_2_6_2"></a>
<h3>2002-07-31 (2.6.2)</h3><p><ol class='lessindent'>
<li>Text files read by the COPY command can now have line terminators
of LF, CRLF, or CR.</li>
<li>SQLITE_BUSY is handled correctly if encountered during database
initialization.</li>
<li>Fix to UPDATE triggers on TEMP tables.</li>
<li>Documentation updates.</li>
</ol></p>
<a name="version_2_6_1"></a>
<h3>2002-07-19 (2.6.1)</h3><p><ol class='lessindent'>
<li>Include a static string in the library that responds to the RCS
"ident" command and which contains the library version number.</li>
<li>Fix an assertion failure that occurred when deleting all rows of
a table with the "count_changes" pragma turned on.</li>
<li>Better error reporting when problems occur during the automatic
2.5.6 to 2.6.0 database format upgrade.</li>
</ol></p>
<a name="version_2_6_0"></a>
<h3>2002-07-18 (2.6.0)</h3><p><ol class='lessindent'>
<li>Change the format of indices to correct a design flaw the originated
with version 2.1.0. <font color="red">*** This is an incompatible
file format change ***</font> When version 2.6.0 or later of the
library attempts to open a database file created by version 2.5.6 or
earlier, it will automatically and irreversibly convert the file format.
<b>Make backup copies of older database files before opening them with
version 2.6.0 of the library.</b>
</li>
</ol></p>
<a name="version_2_5_6"></a>
<h3>2002-07-07 (2.5.6)</h3><p><ol class='lessindent'>
<li>Fix more problems with rollback. Enhance the test suite to exercise
the rollback logic extensively in order to prevent any future problems.
</li>
</ol></p>
<a name="version_2_5_5"></a>
<h3>2002-07-06 (2.5.5)</h3><p><ol class='lessindent'>
<li>Fix a bug which could cause database corruption during a rollback.
This bugs was introduced in version 2.4.0 by the freelist
optimization of checkin [410].</li>
<li>Fix a bug in aggregate functions for VIEWs.</li>
<li>Other minor changes and enhancements.</li>
</ol></p>
<a name="version_2_5_4"></a>
<h3>2002-07-01 (2.5.4)</h3><p><ol class='lessindent'>
<li>Make the "AS" keyword optional again.</li>
<li>The datatype of columns now appear in the 4th argument to the
callback.</li>
<li>Added the <b>sqlite_open_aux_file()</b> API, though it is still
mostly undocumented and untested.</li>
<li>Added additional test cases and fixed a few bugs that those
test cases found.</li>
</ol></p>
<a name="version_2_5_3"></a>
<h3>2002-06-25 (2.5.3)</h3><p><ol class='lessindent'>
<li>Bug fix: Database corruption can occur due to the optimization
that was introduced in version 2.4.0 (check-in [410]). The problem
should now be fixed. The use of versions 2.4.0 through 2.5.2 is
not recommended.</li>
</ol></p>
<a name="version_2_5_2"></a>
<h3>2002-06-25 (2.5.2)</h3><p><ol class='lessindent'>
<li>Added the new <b>SQLITE_TEMP_MASTER</b> table which records the schema
for temporary tables in the same way that <b>SQLITE_MASTER</b> does for
persistent tables.</li>
<li>Added an optimization to UNION ALL</li>
<li>Fixed a bug in the processing of LEFT OUTER JOIN</li>
<li>The LIMIT clause now works on subselects</li>
<li>ORDER BY works on subselects</li>
<li>There is a new TypeOf() function used to determine if an expression
is numeric or text.</li>
<li>Autoincrement now works for INSERT from a SELECT.</li>
</ol></p>
<a name="version_2_5_1"></a>
<h3>2002-06-19 (2.5.1)</h3><p><ol class='lessindent'>
<li>The query optimizer now attempts to implement the ORDER BY clause
using an index. Sorting is still used if not suitable index is
available.</li>
</ol></p>
<a name="version_2_5_0"></a>
<h3>2002-06-17 (2.5.0)</h3><p><ol class='lessindent'>
<li>Added support for row triggers.</li>
<li>Added SQL-92 compliant handling of NULLs.</li>
<li>Add support for the full SQL-92 join syntax and LEFT OUTER JOINs.</li>
<li>Double-quoted strings interpreted as column names not text literals.</li>
<li>Parse (but do not implement) foreign keys.</li>
<li>Performance improvements in the parser, pager, and WHERE clause code
generator.</li>
<li>Make the LIMIT clause work on subqueries. (ORDER BY still does not
work, though.)</li>
<li>Added the "%Q" expansion to sqlite_*_printf().</li>
<li>Bug fixes too numerous to mention (see the change log).</li>
</ol></p>
<a name="version_2_4_12"></a>
<h3>2002-05-10 (2.4.12)</h3><p><ol class='lessindent'>
<li>Added logic to detect when the library API routines are called out
of sequence.</li>
</ol></p>
<a name="version_2_4_11"></a>
<h3>2002-05-08 (2.4.11)</h3><p><ol class='lessindent'>
<li>Bug fix: Column names in the result set were not being generated
correctly for some (rather complex) VIEWs. This could cause a
segfault under certain circumstances.</li>
</ol></p>
<a name="version_2_4_10"></a>
<h3>2002-05-03 (2.4.10)</h3><p><ol class='lessindent'>
<li>Bug fix: Generate correct column headers when a compound SELECT is used
as a subquery.</li>
<li>Added the sqlite_encode_binary() and sqlite_decode_binary() functions to
the source tree. But they are not yet linked into the library.</li>
<li>Documentation updates.</li>
<li>Export the sqlite_changes() function from Windows DLLs.</li>
<li>Bug fix: Do not attempt the subquery flattening optimization on queries
that lack a FROM clause. To do so causes a segfault.</li>
</ol></p>
<a name="version_2_4_9"></a>
<h3>2002-04-22 (2.4.9)</h3><p><ol class='lessindent'>
<li>Fix a bug that was causing the precompiled binary of SQLITE.EXE to
report "out of memory" under Windows 98.</li>
</ol></p>
<a name="version_2_4_8"></a>
<h3>2002-04-20 (2.4.8)</h3><p><ol class='lessindent'>
<li>Make sure VIEWs are created after their corresponding TABLEs in the
output of the <b>.dump</b> command in the shell.</li>
<li>Speed improvements: Do not do synchronous updates on TEMP tables.</li>
<li>Many improvements and enhancements to the shell.</li>
<li>Make the GLOB and LIKE operators functions that can be overridden
by a programmer. This allows, for example, the LIKE operator to
be changed to be case sensitive.</li>
</ol></p>
<a name="version_2_4_7"></a>
<h3>2002-04-12 (2.4.7)</h3><p><ol class='lessindent'>
<li>Add the ability to put TABLE.* in the column list of a
SELECT statement.</li>
<li>Permit SELECT statements without a FROM clause.</li>
<li>Added the <b>last_insert_rowid()</b> SQL function.</li>
<li>Do not count rows where the IGNORE conflict resolution occurs in
the row count.</li>
<li>Make sure functions expressions in the VALUES clause of an INSERT
are correct.</li>
<li>Added the <b>sqlite_changes()</b> API function to return the number
of row that changed in the most recent operation.</li>
</ol></p>
<a name="version_2_4_6"></a>
<h3>2002-04-02 (2.4.6)</h3><p><ol class='lessindent'>
<li>Bug fix: Correctly handle terms in the WHERE clause of a join that
do not contain a comparison operator.</li>
</ol></p>
<a name="version_2_4_5"></a>
<h3>2002-04-02 (2.4.5)</h3><p><ol class='lessindent'>
<li>Bug fix: Correctly handle functions that appear in the WHERE clause
of a join.</li>
<li>When the PRAGMA vdbe_trace=ON is set, correctly print the P3 operand
value when it is a pointer to a structure rather than a pointer to
a string.</li>
<li>When inserting an explicit NULL into an INTEGER PRIMARY KEY, convert
the NULL value into a unique key automatically.</li>
</ol></p>
<a name="version_2_4_4"></a>
<h3>2002-03-30 (2.4.4)</h3><p><ol class='lessindent'>
<li>Allow "VIEW" to be a column name</li>
<li>Added support for CASE expressions (patch from Dan Kennedy)</li>
<li>Added RPMS to the delivery (patches from Doug Henry)</li>
<li>Fix typos in the documentation</li>
<li>Cut over configuration management to a new CVS repository with
its own CVSTrac bug tracking system.</li>
</ol></p>
<a name="version_2_4_3"></a>
<h3>2002-03-23 (2.4.3)</h3><p><ol class='lessindent'>
<li>Fix a bug in SELECT that occurs when a compound SELECT is used as a
subquery in the FROM of a SELECT.</li>
<li>The <b>sqlite_get_table()</b> function now returns an error if you
give it two or more SELECTs that return different numbers of columns.</li>
</ol></p>
<a name="version_2_4_2"></a>
<h3>2002-03-20 (2.4.2)</h3><p><ol class='lessindent'>
<li>Bug fix: Fix an assertion failure that occurred when ROWID was a column
in a SELECT statement on a view.</li>
<li>Bug fix: Fix an uninitialized variable in the VDBE that would could an
assert failure.</li>
<li>Make the os.h header file more robust in detecting when the compile is
for Windows and when it is for Unix.</li>
</ol></p>
<a name="version_2_4_1"></a>
<h3>2002-03-13 (2.4.1)</h3><p><ol class='lessindent'>
<li>Using an unnamed subquery in a FROM clause would cause a segfault.</li>
<li>The parser now insists on seeing a semicolon or the end of input before
executing a statement. This avoids an accidental disaster if the
WHERE keyword is misspelled in an UPDATE or DELETE statement.</li>
</ol></p>
<a name="version_2_4_0"></a>
<h3>2002-03-11 (2.4.0)</h3><p><ol class='lessindent'>
<li>Change the name of the sanity_check PRAGMA to <b>integrity_check</b>
and make it available in all compiles.</li>
<li>SELECT min() or max() of an indexed column with no WHERE or GROUP BY
clause is handled as a special case which avoids a complete table scan.</li>
<li>Automatically generated ROWIDs are now sequential.</li>
<li>Do not allow dot-commands of the command-line shell to occur in the
middle of a real SQL command.</li>
<li>Modifications to the <a href="lemon.html">Lemon parser generator</a> so that the parser tables
are 4 times smaller.</li>
<li>Added support for user-defined functions implemented in C.</li>
<li>Added support for new functions: <b>coalesce()</b>, <b>lower()</b>,
<b>upper()</b>, and <b>random()</b>
<li>Added support for VIEWs.</li>
<li>Added the subquery flattening optimizer.</li>
<li>Modified the B-Tree and Pager modules so that disk pages that do not
contain real data (free pages) are not journaled and are not
written from memory back to the disk when they change. This does not
impact database integrity, since the
pages contain no real data, but it does make large INSERT operations
about 2.5 times faster and large DELETEs about 5 times faster.</li>
<li>Made the CACHE_SIZE pragma persistent</li>
<li>Added the SYNCHRONOUS pragma</li>
<li>Fixed a bug that was causing updates to fail inside of transactions when
the database contained a temporary table.</li>
</ol></p>
<a name="version_2_3_3"></a>
<h3>2002-02-19 (2.3.3)</h3><p><ol class='lessindent'>
<li>Allow identifiers to be quoted in square brackets, for compatibility
with MS-Access.</li>
<li>Added support for sub-queries in the FROM clause of a SELECT.</li>
<li>More efficient implementation of sqliteFileExists() under Windows.
(by Joel Luscy)</li>
<li>The VALUES clause of an INSERT can now contain expressions, including
scalar SELECT clauses.</li>
<li>Added support for CREATE TABLE AS SELECT</li>
<li>Bug fix: Creating and dropping a table all within a single
transaction was not working.</li>
</ol></p>
<a name="version_2_3_2"></a>
<h3>2002-02-14 (2.3.2)</h3><p><ol class='lessindent'>
<li>Bug fix: There was an incorrect assert() in pager.c. The real code was
all correct (as far as is known) so everything should work OK if you
compile with -DNDEBUG=1. When asserts are not disabled, there
could be a fault.</li>
</ol></p>
<a name="version_2_3_1"></a>
<h3>2002-02-13 (2.3.1)</h3><p><ol class='lessindent'>
<li>Bug fix: An assertion was failing if "PRAGMA full_column_names=ON;" was
set and you did a query that used a rowid, like this:
"SELECT rowid, * FROM ...".</li>
</ol></p>
<a name="version_2_3_0"></a>
<h3>2002-02-03 (2.3.0)</h3><p><ol class='lessindent'>
<li>Fix a serious bug in the INSERT command which was causing data to go
into the wrong columns if the data source was a SELECT and the INSERT
clauses specified its columns in some order other than the default.</li>
<li>Added the ability to resolve constraint conflicts is ways other than
an abort and rollback. See the documentation on the "ON CONFLICT"
clause for details.</li>
<li>Temporary files are now automatically deleted by the operating system
when closed. There are no more dangling temporary files on a program
crash. (If the OS crashes, fsck will delete the file after reboot
under Unix. I do not know what happens under Windows.)</li>
<li>NOT NULL constraints are honored.</li>
<li>The COPY command puts NULLs in columns whose data is '\N'.</li>
<li>In the COPY command, backslash can now be used to escape a newline.</li>
<li>Added the SANITY_CHECK pragma.</li>
</ol></p>
<a name="version_2_2_5"></a>
<h3>2002-01-28 (2.2.5)</h3><p><ol class='lessindent'>
<li>Important bug fix: the IN operator was not working if either the
left-hand or right-hand side was derived from an INTEGER PRIMARY KEY.</li>
<li>Do not escape the backslash '\' character in the output of the
<b>sqlite</b> command-line access program.</li>
</ol></p>
<a name="version_2_2_4"></a>
<h3>2002-01-22 (2.2.4)</h3><p><ol class='lessindent'>
<li>The label to the right of an AS in the column list of a SELECT can now
be used as part of an expression in the WHERE, ORDER BY, GROUP BY, and/or
HAVING clauses.</li>
<li>Fix a bug in the <b>-separator</b> command-line option to the <b>sqlite</b>
command.</li>
<li>Fix a problem with the sort order when comparing upper-case strings against
characters greater than 'Z' but less than 'a'.</li>
<li>Report an error if an ORDER BY or GROUP BY expression is constant.</li>
</ol></p>
<a name="version_2_2_3"></a>
<h3>2002-01-16 (2.2.3)</h3><p><ol class='lessindent'>
<li>Fix warning messages in VC++ 7.0. (Patches from nicolas352001)</li>
<li>Make the library thread-safe. (The code is there and appears to work
but has not been stressed.)</li>
<li>Added the new <b>sqlite_last_insert_rowid()</b> API function.</li>
</ol></p>
<a name="version_2_2_2"></a>
<h3>2002-01-14 (2.2.2)</h3><p><ol class='lessindent'>
<li>Bug fix: An assertion was failing when a temporary table with an index
had the same name as a permanent table created by a separate process.</li>
<li>Bug fix: Updates to tables containing an INTEGER PRIMARY KEY and an
index could fail.</li>
</ol></p>
<a name="version_2_2_1"></a>
<h3>2002-01-09 (2.2.1)</h3><p><ol class='lessindent'>
<li>Bug fix: An attempt to delete a single row of a table with a WHERE
clause of "ROWID=x" when no such rowid exists was causing an error.</li>
<li>Bug fix: Passing in a NULL as the 3rd parameter to <b>sqlite_open()</b>
would sometimes cause a coredump.</li>
<li>Bug fix: DROP TABLE followed by a CREATE TABLE with the same name all
within a single transaction was causing a coredump.</li>
<li>Makefile updates from A. Rottmann</li>
</ol></p>
<a name="version_2_2_0"></a>
<h3>2001-12-22 (2.2.0)</h3><p><ol class='lessindent'>
<li>Columns of type INTEGER PRIMARY KEY are actually used as the primary
key in underlying B-Tree representation of the table.</li>
<li>Several obscure, unrelated bugs were found and fixed while
implemented the integer primary key change of the previous bullet.</li>
<li>Added the ability to specify "*" as part of a larger column list in
the result section of a SELECT statement. For example:
<nobr>"<b>SELECT rowid, * FROM table1;</b>"</nobr>.</li>
<li>Updates to comments and documentation.</li>
</ol></p>
<a name="version_2_1_7"></a>
<h3>2001-12-15 (2.1.7)</h3><p><ol class='lessindent'>
<li>Fix a bug in <b>CREATE TEMPORARY TABLE</b> which was causing the
table to be initially allocated in the main database file instead
of in the separate temporary file. This bug could cause the library
to suffer an assertion failure and it could cause "page leaks" in the
main database file.
<li>Fix a bug in the b-tree subsystem that could sometimes cause the first
row of a table to be repeated during a database scan.</li>
</ol></p>
<a name="version_2_1_6"></a>
<h3>2001-12-14 (2.1.6)</h3><p><ol class='lessindent'>
<li>Fix the locking mechanism yet again to prevent
<b>sqlite_exec()</b> from returning SQLITE_PROTOCOL
unnecessarily. This time the bug was a race condition in
the locking code. This change affects both POSIX and Windows users.</li>
</ol></p>
<a name="version_2_1_5"></a>
<h3>2001-12-06 (2.1.5)</h3><p><ol class='lessindent'>
<li>Fix for another problem (unrelated to the one fixed in 2.1.4)
that sometimes causes <b>sqlite_exec()</b> to return SQLITE_PROTOCOL
unnecessarily. This time the bug was
in the POSIX locking code and should not effect Windows users.</li>
</ol></p>
<a name="version_2_1_4"></a>
<h3>2001-12-05 (2.1.4)</h3><p><ol class='lessindent'>
<li>Sometimes <b>sqlite_exec()</b> would return SQLITE_PROTOCOL when it
should have returned SQLITE_BUSY.</li>
<li>The fix to the previous bug uncovered a deadlock which was also
fixed.</li>
<li>Add the ability to put a single .command in the second argument
of the sqlite shell</li>
<li>Updates to the FAQ</li>
</ol></p>
<a name="version_2_1_3"></a>
<h3>2001-11-24 (2.1.3)</h3><p><ol class='lessindent'>
<li>Fix the behavior of comparison operators
(ex: "<b><</b>", "<b>==</b>", etc.)
so that they are consistent with the order of entries in an index.</li>
<li>Correct handling of integers in SQL expressions that are larger than
what can be represented by the machine integer.</li>
</ol></p>
<a name="version_2_1_2"></a>
<h3>2001-11-23 (2.1.2)</h3><p><ol class='lessindent'>
<li>Changes to support 64-bit architectures.</li>
<li>Fix a bug in the locking protocol.</li>
<li>Fix a bug that could (rarely) cause the database to become
unreadable after a DROP TABLE due to corruption to the SQLITE_MASTER
table.</li>
<li>Change the code so that version 2.1.1 databases that were rendered
unreadable by the above bug can be read by this version of
the library even though the SQLITE_MASTER table is (slightly)
corrupted.</li>
</ol></p>
<a name="version_2_1_1"></a>
<h3>2001-11-13 (2.1.1)</h3><p><ol class='lessindent'>
<li>Bug fix: Sometimes arbitrary strings were passed to the callback
function when the actual value of a column was NULL.</li>
</ol></p>
<a name="version_2_1_0"></a>
<h3>2001-11-12 (2.1.0)</h3><p><ol class='lessindent'>
<li>Change the format of data records so that records up to 16MB in size
can be stored.</li>
<li>Change the format of indices to allow for better query optimization.</li>
<li>Implement the "LIMIT ... OFFSET ..." clause on SELECT statements.</li>
</ol></p>
<a name="version_2_0_8"></a>
<h3>2001-11-03 (2.0.8)</h3><p><ol class='lessindent'>
<li>Made selected parameters in API functions <b>const</b>. This should
be fully backwards compatible.</li>
<li>Documentation updates</li>
<li>Simplify the design of the VDBE by restricting the number of sorters
and lists to 1.
In practice, no more than one sorter and one list was ever used anyhow.
</li>
</ol></p>
<a name="version_2_0_7"></a>
<h3>2001-10-22 (2.0.7)</h3><p><ol class='lessindent'>
<li>Any UTF-8 character or ISO8859 character can be used as part of
an identifier.</li>
<li>Patches from Christian Werner to improve ODBC compatibility and to
fix a bug in the round() function.</li>
<li>Plug some memory leaks that use to occur if malloc() failed.
We have been and continue to be memory leak free as long as
malloc() works.</li>
<li>Changes to some test scripts so that they work on Windows in
addition to Unix.</li>
</ol></p>
<a name="version_2_0_6"></a>
<h3>2001-10-19 (2.0.6)</h3><p><ol class='lessindent'>
<li>Added the EMPTY_RESULT_CALLBACKS pragma</li>
<li>Support for UTF-8 and ISO8859 characters in column and table names.</li>
<li>Bug fix: Compute correct table names with the FULL_COLUMN_NAMES pragma
is turned on.</li>
</ol></p>
<a name="version_2_0_5"></a>
<h3>2001-10-15 (2.0.5)</h3><p><ol class='lessindent'>
<li>Added the COUNT_CHANGES pragma.</li>
<li>Changes to the FULL_COLUMN_NAMES pragma to help out the ODBC driver.</li>
<li>Bug fix: "SELECT count(*)" was returning NULL for empty tables.
Now it returns 0.</li>
</ol></p>
<a name="version_2_0_4"></a>
<h3>2001-10-13 (2.0.4)</h3><p><ol class='lessindent'>
<li>Bug fix: an obscure and relatively harmless bug was causing one of
the tests to fail when gcc optimizations are turned on. This release
fixes the problem.</li>
</ol></p>
<a name="version_2_0_3"></a>
<h3>2001-10-13 (2.0.3)</h3><p><ol class='lessindent'>
<li>Bug fix: the <b>sqlite_busy_timeout()</b> function was delaying 1000
times too long before failing.</li>
<li>Bug fix: an assertion was failing if the disk holding the database
file became full or stopped accepting writes for some other reason.
New tests were added to detect similar problems in the future.</li>
<li>Added new operators: <b>&</b> (bitwise-and)
<b>|</b> (bitwise-or), <b>~</b> (ones-complement),
<b><<</b> (shift left), <b>>></b> (shift right).</li>
<li>Added new functions: <b>round()</b> and <b>abs()</b>.</li>
</ol></p>
<a name="version_2_0_2"></a>
<h3>2001-10-09 (2.0.2)</h3><p><ol class='lessindent'>
<li>Fix two bugs in the locking protocol. (One was masking the other.)</li>
<li>Removed some unused "#include <unistd.h>" that were causing problems
for VC++.</li>
<li>Fixed <b>sqlite.h</b> so that it is usable from C++</li>
<li>Added the FULL_COLUMN_NAMES pragma. When set to "ON", the names of
columns are reported back as TABLE.COLUMN instead of just COLUMN.</li>
<li>Added the TABLE_INFO() and INDEX_INFO() pragmas to help support the
ODBC interface.</li>
<li>Added support for TEMPORARY tables and indices.</li>
</ol></p>
<a name="version_2_0_1"></a>
<h3>2001-10-02 (2.0.1)</h3><p><ol class='lessindent'>
<li>Remove some C++ style comments from btree.c so that it will compile
using compilers other than gcc.</li>
<li>The ".dump" output from the shell does not work if there are embedded
newlines anywhere in the data. This is an old bug that was carried
forward from version 1.0. To fix it, the ".dump" output no longer
uses the COPY command. It instead generates INSERT statements.</li>
<li>Extend the expression syntax to support "expr NOT NULL" (with a
space between the "NOT" and the "NULL") in addition to "expr NOTNULL"
(with no space).</li>
</ol></p>
<a name="version_2_0_0"></a>
<h3>2001-09-28 (2.0.0)</h3><p><ol class='lessindent'>
<li>Automatically build binaries for Linux and Windows and put them on
the website.</li>
</ol></p>
<h3>2001-09-28 (2.0-alpha-4)</h3><p><ol class='lessindent'>
<li>Incorporate makefile patches form A. Rottmann to use LIBTOOL</li>
</ol></p>
<h3>2001-09-27 (2.0-alpha-3)</h3><p><ol class='lessindent'>
<li>SQLite now honors the UNIQUE keyword in CREATE UNIQUE INDEX. Primary
keys are required to be unique.</li>
<li>File format changed back to what it was for alpha-1</li>
<li>Fixes to the rollback and locking behavior</li>
</ol></p>
<h3>2001-09-20 (2.0-alpha-2)</h3><p><ol class='lessindent'>
<li>Initial release of version 2.0. The idea of renaming the library
to "SQLus" was abandoned in favor of keeping the "SQLite" name and
bumping the major version number.</li>
<li>The pager and btree subsystems added back. They are now the only
available backend.</li>
<li>The Dbbe abstraction and the GDBM and memory drivers were removed.</li>
<li>Copyright on all code was disclaimed. The library is now in the
public domain.</li>
</ol></p>
<a name="version_1_0_32"></a>
<h3>2001-07-23 (1.0.32)</h3><p><ol class='lessindent'>
<li>Pager and btree subsystems removed. These will be used in a follow-on
SQL server library named "SQLus".</li>
<li>Add the ability to use quoted strings as table and column names in
expressions.</li>
</ol></p>
<a name="version_1_0_31"></a>
<h3>2001-04-15 (1.0.31)</h3><p><ol class='lessindent'>
<li>Pager subsystem added but not yet used.</li>
<li>More robust handling of out-of-memory errors.</li>
<li>New tests added to the test suite.</li>
</ol></p>
<a name="version_1_0_30"></a>
<h3>2001-04-06 (1.0.30)</h3><p><ol class='lessindent'>
<li>Remove the <b>sqlite_encoding</b> TCL variable that was introduced
in the previous version.</li>
<li>Add options <b>-encoding</b> and <b>-tcl-uses-utf</b> to the
<b>sqlite</b> TCL command.</li>
<li>Add tests to make sure that tclsqlite was compiled using Tcl header
files and libraries that match.</li>
</ol></p>
<a name="version_1_0_29"></a>
<h3>2001-04-05 (1.0.29)</h3><p><ol class='lessindent'>
<li>The library now assumes data is stored as UTF-8 if the --enable-utf8
option is given to configure. The default behavior is to assume
iso8859-x, as it has always done. This only makes a difference for
LIKE and GLOB operators and the LENGTH and SUBSTR functions.</li>
<li>If the library is not configured for UTF-8 and the Tcl library
is one of the newer ones that uses UTF-8 internally,
then a conversion from UTF-8 to iso8859 and
back again is done inside the TCL interface.</li>
</ol></p>
<a name="version_1_0_28"></a>
<h3>2001-04-04 (1.0.28)</h3><p><ol class='lessindent'>
<li>Added limited support for transactions. At this point, transactions
will do table locking on the GDBM backend. There is no support (yet)
for rollback or atomic commit.</li>
<li>Added special column names ROWID, OID, and _ROWID_ that refer to the
unique random integer key associated with every row of every table.</li>
<li>Additional tests added to the regression suite to cover the new ROWID
feature and the TCL interface bugs mentioned below.</li>
<li>Changes to the <a href="lemon.html">Lemon parser generator</a> to help it work better when
compiled using MSVC.</li>
<li>Bug fixes in the TCL interface identified by Oleg Oleinick.</li>
</ol></p>
<a name="version_1_0_27"></a>
<h3>2001-03-20 (1.0.27)</h3><p><ol class='lessindent'>
<li>When doing DELETE and UPDATE, the library used to write the record
numbers of records to be deleted or updated into a temporary file.
This is changed so that the record numbers are held in memory.</li>
<li>The DELETE command without a WHILE clause just removes the database
files from the disk, rather than going through and deleting record
by record.</li>
</ol></p>
<a name="version_1_0_26"></a>
<h3>2001-03-20 (1.0.26)</h3><p><ol class='lessindent'>
<li>A serious bug fixed on Windows. Windows users should upgrade.
No impact to Unix.</li>
</ol></p>
<a name="version_1_0_25"></a>
<h3>2001-03-15 (1.0.25)</h3><p><ol class='lessindent'>
<li>Modify the test scripts to identify tests that depend on system
load and processor speed and
to warn the user that a failure of one of those (rare) tests does
not necessarily mean the library is malfunctioning. No changes to
code.
</li>
</ol></p>
<a name="version_1_0_24"></a>
<h3>2001-03-14 (1.0.24)</h3><p><ol class='lessindent'>
<li>Fix a bug which was causing
the UPDATE command to fail on systems where "malloc(0)" returns
NULL. The problem does not appear on Windows, Linux, or HPUX but does
cause the library to fail on QNX.
</li>
</ol></p>
<a name="version_1_0_23"></a>
<h3>2001-02-20 (1.0.23)</h3><p><ol class='lessindent'>
<li>An unrelated (and minor) bug from Mark Muranwski fixed. The algorithm
for figuring out where to put temporary files for a "memory:" database
was not working quite right.
</li>
</ol></p>
<a name="version_1_0_22"></a>
<h3>2001-02-19 (1.0.22)</h3><p><ol class='lessindent'>
<li>The previous fix was not quite right. This one seems to work better.
</li>
</ol></p>
<a name="version_1_0_21"></a>
<h3>2001-02-19 (1.0.21)</h3><p><ol class='lessindent'>
<li>The UPDATE statement was not working when the WHERE clause contained
some terms that could be satisfied using indices and other terms that
could not. Fixed.</li>
</ol></p>
<a name="version_1_0_20"></a>
<h3>2001-02-11 (1.0.20)</h3><p><ol class='lessindent'>
<li>Merge development changes into the main trunk. Future work toward
using a BTree file structure will use a separate CVS source tree. This
CVS tree will continue to support the GDBM version of SQLite only.</li>
</ol></p>
<a name="version_1_0_19"></a>
<h3>2001-02-06 (1.0.19)</h3><p><ol class='lessindent'>
<li>Fix a strange (but valid) C declaration that was causing problems
for QNX. No logical changes.</li>
</ol></p>
<a name="version_1_0_18"></a>
<h3>2001-01-04 (1.0.18)</h3><p><ol class='lessindent'>
<li>Print the offending SQL statement when an error occurs.</li>
<li>Do not require commas between constraints in CREATE TABLE statements.</li>
<li>Added the "-echo" option to the shell.</li>
<li>Changes to comments.</li>
</ol></p>
<a name="version_1_0_17"></a>
<h3>2000-12-10 (1.0.17)</h3><p><ol class='lessindent'>
<li>Rewrote <b>sqlite_complete()</b> to make it faster.</li>
<li>Minor tweaks to other code to make it run a little faster.</li>
<li>Added new tests for <b>sqlite_complete()</b> and for memory leaks.</li>
</ol></p>
<a name="version_1_0_16"></a>
<h3>2000-11-28 (1.0.16)</h3><p><ol class='lessindent'>
<li>Documentation updates. Mostly fixing of typos and spelling errors.</li>
</ol></p>
<a name="version_1_0_15"></a>
<h3>2000-10-23 (1.0.15)</h3><p><ol class='lessindent'>
<li>Documentation updates</li>
<li>Some sanity checking code was removed from the inner loop of vdbe.c
to help the library to run a little faster. The code is only
removed if you compile with -DNDEBUG.</li>
</ol></p>
<a name="version_1_0_14"></a>
<h3>2000-10-19 (1.0.14)</h3><p><ol class='lessindent'>
<li>Added a "memory:" backend driver that stores its database in an
in-memory hash table.</li>
</ol></p>
<a name="version_1_0_13"></a>
<h3>2000-10-19 (1.0.13)</h3><p><ol class='lessindent'>
<li>Break out the GDBM driver into a separate file in anticipation
to added new drivers.</li>
<li>Allow the name of a database to be prefixed by the driver type.
For now, the only driver type is "gdbm:".</li>
</ol></p>
<a name="version_1_0_12"></a>
<h3>2000-10-17 (1.0.12)</h3><p><ol class='lessindent'>
<li>Fixed an off-by-one error that was causing a coredump in
the '%q' format directive of the new
<b>sqlite_..._printf()</b> routines.</li>
<li>Added the <b>sqlite_interrupt()</b> interface.</li>
<li>In the shell, <b>sqlite_interrupt()</b> is invoked when the
user presses Control-C</li>
<li>Fixed some instances where <b>sqlite_exec()</b> was
returning the wrong error code.</li>
</ol></p>
<a name="version_1_0_10"></a>
<h3>2000-10-11 (1.0.10)</h3><p><ol class='lessindent'>
<li>Added notes on how to compile for Windows95/98.</li>
<li>Removed a few variables that were not being used. Etc.</li>
</ol></p>
<a name="version_1_0_9"></a>
<h3>2000-10-09 (1.0.9)</h3><p><ol class='lessindent'>
<li>Added the <b>sqlite_..._printf()</b> interface routines.</li>
<li>Modified the <b>sqlite</b> shell program to use the new interface
routines.</li>
<li>Modified the <b>sqlite</b> shell program to print the schema for
the built-in SQLITE_MASTER table, if explicitly requested.</li>
</ol></p>
<a name="version_1_0_8"></a>
<h3>2000-09-30 (1.0.8)</h3><p><ol class='lessindent'>
<li>Begin writing documentation on the TCL interface.</li>
</ol></p>
<h3>2000-09-29 (Not Released)</h3><p><ol class='lessindent'>
<li>Added the <b>sqlite_get_table()</b> API</li>
<li>Updated the documentation for due to the above change.</li>
<li>Modified the <b>sqlite</b> shell to make use of the new
sqlite_get_table() API in order to print a list of tables
in multiple columns, similar to the way "ls" prints filenames.</li>
<li>Modified the <b>sqlite</b> shell to print a semicolon at the
end of each CREATE statement in the output of the ".schema" command.</li>
</ol></p>
<h3>2000-09-21 (Not Released)</h3><p><ol class='lessindent'>
<li>Change the tclsqlite "eval" method to return a list of results if
no callback script is specified.</li>
<li>Change tclsqlite.c to use the Tcl_Obj interface</li>
<li>Add tclsqlite.c to the libsqlite.a library</li>
</ol></p>
<a name="version_1_0_5"></a>
<h3>2000-09-14 (1.0.5)</h3><p><ol class='lessindent'>
<li>Changed the print format for floating point values from "%g" to "%.15g".
</li>
<li>Changed the comparison function so that numbers in exponential notation
(ex: 1.234e+05) sort in numerical order.</li>
</ol></p>
<a name="version_1_0_4"></a>
<h3>2000-08-28 (1.0.4)</h3><p><ol class='lessindent'>
<li>Added functions <b>length()</b> and <b>substr()</b>.</li>
<li>Fix a bug in the <b>sqlite</b> shell program that was causing
a coredump when the output mode was "column" and the first row
of data contained a NULL.</li>
</ol></p>
<a name="version_1_0_3"></a>
<h3>2000-08-22 (1.0.3)</h3><p><ol class='lessindent'>
<li>In the sqlite shell, print the "Database opened READ ONLY" message
to stderr instead of stdout.</li>
<li>In the sqlite shell, now print the version number on initial startup.</li>
<li>Add the <b>sqlite_version[]</b> string constant to the library</li>
<li>Makefile updates</li>
<li>Bug fix: incorrect VDBE code was being generated for the following
circumstance: a query on an indexed table containing a WHERE clause with
an IN operator that had a subquery on its right-hand side.</li>
</ol></p>
<a name="version_1_0_1"></a>
<h3>2000-08-18 (1.0.1)</h3><p><ol class='lessindent'>
<li>Fix a bug in the configure script.</li>
<li>Minor revisions to the website.</li>
</ol></p>
<a name="version_1_0"></a>
<h3>2000-08-17 (1.0)</h3><p><ol class='lessindent'>
<li>Change the <b>sqlite</b> program so that it can read
databases for which it lacks write permission. (It used to
refuse all access if it could not write.)</li>
</ol></p>
<h3>2000-08-09</h3><p><ol class='lessindent'>
<li>Treat carriage returns as white space.</li>
</ol></p>
<h3>2000-08-08</h3><p><ol class='lessindent'>
<li>Added pattern matching to the ".table" command in the "sqlite"
command shell.</li>
</ol></p>
<h3>2000-08-04</h3><p><ol class='lessindent'>
<li>Documentation updates</li>
<li>Added "busy" and "timeout" methods to the Tcl interface</li>
</ol></p>
<h3>2000-08-03</h3><p><ol class='lessindent'>
<li>File format version number was being stored in sqlite_master.tcl
multiple times. This was harmless, but unnecessary. It is now fixed.</li>
</ol></p>
<h3>2000-08-02</h3><p><ol class='lessindent'>
<li>The file format for indices was changed slightly in order to work
around an inefficiency that can sometimes come up with GDBM when
there are large indices having many entries with the same key.
<font color="red">** Incompatible Change **</font></li>
</ol></p>
<h3>2000-08-01</h3><p><ol class='lessindent'>
<li>The parser's stack was overflowing on a very long UPDATE statement.
This is now fixed.</li>
</ol></p>
<h3>2000-07-31</h3><p><ol class='lessindent'>
<li>Finish the <a href="vdbe.html">VDBE tutorial</a>.</li>
<li>Added documentation on compiling to WinNT.</li>
<li>Fix a configuration program for WinNT.</li>
<li>Fix a configuration problem for HPUX.</li>
</ol></p>
<h3>2000-07-29</h3><p><ol class='lessindent'>
<li>Better labels on column names of the result.</li>
</ol></p>
<h3>2000-07-28</h3><p><ol class='lessindent'>
<li>Added the <b>sqlite_busy_handler()</b>
and <b>sqlite_busy_timeout()</b> interface.</li>
</ol></p>
<h3>2000-06-23</h3><p><ol class='lessindent'>
<li>Begin writing the <a href="vdbe.html">VDBE tutorial</a>.</li>
</ol></p>
<h3>2000-06-21</h3><p><ol class='lessindent'>
<li>Clean up comments and variable names. Changes to documentation.
No functional changes to the code.</li>
</ol></p>
<h3>2000-06-19</h3><p><ol class='lessindent'>
<li>Column names in UPDATE statements were case sensitive.
This mistake has now been fixed.</li>
</ol></p>
<h3>2000-06-18</h3><p><ol class='lessindent'>
<li>Added the concatenate string operator (||)</li>
</ol></p>
<h3>2000-06-12</h3><p><ol class='lessindent'>
<li>Added the fcnt() function to the SQL interpreter. The fcnt() function
returns the number of database "Fetch" operations that have occurred.
This function is designed for use in test scripts to verify that
queries are efficient and appropriately optimized. Fcnt() has no other
useful purpose, as far as I know.</li>
<li>Added a bunch more tests that take advantage of the new fcnt() function.
The new tests did not uncover any new problems.</li>
</ol></p>
<h3>2000-06-08</h3><p><ol class='lessindent'>
<li>Added lots of new test cases</li>
<li>Fix a few bugs discovered while adding test cases</li>
<li>Begin adding lots of new documentation</li>
</ol></p>
<h3>2000-06-06</h3><p><ol class='lessindent'>
<li>Added compound select operators: <B>UNION</b>, <b>UNION ALL</B>,
<b>INTERSECT</b>, and <b>EXCEPT</b></li>
<li>Added support for using <b>(SELECT ...)</b> within expressions</li>
<li>Added support for <b>IN</b> and <b>BETWEEN</b> operators</li>
<li>Added support for <b>GROUP BY</b> and <b>HAVING</b></li>
<li>NULL values are now reported to the callback as a NULL pointer
rather than an empty string.</li>
</ol></p>
<h3>2000-06-03</h3><p><ol class='lessindent'>
<li>Added support for default values on columns of a table.</li>
<li>Improved test coverage. Fixed a few obscure bugs found by the
improved tests.</li>
</ol></p>
<h3>2000-06-02</h3><p><ol class='lessindent'>
<li>All database files to be modified by an UPDATE, INSERT or DELETE are
now locked before any changes are made to any files.
This makes it safe (I think) to access
the same database simultaneously from multiple processes.</li>
<li>The code appears stable so we are now calling it "beta".</li>
</ol></p>
<h3>2000-06-01</h3><p><ol class='lessindent'>
<li>Better support for file locking so that two or more processes
(or threads)
can access the same database simultaneously. More work needed in
this area, though.</li>
</ol></p>
<h3>2000-05-31</h3><p><ol class='lessindent'>
<li>Added support for aggregate functions (Ex: <b>COUNT(*)</b>, <b>MIN(...)</b>)
to the SELECT statement.</li>
<li>Added support for <B>SELECT DISTINCT ...</B></li>
</ol></p>
<h3>2000-05-30</h3><p><ol class='lessindent'>
<li>Added the <b>LIKE</b> operator.</li>
<li>Added a <b>GLOB</b> operator: similar to <B>LIKE</B>
but it uses Unix shell globbing wildcards instead of the '%'
and '_' wildcards of SQL.</li>
<li>Added the <B>COPY</b> command patterned after
<a href="http://www.postgresql.org/">PostgreSQL</a> so that SQLite
can now read the output of the <b>pg_dump</b> database dump utility
of PostgreSQL.</li>
<li>Added a <B>VACUUM</B> command that calls the
<b>gdbm_reorganize()</b> function on the underlying database
files.</li>
<li>And many, many bug fixes...</li>
</ol></p>
<h3>2000-05-29</h3><p><ol class='lessindent'>
<li>Initial Public Release of Alpha code</li>
</ol></p>
</dl>
|