Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | Merge updates from trunk. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | vs2017 |
Files: | files | file ages | folders |
SHA1: |
37be32bdd4931fda8839d6938d652e17 |
User & Date: | mistachkin 2017-09-28 18:14:54 |
2017-09-28
| ||
18:21 | Update version history docs. check-in: b60b6e8290 user: mistachkin tags: vs2017 | |
18:14 | Merge updates from trunk. check-in: 37be32bdd4 user: mistachkin tags: vs2017 | |
2017-09-16
| ||
06:21 | Update several tests for ticket [b167206ad3] to use the 'DECIMALTEXT' and 'NUMERICTEXT' type mappings. check-in: 5032831744 user: mistachkin tags: trunk | |
2017-08-07
| ||
20:50 | Maintainability improvements to registry handling in the design-time components installer. check-in: 7529b275e1 user: mistachkin tags: vs2017 | |
Changes to Doc/Extra/Provider/version.html.
39 39 </td> 40 40 </tr> 41 41 </table> 42 42 </div> 43 43 <div id="mainSection"> 44 44 <div id="mainBody"> 45 45 <h1 class="heading">Version History</h1> 46 - <p><b>1.0.106.0 - August XX, 2017 <font color="red">(release scheduled)</font></b></p> 46 + <p><b>1.0.106.0 - September XX, 2017 <font color="red">(release scheduled)</font></b></p> 47 47 <ul> 48 - <li>Updated to <a href="https://www.sqlite.org/draft/releaselog/3_20_0.html">SQLite 3.20.0</a>.</li> 48 + <li>Updated to <a href="https://www.sqlite.org/releaselog/3_20_1.html">SQLite 3.20.1</a>.</li> 49 + <li>Add BindDecimalAsText and GetDecimalAsText connection flags to force binding and returning of decimal values as text. Pursuant to <a href="https://system.data.sqlite.org/index.html/info/b167206ad3">[b167206ad3]</a>.</li> 49 50 <li>Add preliminary support for Visual Studio 2017 and the .NET Framework 4.7.</li> 50 51 </ul> 51 52 <p><b>1.0.105.2 - June 12, 2017</b></p> 52 53 <ul> 53 54 <li>Updated to <a href="https://www.sqlite.org/releaselog/3_19_3.html">SQLite 3.19.3</a>.</li> 54 55 <li>Fix issues that prevented SQLiteBlob creation from succeeding for tables that did not have an integer primary key.</li> 55 56 </ul>
Changes to SQLite.Interop/props/sqlite3.props.
5 5 * 6 6 * Written by Joe Mistachkin. 7 7 * Released to the public domain, use at your own risk! 8 8 * 9 9 --> 10 10 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 11 11 <PropertyGroup Label="UserMacros"> 12 - <SQLITE_MANIFEST_VERSION>3.20.0.0</SQLITE_MANIFEST_VERSION> 13 - <SQLITE_RC_VERSION>3,20,0,0</SQLITE_RC_VERSION> 12 + <SQLITE_MANIFEST_VERSION>3.20.1.0</SQLITE_MANIFEST_VERSION> 13 + <SQLITE_RC_VERSION>3,20,1,0</SQLITE_RC_VERSION> 14 14 <SQLITE_COMMON_DEFINES>_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;SQLITE_THREADSAFE=1;SQLITE_USE_URI=1;SQLITE_ENABLE_COLUMN_METADATA=1;SQLITE_ENABLE_STAT4=1;SQLITE_ENABLE_FTS3=1;SQLITE_ENABLE_LOAD_EXTENSION=1;SQLITE_ENABLE_RTREE=1;SQLITE_SOUNDEX=1;SQLITE_ENABLE_MEMORY_MANAGEMENT=1;SQLITE_ENABLE_API_ARMOR=1;SQLITE_ENABLE_DBSTAT_VTAB=1;SQLITE_ENABLE_STMTVTAB=1</SQLITE_COMMON_DEFINES> 15 15 <SQLITE_EXTRA_DEFINES>SQLITE_PLACEHOLDER=1</SQLITE_EXTRA_DEFINES> 16 16 <SQLITE_WINCE_200X_DEFINES>SQLITE_OMIT_WAL=1</SQLITE_WINCE_200X_DEFINES> 17 17 <SQLITE_WINCE_2013_DEFINES>HAVE_ERRNO_H=1;SQLITE_MSVC_LOCALTIME_API=1</SQLITE_WINCE_2013_DEFINES> 18 18 <SQLITE_DEBUG_DEFINES>SQLITE_DEBUG=1;SQLITE_MEMDEBUG=1;SQLITE_ENABLE_EXPENSIVE_ASSERT=1</SQLITE_DEBUG_DEFINES> 19 19 <SQLITE_RELEASE_DEFINES>SQLITE_WIN32_MALLOC=1</SQLITE_RELEASE_DEFINES> 20 20 <SQLITE_DISABLE_WARNINGS>4055;4100;4127;4146;4210;4232;4244;4245;4267;4306;4389;4701;4703;4706</SQLITE_DISABLE_WARNINGS>
Changes to SQLite.Interop/props/sqlite3.vsprops.
10 10 <VisualStudioPropertySheet 11 11 ProjectType="Visual C++" 12 12 Version="8.00" 13 13 Name="sqlite3" 14 14 > 15 15 <UserMacro 16 16 Name="SQLITE_MANIFEST_VERSION" 17 - Value="3.20.0.0" 17 + Value="3.20.1.0" 18 18 PerformEnvironmentSet="true" 19 19 /> 20 20 <UserMacro 21 21 Name="SQLITE_RC_VERSION" 22 - Value="3,20,0,0" 22 + Value="3,20,1,0" 23 23 PerformEnvironmentSet="true" 24 24 /> 25 25 <UserMacro 26 26 Name="SQLITE_COMMON_DEFINES" 27 27 Value="_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;SQLITE_THREADSAFE=1;SQLITE_USE_URI=1;SQLITE_ENABLE_COLUMN_METADATA=1;SQLITE_ENABLE_STAT4=1;SQLITE_ENABLE_FTS3=1;SQLITE_ENABLE_LOAD_EXTENSION=1;SQLITE_ENABLE_RTREE=1;SQLITE_SOUNDEX=1;SQLITE_ENABLE_MEMORY_MANAGEMENT=1;SQLITE_ENABLE_API_ARMOR=1;SQLITE_ENABLE_DBSTAT_VTAB=1;SQLITE_ENABLE_STMTVTAB=1" 28 28 PerformEnvironmentSet="true" 29 29 />
Changes to SQLite.Interop/src/core/sqlite3.c.
1 1 /****************************************************************************** 2 2 ** This file is an amalgamation of many separate C source files from SQLite 3 -** version 3.20.0. By combining all the individual C code files into this 3 +** version 3.20.1. By combining all the individual C code files into this 4 4 ** single large file, the entire code can be compiled as a single translation 5 5 ** unit. This allows many compilers to do optimizations that would not be 6 6 ** possible if the files were compiled separately. Performance improvements 7 7 ** of 5% or more are commonly seen when SQLite is compiled as a single 8 8 ** translation unit. 9 9 ** 10 10 ** This file is all you need to compile SQLite. To use SQLite in other ................................................................................ 1146 1146 ** string contains the date and time of the check-in (UTC) and a SHA1 1147 1147 ** or SHA3-256 hash of the entire source tree. 1148 1148 ** 1149 1149 ** See also: [sqlite3_libversion()], 1150 1150 ** [sqlite3_libversion_number()], [sqlite3_sourceid()], 1151 1151 ** [sqlite_version()] and [sqlite_source_id()]. 1152 1152 */ 1153 -#define SQLITE_VERSION "3.20.0" 1154 -#define SQLITE_VERSION_NUMBER 3020000 1155 -#define SQLITE_SOURCE_ID "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8" 1153 +#define SQLITE_VERSION "3.20.1" 1154 +#define SQLITE_VERSION_NUMBER 3020001 1155 +#define SQLITE_SOURCE_ID "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34" 1156 1156 1157 1157 /* 1158 1158 ** CAPI3REF: Run-Time Library Version Numbers 1159 1159 ** KEYWORDS: sqlite3_version sqlite3_sourceid 1160 1160 ** 1161 1161 ** These interfaces provide the same information as the [SQLITE_VERSION], 1162 1162 ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros ................................................................................ 77118 77118 sqlite3_context *pCtx, 77119 77119 void *pPtr, 77120 77120 const char *zPType, 77121 77121 void (*xDestructor)(void*) 77122 77122 ){ 77123 77123 Mem *pOut = pCtx->pOut; 77124 77124 assert( sqlite3_mutex_held(pOut->db->mutex) ); 77125 - sqlite3VdbeMemSetNull(pOut); 77125 + sqlite3VdbeMemRelease(pOut); 77126 + pOut->flags = MEM_Null; 77126 77127 sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor); 77127 77128 } 77128 77129 SQLITE_API void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){ 77129 77130 Mem *pOut = pCtx->pOut; 77130 77131 assert( sqlite3_mutex_held(pOut->db->mutex) ); 77131 77132 pOut->eSubtype = eSubtype & 0xff; 77132 77133 pOut->flags |= MEM_Subtype; ................................................................................ 200271 200272 static void fts5SourceIdFunc( 200272 200273 sqlite3_context *pCtx, /* Function call context */ 200273 200274 int nArg, /* Number of args */ 200274 200275 sqlite3_value **apUnused /* Function arguments */ 200275 200276 ){ 200276 200277 assert( nArg==0 ); 200277 200278 UNUSED_PARAM2(nArg, apUnused); 200278 - sqlite3_result_text(pCtx, "fts5: 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8", -1, SQLITE_TRANSIENT); 200279 + sqlite3_result_text(pCtx, "fts5: 2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34", -1, SQLITE_TRANSIENT); 200279 200280 } 200280 200281 200281 200282 static int fts5Init(sqlite3 *db){ 200282 200283 static const sqlite3_module fts5Mod = { 200283 200284 /* iVersion */ 2, 200284 200285 /* xCreate */ fts5CreateMethod, 200285 200286 /* xConnect */ fts5ConnectMethod,
Changes to SQLite.Interop/src/core/sqlite3.h.
117 117 ** string contains the date and time of the check-in (UTC) and a SHA1 118 118 ** or SHA3-256 hash of the entire source tree. 119 119 ** 120 120 ** See also: [sqlite3_libversion()], 121 121 ** [sqlite3_libversion_number()], [sqlite3_sourceid()], 122 122 ** [sqlite_version()] and [sqlite_source_id()]. 123 123 */ 124 -#define SQLITE_VERSION "3.20.0" 125 -#define SQLITE_VERSION_NUMBER 3020000 126 -#define SQLITE_SOURCE_ID "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8" 124 +#define SQLITE_VERSION "3.20.1" 125 +#define SQLITE_VERSION_NUMBER 3020001 126 +#define SQLITE_SOURCE_ID "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34" 127 127 128 128 /* 129 129 ** CAPI3REF: Run-Time Library Version Numbers 130 130 ** KEYWORDS: sqlite3_version sqlite3_sourceid 131 131 ** 132 132 ** These interfaces provide the same information as the [SQLITE_VERSION], 133 133 ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros
Changes to SQLite.Interop/src/ext/fts5.c.
17314 17314 static void fts5SourceIdFunc( 17315 17315 sqlite3_context *pCtx, /* Function call context */ 17316 17316 int nArg, /* Number of args */ 17317 17317 sqlite3_value **apUnused /* Function arguments */ 17318 17318 ){ 17319 17319 assert( nArg==0 ); 17320 17320 UNUSED_PARAM2(nArg, apUnused); 17321 - sqlite3_result_text(pCtx, "fts5: 2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8", -1, SQLITE_TRANSIENT); 17321 + sqlite3_result_text(pCtx, "fts5: 2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34", -1, SQLITE_TRANSIENT); 17322 17322 } 17323 17323 17324 17324 static int fts5Init(sqlite3 *db){ 17325 17325 static const sqlite3_module fts5Mod = { 17326 17326 /* iVersion */ 2, 17327 17327 /* xCreate */ fts5CreateMethod, 17328 17328 /* xConnect */ fts5ConnectMethod,
Changes to System.Data.SQLite/SQLite3.cs.
3263 3263 TypeAffinity aff = typ.Affinity; 3264 3264 if (aff == TypeAffinity.Null) return DBNull.Value; 3265 3265 Type t = null; 3266 3266 3267 3267 if (typ.Type != DbType.Object) 3268 3268 { 3269 3269 t = SQLiteConvert.SQLiteTypeToType(typ); 3270 - aff = TypeToAffinity(t); 3270 + aff = TypeToAffinity(t, flags); 3271 3271 } 3272 3272 3273 3273 if ((flags & SQLiteConnectionFlags.GetAllAsText) == SQLiteConnectionFlags.GetAllAsText) 3274 3274 return GetText(stmt, index); 3275 3275 3276 3276 switch (aff) 3277 3277 {
Changes to System.Data.SQLite/SQLiteBase.cs.
1241 1241 /// Allow transactions to be nested. The outermost transaction still 1242 1242 /// controls whether or not any changes are ultimately committed or 1243 1243 /// rolled back. All non-outermost transactions are implemented using 1244 1244 /// the SAVEPOINT construct. 1245 1245 /// </summary> 1246 1246 AllowNestedTransactions = 0x8000000000, 1247 1247 1248 + /// <summary> 1249 + /// When binding parameter values, always bind <see cref="Decimal" /> 1250 + /// values as though they were plain text (i.e. not <see cref="Decimal" />, 1251 + /// which is the legacy behavior). 1252 + /// </summary> 1253 + BindDecimalAsText = 0x10000000000, 1254 + 1255 + /// <summary> 1256 + /// When returning column values, always return <see cref="Decimal" /> 1257 + /// values as though they were plain text (i.e. not <see cref="Double" />, 1258 + /// which is the legacy behavior). 1259 + /// </summary> 1260 + GetDecimalAsText = 0x20000000000, 1261 + 1248 1262 /// <summary> 1249 1263 /// When binding parameter values or returning column values, always 1250 1264 /// treat them as though they were plain text (i.e. no numeric, 1251 1265 /// date/time, or other conversions should be attempted). 1252 1266 /// </summary> 1253 1267 BindAndGetAllAsText = BindAllAsText | GetAllAsText, 1254 1268
Changes to System.Data.SQLite/SQLiteConvert.cs.
1621 1621 typeof(string), // Xml (25) 1622 1622 }; 1623 1623 1624 1624 /// <summary> 1625 1625 /// For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types. 1626 1626 /// </summary> 1627 1627 /// <param name="typ">The type to evaluate</param> 1628 + /// <param name="flags">The flags associated with the connection.</param> 1628 1629 /// <returns>The SQLite type affinity for that type.</returns> 1629 - internal static TypeAffinity TypeToAffinity(Type typ) 1630 + internal static TypeAffinity TypeToAffinity( 1631 + Type typ, 1632 + SQLiteConnectionFlags flags 1633 + ) 1630 1634 { 1631 1635 TypeCode tc = Type.GetTypeCode(typ); 1632 1636 if (tc == TypeCode.Object) 1633 1637 { 1634 1638 if (typ == typeof(byte[]) || typ == typeof(Guid)) 1635 1639 return TypeAffinity.Blob; 1636 1640 else 1641 + return TypeAffinity.Text; 1642 + } 1643 + if ((tc == TypeCode.Decimal) && 1644 + ((flags & SQLiteConnectionFlags.GetDecimalAsText) == SQLiteConnectionFlags.GetDecimalAsText)) 1645 + { 1637 1646 return TypeAffinity.Text; 1638 1647 } 1639 1648 return _typecodeAffinities[(int)tc]; 1640 1649 } 1641 1650 1642 1651 private static TypeAffinity[] _typecodeAffinities = { 1643 1652 TypeAffinity.Null, // Empty (0) ................................................................................ 1682 1691 new SQLiteDbTypeMapping("CHAR", DbType.AnsiStringFixedLength, true), 1683 1692 new SQLiteDbTypeMapping("CLOB", DbType.String, false), 1684 1693 new SQLiteDbTypeMapping("COUNTER", DbType.Int64, false), 1685 1694 new SQLiteDbTypeMapping("CURRENCY", DbType.Decimal, false), 1686 1695 new SQLiteDbTypeMapping("DATE", DbType.DateTime, false), 1687 1696 new SQLiteDbTypeMapping("DATETIME", DbType.DateTime, true), 1688 1697 new SQLiteDbTypeMapping("DECIMAL", DbType.Decimal, true), 1698 + new SQLiteDbTypeMapping("DECIMALTEXT", DbType.Decimal, false), 1689 1699 new SQLiteDbTypeMapping("DOUBLE", DbType.Double, false), 1690 1700 new SQLiteDbTypeMapping("FLOAT", DbType.Double, false), 1691 1701 new SQLiteDbTypeMapping("GENERAL", DbType.Binary, false), 1692 1702 new SQLiteDbTypeMapping("GUID", DbType.Guid, false), 1693 1703 new SQLiteDbTypeMapping("IDENTITY", DbType.Int64, false), 1694 1704 new SQLiteDbTypeMapping("IMAGE", DbType.Binary, false), 1695 1705 new SQLiteDbTypeMapping("INT", DbType.Int32, true), ................................................................................ 1710 1720 new SQLiteDbTypeMapping("MEMO", DbType.String, false), 1711 1721 new SQLiteDbTypeMapping("MONEY", DbType.Decimal, false), 1712 1722 new SQLiteDbTypeMapping("NCHAR", DbType.StringFixedLength, true), 1713 1723 new SQLiteDbTypeMapping("NOTE", DbType.String, false), 1714 1724 new SQLiteDbTypeMapping("NTEXT", DbType.String, false), 1715 1725 new SQLiteDbTypeMapping("NUMBER", DbType.Decimal, false), 1716 1726 new SQLiteDbTypeMapping("NUMERIC", DbType.Decimal, false), 1727 + new SQLiteDbTypeMapping("NUMERICTEXT", DbType.Decimal, false), 1717 1728 new SQLiteDbTypeMapping("NVARCHAR", DbType.String, true), 1718 1729 new SQLiteDbTypeMapping("OLEOBJECT", DbType.Binary, false), 1719 1730 new SQLiteDbTypeMapping("RAW", DbType.Binary, false), 1720 1731 new SQLiteDbTypeMapping("REAL", DbType.Double, true), 1721 1732 new SQLiteDbTypeMapping("SINGLE", DbType.Single, true), 1722 1733 new SQLiteDbTypeMapping("SMALLDATE", DbType.DateTime, false), 1723 1734 new SQLiteDbTypeMapping("SMALLINT", DbType.Int16, true),
Changes to System.Data.SQLite/SQLiteFunction.cs.
373 373 if (r != null) 374 374 { 375 375 _base.ReturnError(context, r.Message); 376 376 return; 377 377 } 378 378 } 379 379 380 - switch (SQLiteConvert.TypeToAffinity(t)) 380 + switch (SQLiteConvert.TypeToAffinity(t, _flags)) 381 381 { 382 382 case TypeAffinity.Null: 383 383 _base.ReturnNull(context); 384 384 return; 385 385 case TypeAffinity.Int64: 386 386 _base.ReturnInt64(context, Convert.ToInt64(returnValue, CultureInfo.CurrentCulture)); 387 387 return;
Changes to System.Data.SQLite/SQLiteStatement.cs.
430 430 _sql.Bind_Text(this, _flags, index, invariantText ? 431 431 SQLiteConvert.ToStringWithProvider(obj, invariantCultureInfo) : 432 432 obj.ToString()); 433 433 } 434 434 435 435 return; 436 436 } 437 + 438 + if ((_flags & SQLiteConnectionFlags.BindDecimalAsText) == SQLiteConnectionFlags.BindDecimalAsText) 439 + { 440 + if (obj is Decimal) 441 + { 442 + _sql.Bind_Text(this, _flags, index, invariantText ? 443 + SQLiteConvert.ToStringWithProvider(obj, invariantCultureInfo) : 444 + obj.ToString()); 445 + 446 + return; 447 + } 448 + } 437 449 438 450 CultureInfo cultureInfo = CultureInfo.CurrentCulture; 439 451 440 452 if ((_flags & SQLiteConnectionFlags.ConvertInvariantText) == SQLiteConnectionFlags.ConvertInvariantText) 441 453 cultureInfo = invariantCultureInfo; 442 454 443 455 switch (objType)
Changes to Tests/tkt-56b42d99c1.eagle.
95 95 [expr {$code eq "Ok" ? [catch { 96 96 object invoke _Dynamic${id}.Test${id} TryEnlistInTransaction 97 97 } result] : [set result ""]}] $result 98 98 } -cleanup { 99 99 cleanupDb $fileName 100 100 101 101 unset -nocomplain result results errors code dataSource id db fileName 102 -} -constraints {eagle command.object monoBug211 monoBug46 command.sql\ 102 +} -constraints {eagle command.object monoBug211 monoBug50 command.sql\ 103 103 compile.DATA SQLite System.Data.SQLite compileCSharp} -match regexp -result \ 104 104 {^Ok System#CodeDom#Compiler#CompilerResults#\d+ \{\} 0 True$}} 105 105 106 106 ############################################################################### 107 107 108 108 runTest {test tkt-56b42d99c1-1.2 {enlisted transaction isolation} -setup { 109 109 setupDb [set fileName tkt-56b42d99c1-1.2.db] ................................................................................ 172 172 [expr {$code eq "Ok" ? [catch { 173 173 object invoke _Dynamic${id}.Test${id} Main 174 174 } result] : [set result ""]}] $result 175 175 } -cleanup { 176 176 cleanupDb $fileName 177 177 178 178 unset -nocomplain result results errors code sql dataSource id db fileName 179 -} -constraints {eagle command.object monoBug211 monoBug46 command.sql\ 179 +} -constraints {eagle command.object monoBug211 monoBug50 command.sql\ 180 180 compile.DATA SQLite System.Data.SQLite compileCSharp} -match regexp -result \ 181 181 {^Ok System#CodeDom#Compiler#CompilerResults#\d+ \{\} 0 0$}} 182 182 183 183 ############################################################################### 184 184 185 185 runTest {test tkt-56b42d99c1-1.3 {enlisted transaction isolation} -setup { 186 186 setupDb [set fileName tkt-56b42d99c1-1.3.db] ................................................................................ 403 403 [expr {$code eq "Ok" ? [catch { 404 404 object invoke _Dynamic${id}.Test${id} Main 405 405 } result] : [set result ""]}] $result 406 406 } -cleanup { 407 407 cleanupDb $fileName 408 408 409 409 unset -nocomplain result results errors code sql dataSource id db fileName 410 -} -constraints {eagle command.object monoBug211 monoBug46 command.sql\ 410 +} -constraints {eagle command.object monoBug211 monoBug50 command.sql\ 411 411 compile.DATA SQLite System.Data.SQLite compileCSharp} -match regexp -result \ 412 412 {^Ok System#CodeDom#Compiler#CompilerResults#\d+ \{\} 0 1$}} 413 413 414 414 ############################################################################### 415 415 416 416 set flags MapIsolationLevels 417 417 ................................................................................ 492 492 [expr {$code eq "Ok" ? [catch { 493 493 object invoke _Dynamic${id}.Test${id} TryEnlistInTransaction 494 494 } result] : [set result ""]}] $result 495 495 } -cleanup { 496 496 cleanupDb $fileName 497 497 498 498 unset -nocomplain result results errors code dataSource id db fileName 499 -} -constraints {eagle command.object monoBug28 monoBug211 monoBug46 command.sql\ 499 +} -constraints {eagle command.object monoBug28 monoBug211 monoBug50 command.sql\ 500 500 compile.DATA SQLite System.Data.SQLite compileCSharp} -match regexp -result \ 501 501 {^Ok System#CodeDom#Compiler#CompilerResults#\d+ \{\} 0 True$}} 502 502 503 503 ############################################################################### 504 504 505 505 runTest {test tkt-56b42d99c1-1.7 {enlisted transaction isolation} -setup { 506 506 setupDb [set fileName tkt-56b42d99c1-1.7.db] ................................................................................ 569 569 [expr {$code eq "Ok" ? [catch { 570 570 object invoke _Dynamic${id}.Test${id} Main 571 571 } result] : [set result ""]}] $result 572 572 } -cleanup { 573 573 cleanupDb $fileName 574 574 575 575 unset -nocomplain result results errors code sql dataSource id db fileName 576 -} -constraints {eagle command.object monoBug28 monoBug211 monoBug46 command.sql\ 576 +} -constraints {eagle command.object monoBug28 monoBug211 monoBug50 command.sql\ 577 577 compile.DATA SQLite System.Data.SQLite compileCSharp} -match regexp -result \ 578 578 {^Ok System#CodeDom#Compiler#CompilerResults#\d+ \{\} 0 0$}} 579 579 580 580 ############################################################################### 581 581 582 582 runTest {test tkt-56b42d99c1-1.8 {enlisted transaction isolation} -setup { 583 583 setupDb [set fileName tkt-56b42d99c1-1.8.db] ................................................................................ 800 800 [expr {$code eq "Ok" ? [catch { 801 801 object invoke _Dynamic${id}.Test${id} Main 802 802 } result] : [set result ""]}] $result 803 803 } -cleanup { 804 804 cleanupDb $fileName 805 805 806 806 unset -nocomplain result results errors code sql dataSource id db fileName 807 -} -constraints {eagle command.object monoBug28 monoBug211 monoBug46 command.sql\ 807 +} -constraints {eagle command.object monoBug28 monoBug211 monoBug50 command.sql\ 808 808 compile.DATA SQLite System.Data.SQLite compileCSharp} -match regexp -result \ 809 809 {^Ok System#CodeDom#Compiler#CompilerResults#\d+ \{\} 0 1$}} 810 810 811 811 ############################################################################### 812 812 813 813 unset -nocomplain flags 814 814 815 815 ############################################################################### 816 816 817 817 runSQLiteTestEpilogue 818 818 runTestEpilogue
Added Tests/tkt-b167206ad3.eagle.
1 +############################################################################### 2 +# 3 +# tkt-b167206ad3.eagle -- 4 +# 5 +# Written by Joe Mistachkin. 6 +# Released to the public domain, use at your own risk! 7 +# 8 +############################################################################### 9 + 10 +package require Eagle 11 +package require Eagle.Library 12 +package require Eagle.Test 13 + 14 +runTestPrologue 15 + 16 +############################################################################### 17 + 18 +package require System.Data.SQLite.Test 19 +runSQLiteTestPrologue 20 + 21 +############################################################################### 22 + 23 +runTest {test tkt-b167206ad3-1.1 {type affinity for DECIMAL} -setup { 24 + setupDb [set fileName tkt-b167206ad3-1.1.db] 25 +} -body { 26 + sql execute $db { 27 + CREATE TABLE t1(x INTEGER, y DECIMAL(38,9)); 28 + INSERT INTO t1 (x, y) VALUES(1, 123456789123456780); 29 + INSERT INTO t1 (x, y) VALUES(2, '123456789123456780'); 30 + } 31 + 32 + set dataReader [sql execute \ 33 + -execute reader -format datareader \ 34 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 35 + 36 + set result [list] 37 + 38 + while {[$dataReader Read]} { 39 + set x [$dataReader -create -alias GetValue 0] 40 + set y1 [$dataReader -create -alias GetDecimal 1] 41 + set y2 [$dataReader -create -alias GetValue 1] 42 + 43 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 44 + } 45 + 46 + set result 47 +} -cleanup { 48 + unset -nocomplain dataReader 49 + 50 + cleanupDb $fileName 51 + 52 + unset -nocomplain y2 y1 x result db fileName 53 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 54 +System.Data.SQLite} -result {{1 123456789123456780 123456789123457000} {2\ 55 +123456789123456780 123456789123457000}}} 56 + 57 +############################################################################### 58 + 59 +runTest {test tkt-b167206ad3-1.2 {type affinity for DECIMAL} -setup { 60 + setupDb [set fileName tkt-b167206ad3-1.2.db] "" "" "" GetDecimalAsText 61 +} -body { 62 + sql execute $db { 63 + CREATE TABLE t1(x INTEGER, y DECIMAL(38,9)); 64 + INSERT INTO t1 (x, y) VALUES(1, 123456789123456780); 65 + INSERT INTO t1 (x, y) VALUES(2, '123456789123456780'); 66 + } 67 + 68 + set dataReader [sql execute \ 69 + -execute reader -format datareader \ 70 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 71 + 72 + set result [list] 73 + 74 + while {[$dataReader Read]} { 75 + set x [$dataReader -create -alias GetValue 0] 76 + set y1 [$dataReader -create -alias GetDecimal 1] 77 + set y2 [$dataReader -create -alias GetValue 1] 78 + 79 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 80 + } 81 + 82 + set result 83 +} -cleanup { 84 + unset -nocomplain dataReader 85 + 86 + cleanupDb $fileName 87 + 88 + unset -nocomplain y2 y1 x result db fileName 89 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 90 +System.Data.SQLite} -result {{1 123456789123456780 123456789123456780} {2\ 91 +123456789123456780 123456789123456780}}} 92 + 93 +############################################################################### 94 + 95 +runTest {test tkt-b167206ad3-1.3 {type affinity for NUMERIC} -setup { 96 + setupDb [set fileName tkt-b167206ad3-1.3.db] 97 +} -body { 98 + sql execute $db { 99 + CREATE TABLE t1(x INTEGER, y NUMERIC); 100 + INSERT INTO t1 (x, y) VALUES(1, 123456789123456780); 101 + INSERT INTO t1 (x, y) VALUES(2, '123456789123456780'); 102 + } 103 + 104 + set dataReader [sql execute \ 105 + -execute reader -format datareader \ 106 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 107 + 108 + set result [list] 109 + 110 + while {[$dataReader Read]} { 111 + set x [$dataReader -create -alias GetValue 0] 112 + set y1 [$dataReader -create -alias GetDecimal 1] 113 + set y2 [$dataReader -create -alias GetValue 1] 114 + 115 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 116 + } 117 + 118 + set result 119 +} -cleanup { 120 + unset -nocomplain dataReader 121 + 122 + cleanupDb $fileName 123 + 124 + unset -nocomplain y2 y1 x result db fileName 125 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 126 +System.Data.SQLite} -result {{1 123456789123456780 123456789123457000} {2\ 127 +123456789123456780 123456789123457000}}} 128 + 129 +############################################################################### 130 + 131 +runTest {test tkt-b167206ad3-1.4 {type affinity for NUMERIC} -setup { 132 + setupDb [set fileName tkt-b167206ad3-1.4.db] "" "" "" GetDecimalAsText 133 +} -body { 134 + sql execute $db { 135 + CREATE TABLE t1(x INTEGER, y NUMERIC); 136 + INSERT INTO t1 (x, y) VALUES(1, 123456789123456780); 137 + INSERT INTO t1 (x, y) VALUES(2, '123456789123456780'); 138 + } 139 + 140 + set dataReader [sql execute \ 141 + -execute reader -format datareader \ 142 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 143 + 144 + set result [list] 145 + 146 + while {[$dataReader Read]} { 147 + set x [$dataReader -create -alias GetValue 0] 148 + set y1 [$dataReader -create -alias GetDecimal 1] 149 + set y2 [$dataReader -create -alias GetValue 1] 150 + 151 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 152 + } 153 + 154 + set result 155 +} -cleanup { 156 + unset -nocomplain dataReader 157 + 158 + cleanupDb $fileName 159 + 160 + unset -nocomplain y2 y1 x result db fileName 161 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 162 +System.Data.SQLite} -result {{1 123456789123456780 123456789123456780} {2\ 163 +123456789123456780 123456789123456780}}} 164 + 165 +############################################################################### 166 + 167 +runTest {test tkt-b167206ad3-2.1 {bind type for DECIMALTEXT} -setup { 168 + setupDb [set fileName tkt-b167206ad3-2.1.db] 169 +} -body { 170 + sql execute $db { 171 + CREATE TABLE t1(x INTEGER, y DECIMALTEXT(38,9)); 172 + } 173 + 174 + set d(1) [object invoke -create Decimal Parse 123456789123456780] 175 + set d(2) [object invoke -create Decimal Parse 12345678912345.1556346] 176 + 177 + sql execute $db "INSERT INTO t1 (x, y) VALUES(1, ?);" \ 178 + [list param1 Decimal $d(1)] 179 + 180 + sql execute $db "INSERT INTO t1 (x, y) VALUES(2, ?);" \ 181 + [list param1 Decimal $d(2)] 182 + 183 + set dataReader [sql execute \ 184 + -execute reader -format datareader \ 185 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 186 + 187 + set result [list] 188 + 189 + while {[$dataReader Read]} { 190 + set x [$dataReader -create -alias GetValue 0] 191 + set y1 [$dataReader -create -alias GetDecimal 1] 192 + set y2 [$dataReader -create -alias GetValue 1] 193 + 194 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 195 + } 196 + 197 + set result 198 +} -cleanup { 199 + unset -nocomplain dataReader 200 + 201 + cleanupDb $fileName 202 + 203 + unset -nocomplain y2 y1 x d result db fileName 204 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 205 +System.Data.SQLite} -result {{1 123456789123456780 123456789123457000} {2\ 206 +12345678912345.1556346 12345678912345.2}}} 207 + 208 +############################################################################### 209 + 210 +runTest {test tkt-b167206ad3-2.2 {bind type for DECIMALTEXT} -setup { 211 + setupDb [set fileName tkt-b167206ad3-2.2.db] "" "" "" \ 212 + "BindDecimalAsText GetAllAsText" 213 +} -body { 214 + sql execute $db { 215 + CREATE TABLE t1(x INTEGER, y DECIMALTEXT(38,9)); 216 + } 217 + 218 + set d(1) [object invoke -create Decimal Parse 123456789123456780] 219 + set d(2) [object invoke -create Decimal Parse 12345678912345.1556346] 220 + 221 + sql execute $db "INSERT INTO t1 (x, y) VALUES(1, ?);" \ 222 + [list param1 Decimal $d(1)] 223 + 224 + sql execute $db "INSERT INTO t1 (x, y) VALUES(2, ?);" \ 225 + [list param1 Decimal $d(2)] 226 + 227 + set dataReader [sql execute \ 228 + -execute reader -format datareader \ 229 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 230 + 231 + set result [list] 232 + 233 + while {[$dataReader Read]} { 234 + set x [$dataReader -create -alias GetValue 0] 235 + set y1 [$dataReader -create -alias GetDecimal 1] 236 + set y2 [$dataReader -create -alias GetValue 1] 237 + 238 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 239 + } 240 + 241 + set result 242 +} -cleanup { 243 + unset -nocomplain dataReader 244 + 245 + cleanupDb $fileName 246 + 247 + unset -nocomplain y2 y1 x d result db fileName 248 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 249 +System.Data.SQLite} -result {{1 123456789123456780 123456789123456780} {2\ 250 +12345678912345.1556346 12345678912345.1556346}}} 251 + 252 +############################################################################### 253 + 254 +runTest {test tkt-b167206ad3-2.3 {bind type for NUMERICTEXT} -setup { 255 + setupDb [set fileName tkt-b167206ad3-2.3.db] 256 +} -body { 257 + sql execute $db { 258 + CREATE TABLE t1(x INTEGER, y NUMERICTEXT); 259 + } 260 + 261 + set d(1) [object invoke -create Decimal Parse 123456789123456780] 262 + set d(2) [object invoke -create Decimal Parse 12345678912345.1556346] 263 + 264 + sql execute $db "INSERT INTO t1 (x, y) VALUES(1, ?);" \ 265 + [list param1 Decimal $d(1)] 266 + 267 + sql execute $db "INSERT INTO t1 (x, y) VALUES(2, ?);" \ 268 + [list param1 Decimal $d(2)] 269 + 270 + set dataReader [sql execute \ 271 + -execute reader -format datareader \ 272 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 273 + 274 + set result [list] 275 + 276 + while {[$dataReader Read]} { 277 + set x [$dataReader -create -alias GetValue 0] 278 + set y1 [$dataReader -create -alias GetDecimal 1] 279 + set y2 [$dataReader -create -alias GetValue 1] 280 + 281 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 282 + } 283 + 284 + set result 285 +} -cleanup { 286 + unset -nocomplain dataReader 287 + 288 + cleanupDb $fileName 289 + 290 + unset -nocomplain y2 y1 x d result db fileName 291 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 292 +System.Data.SQLite} -result {{1 123456789123456780 123456789123457000} {2\ 293 +12345678912345.1556346 12345678912345.2}}} 294 + 295 +############################################################################### 296 + 297 +runTest {test tkt-b167206ad3-2.4 {bind type for NUMERICTEXT} -setup { 298 + setupDb [set fileName tkt-b167206ad3-2.4.db] "" "" "" \ 299 + "BindDecimalAsText GetAllAsText" 300 +} -body { 301 + sql execute $db { 302 + CREATE TABLE t1(x INTEGER, y NUMERICTEXT); 303 + } 304 + 305 + set d(1) [object invoke -create Decimal Parse 123456789123456780] 306 + set d(2) [object invoke -create Decimal Parse 12345678912345.1556346] 307 + 308 + sql execute $db "INSERT INTO t1 (x, y) VALUES(1, ?);" \ 309 + [list param1 Decimal $d(1)] 310 + 311 + sql execute $db "INSERT INTO t1 (x, y) VALUES(2, ?);" \ 312 + [list param1 Decimal $d(2)] 313 + 314 + set dataReader [sql execute \ 315 + -execute reader -format datareader \ 316 + -alias $db "SELECT x, y FROM t1 ORDER BY x;"] 317 + 318 + set result [list] 319 + 320 + while {[$dataReader Read]} { 321 + set x [$dataReader -create -alias GetValue 0] 322 + set y1 [$dataReader -create -alias GetDecimal 1] 323 + set y2 [$dataReader -create -alias GetValue 1] 324 + 325 + lappend result [list [$x ToString] [$y1 ToString] [$y2 ToString]] 326 + } 327 + 328 + set result 329 +} -cleanup { 330 + unset -nocomplain dataReader 331 + 332 + cleanupDb $fileName 333 + 334 + unset -nocomplain y2 y1 x d result db fileName 335 +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ 336 +System.Data.SQLite} -result {{1 123456789123456780 123456789123456780} {2\ 337 +12345678912345.1556346 12345678912345.1556346}}} 338 + 339 +############################################################################### 340 + 341 +runSQLiteTestEpilogue 342 +runTestEpilogue
Changes to lib/System.Data.SQLite/common.eagle.
1679 1679 1680 1680 return true 1681 1681 } else { 1682 1682 tputs $channel [appendArgs "yes (" $platform ")\n"] 1683 1683 } 1684 1684 } else { 1685 1685 tputs $channel no\n 1686 + 1687 + if {![file exists $directory] || \ 1688 + ![file isdirectory $directory]} then { 1689 + tputs $channel [appendArgs \ 1690 + "---- environment variable \"System.Data.SQLite\" is an " \ 1691 + "invalid directory, skipping check for releases...\n"] 1692 + 1693 + return false 1694 + } 1686 1695 1687 1696 foreach path [lsort -decreasing [file list $directory *]] { 1688 1697 if {[file exists $path] && [file isdirectory $path]} then { 1689 1698 tputs $channel [appendArgs \ 1690 1699 "---- checking for System.Data.SQLite release \"" \ 1691 1700 $path "\"... "] 1692 1701
Changes to readme.htm.
1 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 2 <html> 3 3 <head> 4 4 <title></title> 5 5 </head> 6 6 <body> 7 7 ADO.NET SQLite Data Provider<br /> 8 -Version 1.0.106.0 - August XX, 2017 <font color="red">(release scheduled)</font><br /> 9 -Using <a href="https://www.sqlite.org/draft/releaselog/3_20_0.html">SQLite 3.20.0</a><br />Originally written by Robert Simpson<br /> 8 +Version 1.0.106.0 - September XX, 2017 <font color="red">(release scheduled)</font><br /> 9 +Using <a href="https://www.sqlite.org/releaselog/3_20_1.html">SQLite 3.20.1</a><br />Originally written by Robert Simpson<br /> 10 10 Released to the public domain, use at your own risk!<br /> 11 11 Official provider website: <a href="https://system.data.sqlite.org/">https://system.data.sqlite.org/</a><br /> 12 12 Legacy versions: <a href="https://sourceforge.net/projects/sqlite-dotnet2/">https://sourceforge.net/projects/sqlite-dotnet2/</a><br /> 13 13 <br /> 14 14 The current development version can be downloaded from <a href="https://system.data.sqlite.org/index.html/timeline?y=ci"> 15 15 https://system.data.sqlite.org/index.html/timeline?y=ci</a> 16 16 <br /> ................................................................................ 204 204 designed for robustness and maximum backward compatibility with previously 205 205 released versions of System.Data.SQLite. 206 206 </p> 207 207 208 208 <h2><b>Version History</b></h2> 209 209 210 210 <p> 211 - <b>1.0.106.0 - August XX, 2017 <font color="red">(release scheduled)</font></b> 211 + <b>1.0.106.0 - September XX, 2017 <font color="red">(release scheduled)</font></b> 212 212 </p> 213 213 <ul> 214 - <li>Updated to <a href="https://www.sqlite.org/draft/releaselog/3_20_0.html">SQLite 3.20.0</a>.</li> 214 + <li>Updated to <a href="https://www.sqlite.org/releaselog/3_20_1.html">SQLite 3.20.1</a>.</li> 215 + <li>Add BindDecimalAsText and GetDecimalAsText connection flags to force binding and returning of decimal values as text. Pursuant to [b167206ad3].</li> 215 216 <li>Add preliminary support for Visual Studio 2017 and the .NET Framework 4.7.</li> 216 217 </ul> 217 218 <p> 218 219 <b>1.0.105.2 - June 12, 2017</b> 219 220 </p> 220 221 <ul> 221 222 <li>Updated to <a href="https://www.sqlite.org/releaselog/3_19_3.html">SQLite 3.19.3</a>.</li>
Changes to www/news.wiki.
41 41 Access to archived release packages will be granted on a case-by-case basis. 42 42 </li> 43 43 </ul> 44 44 45 45 <div align="center"><h2><b>Version History</b></h2></div> 46 46 47 47 <p> 48 - <b>1.0.106.0 - August XX, 2017 <font color="red">(release scheduled)</font></b> 48 + <b>1.0.106.0 - September XX, 2017 <font color="red">(release scheduled)</font></b> 49 49 </p> 50 50 <ul> 51 - <li>Updated to [https://www.sqlite.org/draft/releaselog/3_20_0.html|SQLite 3.20.0].</li> 51 + <li>Updated to [https://www.sqlite.org/releaselog/3_20_1.html|SQLite 3.20.1].</li> 52 + <li>Add BindDecimalAsText and GetDecimalAsText connection flags to force binding and returning of decimal values as text. Pursuant to [b167206ad3].</li> 52 53 <li>Add preliminary support for Visual Studio 2017 and the .NET Framework 4.7.</li> 53 54 </ul> 54 55 <p> 55 56 <b>1.0.105.2 - June 12, 2017</b> 56 57 </p> 57 58 <ul> 58 59 <li>Updated to [https://www.sqlite.org/releaselog/3_19_3.html|SQLite 3.19.3].</li>