Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Refactor how the SQLiteDataReader class handles the connection flags associated with its command. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
fc72de85c839077bf2c7471b725f2992 |
User & Date: | mistachkin 2014-05-26 22:43:35.796 |
Context
2014-05-26
| ||
22:52 | Fix stray whitespace. check-in: 48fe67dae9 user: mistachkin tags: trunk | |
22:51 | Merge updates from trunk. check-in: ce61807139 user: mistachkin tags: tkt-3c00ec5b52 | |
22:43 | Refactor how the SQLiteDataReader class handles the connection flags associated with its command. check-in: fc72de85c8 user: mistachkin tags: trunk | |
21:11 | Mark the setup packages with their configuration. check-in: c2d4f7a670 user: mistachkin tags: trunk | |
Changes
Changes to System.Data.SQLite/SQLiteConvert.cs.
︙ | ︙ | |||
2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 | /// The DbType of the column, or DbType.Object if it cannot be determined /// </summary> internal DbType Type; /// <summary> /// The affinity of a column, used for expressions or when Type is DbType.Object /// </summary> internal TypeAffinity Affinity; } ///////////////////////////////////////////////////////////////////////////// internal sealed class SQLiteDbTypeMap : Dictionary<string, SQLiteDbTypeMapping> { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /// The DbType of the column, or DbType.Object if it cannot be determined /// </summary> internal DbType Type; /// <summary> /// The affinity of a column, used for expressions or when Type is DbType.Object /// </summary> internal TypeAffinity Affinity; /////////////////////////////////////////////////////////////////////////// /// <summary> /// Constructs a default instance of this type. /// </summary> public SQLiteType() { // do nothing. } /////////////////////////////////////////////////////////////////////////// /// <summary> /// Constructs an instance of this type with the specified field values. /// </summary> /// <param name="affinity"> /// The type affinity to use for the new instance. /// </param> /// <param name="type"> /// The database type to use for the new instance. /// </param> public SQLiteType( TypeAffinity affinity, DbType type ) : this() { this.Affinity = affinity; this.Type = type; } } ///////////////////////////////////////////////////////////////////////////// internal sealed class SQLiteDbTypeMap : Dictionary<string, SQLiteDbTypeMapping> { |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteDataReader.cs.
︙ | ︙ | |||
357 358 359 360 361 362 363 | /// <param name="i">The index of the column to type-check</param> /// <param name="typ">The type we want to get out of the column</param> private TypeAffinity VerifyType(int i, DbType typ) { CheckClosed(); CheckValidRow(); | | | 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 | /// <param name="i">The index of the column to type-check</param> /// <param name="typ">The type we want to get out of the column</param> private TypeAffinity VerifyType(int i, DbType typ) { CheckClosed(); CheckValidRow(); TypeAffinity affinity = GetSQLiteType(SQLiteCommand.GetFlags(_command), i).Affinity; switch (affinity) { case TypeAffinity.Int64: if (typ == DbType.Int16) return affinity; if (typ == DbType.Int32) return affinity; if (typ == DbType.Int64) return affinity; |
︙ | ︙ | |||
502 503 504 505 506 507 508 | public override string GetDataTypeName(int i) { CheckDisposed(); if (i >= VisibleFieldCount && _keyInfo != null) return _keyInfo.GetDataTypeName(i - VisibleFieldCount); | | | 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 | public override string GetDataTypeName(int i) { CheckDisposed(); if (i >= VisibleFieldCount && _keyInfo != null) return _keyInfo.GetDataTypeName(i - VisibleFieldCount); SQLiteType typ = GetSQLiteType(SQLiteCommand.GetFlags(_command), i); if (typ.Type == DbType.Object) return SQLiteConvert.SQLiteTypeToType(typ).Name; return _activeStatement._sql.ColumnType(_activeStatement, i, out typ.Affinity); } /// <summary> /// Retrieve the column as a date/time value /// </summary> |
︙ | ︙ | |||
567 568 569 570 571 572 573 | public override Type GetFieldType(int i) { CheckDisposed(); if (i >= VisibleFieldCount && _keyInfo != null) return _keyInfo.GetFieldType(i - VisibleFieldCount); | | | 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 | public override Type GetFieldType(int i) { CheckDisposed(); if (i >= VisibleFieldCount && _keyInfo != null) return _keyInfo.GetFieldType(i - VisibleFieldCount); return SQLiteConvert.SQLiteTypeToType(GetSQLiteType(SQLiteCommand.GetFlags(_command), i)); } /// <summary> /// Returns a column as a float value /// </summary> /// <param name="i">The index of the column to retrieve</param> /// <returns>float</returns> |
︙ | ︙ | |||
916 917 918 919 920 921 922 923 924 | tbl.Columns.Add(SchemaTableOptionalColumn.IsReadOnly, typeof(Boolean)); tbl.Columns.Add(SchemaTableOptionalColumn.ProviderSpecificDataType, typeof(Type)); tbl.Columns.Add(SchemaTableOptionalColumn.DefaultValue, typeof(object)); tbl.Columns.Add("DataTypeName", typeof(string)); tbl.Columns.Add("CollationType", typeof(string)); tbl.BeginLoadData(); for (int n = 0; n < _fieldCount; n++) { | > > | | 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 | tbl.Columns.Add(SchemaTableOptionalColumn.IsReadOnly, typeof(Boolean)); tbl.Columns.Add(SchemaTableOptionalColumn.ProviderSpecificDataType, typeof(Type)); tbl.Columns.Add(SchemaTableOptionalColumn.DefaultValue, typeof(object)); tbl.Columns.Add("DataTypeName", typeof(string)); tbl.Columns.Add("CollationType", typeof(string)); tbl.BeginLoadData(); SQLiteConnectionFlags flags = SQLiteCommand.GetFlags(_command); for (int n = 0; n < _fieldCount; n++) { SQLiteType sqlType = GetSQLiteType(flags, n); row = tbl.NewRow(); DbType typ = sqlType.Type; // Default settings for the column row[SchemaTableColumn.ColumnName] = GetName(n); |
︙ | ︙ | |||
1129 1130 1131 1132 1133 1134 1135 | { CheckDisposed(); CheckValidRow(); if (i >= VisibleFieldCount && _keyInfo != null) return _keyInfo.GetValue(i - VisibleFieldCount); | > | | < | 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 | { CheckDisposed(); CheckValidRow(); if (i >= VisibleFieldCount && _keyInfo != null) return _keyInfo.GetValue(i - VisibleFieldCount); SQLiteConnectionFlags flags = SQLiteCommand.GetFlags(_command); SQLiteType typ = GetSQLiteType(flags, i); return _activeStatement._sql.GetValue(_activeStatement, flags, i, typ); } /// <summary> /// Retreives the values of multiple columns, up to the size of the supplied array /// </summary> /// <param name="values">The array to fill with values from the columns in the current resultset</param> /// <returns>The number of columns retrieved</returns> |
︙ | ︙ | |||
1411 1412 1413 1414 1415 1416 1417 1418 1419 | return SQLiteConnectionFlags.Default; } /// <summary> /// Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. /// </summary> /// <param name="i">The index of the column to retrieve</param> /// <returns>A SQLiteType structure</returns> | > | | | 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 | return SQLiteConnectionFlags.Default; } /// <summary> /// Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. /// </summary> /// <param name="flags">The flags associated with the parent connection object.</param> /// <param name="i">The index of the column to retrieve</param> /// <returns>A SQLiteType structure</returns> private SQLiteType GetSQLiteType(SQLiteConnectionFlags flags, int i) { SQLiteType typ; // Initialize the field types array if not already initialized if (_fieldTypeArray == null) _fieldTypeArray = new SQLiteType[VisibleFieldCount]; // Initialize this column's field type instance if (_fieldTypeArray[i] == null) _fieldTypeArray[i] = new SQLiteType(); typ = _fieldTypeArray[i]; // If not initialized, then fetch the declared column datatype and attempt to convert it // to a known DbType. if (typ.Affinity == TypeAffinity.Uninitialized) typ.Type = SQLiteConvert.TypeNameToDbType(GetConnection(this), _activeStatement._sql.ColumnType(_activeStatement, i, out typ.Affinity), flags); else typ.Affinity = _activeStatement._sql.ColumnAffinity(_activeStatement, i); return typ; } /// <summary> |
︙ | ︙ |