Skip to content

Commit

Permalink
⬆️ Update SQLitePCL.raw to 2.0.0
Browse files Browse the repository at this point in the history
Resolves #14824
  • Loading branch information
bricelam committed Jun 25, 2019
1 parent 7e0e01e commit 9b0d6e0
Show file tree
Hide file tree
Showing 12 changed files with 42 additions and 59 deletions.
6 changes: 3 additions & 3 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
<NetTopologySuiteCorePackageVersion>1.15.1</NetTopologySuiteCorePackageVersion>
<NetTopologySuiteIOSpatiaLitePackageVersion>1.15.0</NetTopologySuiteIOSpatiaLitePackageVersion>
<NetTopologySuiteIOSqlServerBytesPackageVersion>1.15.0</NetTopologySuiteIOSqlServerBytesPackageVersion>
<SQLitePCLRawBundleESqlite3PackageVersion>1.1.12</SQLitePCLRawBundleESqlite3PackageVersion>
<SQLitePCLRawBundleSqlcipherPackageVersion>1.1.12</SQLitePCLRawBundleSqlcipherPackageVersion>
<SQLitePCLRawCorePackageVersion>1.1.12</SQLitePCLRawCorePackageVersion>
<SQLitePCLRawBundleESqlite3PackageVersion>2.0.0-pre20190625090255</SQLitePCLRawBundleESqlite3PackageVersion>
<SQLitePCLRawBundleESqlcipherPackageVersion>2.0.0-pre20190625090255</SQLitePCLRawBundleESqlcipherPackageVersion>
<SQLitePCLRawCorePackageVersion>2.0.0-pre20190625090255</SQLitePCLRawCorePackageVersion>
<StyleCopAnalyzersPackageVersion>1.1.1-beta.61</StyleCopAnalyzersPackageVersion>
<BenchmarkDotNetPackageVersion>0.11.3</BenchmarkDotNetPackageVersion>
<MicrosoftDataSqlClientPackageVersion>1.0.19128.1-Preview</MicrosoftDataSqlClientPackageVersion>
Expand Down
2 changes: 1 addition & 1 deletion samples/EncryptionSample/EncryptionSample.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="SQLitePCLRaw.bundle_sqlcipher" Version="$(SQLitePCLRawBundleSqlcipherPackageVersion)" />
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlcipher" Version="$(SQLitePCLRawBundleESqlcipherPackageVersion)" />
</ItemGroup>

</Project>
23 changes: 1 addition & 22 deletions src/Microsoft.Data.Sqlite.Core/Extensions/SQLitePCLExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,12 @@

using System.Reflection;

using static SQLitePCL.raw;

// ReSharper disable once CheckNamespace
namespace SQLitePCL
{
internal static class SQLitePCLExtensions
{
public static void Dispose2(this sqlite3 db)
=> sqlite3_close_v2(db);

public static string GetProviderName()
{
string providerName = null;
try
{
providerName = typeof(raw)
.GetField("_imp", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null)
.GetType().Name;
}
catch
{
}

return providerName;
}

public static bool EncryptionNotSupported()
=> GetProviderName() == "SQLite3Provider_e_sqlite3";
=> SQLitePCL.raw.GetNativeLibraryName() == "e_sqlite3";
}
}
4 changes: 2 additions & 2 deletions src/Microsoft.Data.Sqlite.Core/SqliteBlob.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ public override int Read(byte[] buffer, int offset, int count)
count = (int)(Length - position);
}

var rc = sqlite3_blob_read(_blob, buffer, offset, count, (int)position);
var rc = sqlite3_blob_read(_blob, buffer.AsSpan(offset, count), (int)position);
SqliteException.ThrowExceptionForRC(rc, _db);
_position += count;
return count;
Expand Down Expand Up @@ -236,7 +236,7 @@ public override void Write(byte[] buffer, int offset, int count)
throw new NotSupportedException(Resources.ResizeNotSupported);
}

var rc = sqlite3_blob_write(_blob, buffer, offset, count, (int)position);
var rc = sqlite3_blob_write(_blob, buffer.AsSpan(offset, count), (int)position);
SqliteException.ThrowExceptionForRC(rc, _db);
_position += count;
}
Expand Down
4 changes: 2 additions & 2 deletions src/Microsoft.Data.Sqlite.Core/SqliteCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ private IEnumerable<sqlite3_stmt> GetStatements(Stopwatch timer)
var unboundParams = new List<string>();
for (var i = 1; i <= expectedParams; i++)
{
var name = sqlite3_bind_parameter_name(stmt, i);
var name = sqlite3_bind_parameter_name(stmt, i).utf8_to_string();

if (_parameters.IsValueCreated
&& !_parameters.Value.Cast<SqliteParameter>().Any(p => p.ParameterName == name))
Expand Down Expand Up @@ -500,7 +500,7 @@ private IEnumerable<sqlite3_stmt> PrepareAndEnumerateStatements(Stopwatch timer)
SqliteException.ThrowExceptionForRC(rc, _connection.Handle);

// Statement was empty, white space, or a comment
if (stmt.ptr == IntPtr.Zero)
if (stmt.IsInvalid)
{
if (!string.IsNullOrEmpty(tail))
{
Expand Down
16 changes: 8 additions & 8 deletions src/Microsoft.Data.Sqlite.Core/SqliteConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public partial class SqliteConnection : DbConnection

private readonly List<WeakReference<SqliteCommand>> _commands = new List<WeakReference<SqliteCommand>>();

private readonly Dictionary<string, (object state, delegate_collation collation)> _collations
= new Dictionary<string, (object, delegate_collation)>(StringComparer.OrdinalIgnoreCase);
private readonly Dictionary<string, (object state, strdelegate_collation collation)> _collations
= new Dictionary<string, (object, strdelegate_collation)>(StringComparer.OrdinalIgnoreCase);

private readonly Dictionary<(string name, int arity), (int flags, object state, delegate_function_scalar func)> _functions
= new Dictionary<(string, int), (int, object, delegate_function_scalar)>(FunctionsKeyComparer.Instance);
Expand Down Expand Up @@ -108,7 +108,7 @@ public override string DataSource
string dataSource = null;
if (State == ConnectionState.Open)
{
dataSource = sqlite3_db_filename(_db, MainDatabaseName);
dataSource = sqlite3_db_filename(_db, MainDatabaseName).utf8_to_string();
}

return dataSource ?? ConnectionOptions.DataSource;
Expand All @@ -128,7 +128,7 @@ public override string DataSource
/// </summary>
/// <value>The version of SQLite used by the connection.</value>
public override string ServerVersion
=> sqlite3_libversion();
=> sqlite3_libversion().utf8_to_string();

/// <summary>
/// Gets the current state of the connection.
Expand Down Expand Up @@ -309,7 +309,7 @@ public override void Open()
}
catch
{
_db.Dispose2();
_db.Dispose();
_db = null;

_state = ConnectionState.Closed;
Expand Down Expand Up @@ -344,7 +344,7 @@ public override void Close()

Debug.Assert(_commands.Count == 0);

_db.Dispose2();
_db.Dispose();
_db = null;

_state = ConnectionState.Closed;
Expand Down Expand Up @@ -427,7 +427,7 @@ public virtual void CreateCollation<T>(string name, T state, Func<T, string, str
throw new ArgumentNullException(nameof(name));
}

var collation = comparison != null ? (v, s1, s2) => comparison((T)v, s1, s2) : (delegate_collation)null;
var collation = comparison != null ? (v, s1, s2) => comparison((T)v, s1, s2) : (strdelegate_collation)null;

if (State == ConnectionState.Open)
{
Expand Down Expand Up @@ -583,7 +583,7 @@ public virtual void BackupDatabase(SqliteConnection destination, string destinat
using (var backup = sqlite3_backup_init(destination._db, destinationName, _db, sourceName))
{
int rc;
if (backup.ptr == IntPtr.Zero)
if (backup.IsInvalid)
{
rc = sqlite3_errcode(destination._db);
SqliteException.ThrowExceptionForRC(rc, destination._db);
Expand Down
6 changes: 3 additions & 3 deletions src/Microsoft.Data.Sqlite.Core/SqliteDataReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -651,12 +651,12 @@ public override DataTable GetSchemaTable()
schemaRow[NumericPrecision] = DBNull.Value;
schemaRow[NumericScale] = DBNull.Value;
schemaRow[BaseServerName] = _command.Connection.DataSource;
var databaseName = sqlite3_column_database_name(_record.Handle, i);
var databaseName = sqlite3_column_database_name(_record.Handle, i).utf8_to_string();
schemaRow[BaseCatalogName] = databaseName;
var columnName = sqlite3_column_origin_name(_record.Handle, i);
var columnName = sqlite3_column_origin_name(_record.Handle, i).utf8_to_string();
schemaRow[BaseColumnName] = columnName;
schemaRow[BaseSchemaName] = DBNull.Value;
var tableName = sqlite3_column_table_name(_record.Handle, i);
var tableName = sqlite3_column_table_name(_record.Handle, i).utf8_to_string();
schemaRow[BaseTableName] = tableName;
schemaRow[DataType] = GetFieldType(i);
schemaRow[DataTypeName] = GetDataTypeName(i);
Expand Down
20 changes: 10 additions & 10 deletions src/Microsoft.Data.Sqlite.Core/SqliteDataRecord.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,10 @@ protected override long GetInt64Core(int ordinal)
=> sqlite3_column_int64(Handle, ordinal);

protected override string GetStringCore(int ordinal)
=> sqlite3_column_text(Handle, ordinal);
=> sqlite3_column_text(Handle, ordinal).utf8_to_string();

protected override byte[] GetBlobCore(int ordinal)
=> sqlite3_column_blob(Handle, ordinal);
=> sqlite3_column_blob(Handle, ordinal).ToArray();

protected override int GetSqliteType(int ordinal)
{
Expand All @@ -80,7 +80,7 @@ protected override T GetNull<T>(int ordinal)

public virtual string GetName(int ordinal)
{
var name = sqlite3_column_name(Handle, ordinal);
var name = sqlite3_column_name(Handle, ordinal).utf8_to_string();
if (name == null
&& (ordinal < 0 || ordinal >= FieldCount))
{
Expand All @@ -107,7 +107,7 @@ public virtual int GetOrdinal(string name)

public virtual string GetDataTypeName(int ordinal)
{
var typeName = sqlite3_column_decltype(Handle, ordinal);
var typeName = sqlite3_column_decltype(Handle, ordinal).utf8_to_string();
if (typeName != null)
{
var i = typeName.IndexOf('(');
Expand Down Expand Up @@ -210,8 +210,8 @@ public virtual Stream GetStream(int ordinal)
throw new ArgumentOutOfRangeException(nameof(ordinal), ordinal, message: null);
}

var blobDatabaseName = sqlite3_column_database_name(Handle, ordinal);
var blobTableName = sqlite3_column_table_name(Handle, ordinal);
var blobDatabaseName = sqlite3_column_database_name(Handle, ordinal).utf8_to_string();
var blobTableName = sqlite3_column_table_name(Handle, ordinal).utf8_to_string();

var rowidOrdinal = -1;
for (var i = 0; i < FieldCount; i++)
Expand All @@ -221,19 +221,19 @@ public virtual Stream GetStream(int ordinal)
continue;
}

var databaseName = sqlite3_column_database_name(Handle, i);
var databaseName = sqlite3_column_database_name(Handle, i).utf8_to_string();
if (databaseName != blobDatabaseName)
{
continue;
}

var tableName = sqlite3_column_table_name(Handle, i);
var tableName = sqlite3_column_table_name(Handle, i).utf8_to_string();
if (tableName != blobTableName)
{
continue;
}

var columnName = sqlite3_column_origin_name(Handle, i);
var columnName = sqlite3_column_origin_name(Handle, i).utf8_to_string();
if (columnName == "rowid")
{
rowidOrdinal = i;
Expand Down Expand Up @@ -264,7 +264,7 @@ public virtual Stream GetStream(int ordinal)
return new MemoryStream(GetCachedBlob(ordinal), false);
}

var blobColumnName = sqlite3_column_origin_name(Handle, ordinal);
var blobColumnName = sqlite3_column_origin_name(Handle, ordinal).utf8_to_string();
var rowid = GetInt32(rowidOrdinal);

return new SqliteBlob(_connection, blobTableName, blobColumnName, rowid, readOnly: true);
Expand Down
6 changes: 3 additions & 3 deletions src/Microsoft.Data.Sqlite.Core/SqliteException.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ public static void ThrowExceptionForRC(int rc, sqlite3 db)
string message;
int extendedErrorCode;
if (db == null
|| db.ptr == IntPtr.Zero
|| db.IsInvalid
|| rc != sqlite3_errcode(db))
{
message = sqlite3_errstr(rc) + " " + Resources.DefaultNativeError;
message = sqlite3_errstr(rc).utf8_to_string() + " " + Resources.DefaultNativeError;
extendedErrorCode = rc;
}
else
{
message = sqlite3_errmsg(db);
message = sqlite3_errmsg(db).utf8_to_string();
extendedErrorCode = sqlite3_extended_errcode(db);
}

Expand Down
4 changes: 2 additions & 2 deletions src/Microsoft.Data.Sqlite.Core/SqliteParameterReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ protected override long GetInt64Core(int ordinal)
=> sqlite3_value_int64(_values[ordinal]);

protected override string GetStringCore(int ordinal)
=> sqlite3_value_text(_values[ordinal]);
=> sqlite3_value_text(_values[ordinal]).utf8_to_string();

protected override byte[] GetBlobCore(int ordinal)
=> sqlite3_value_blob(_values[ordinal]);
=> sqlite3_value_blob(_values[ordinal]).ToArray();

protected override int GetSqliteType(int ordinal)
=> sqlite3_value_type(_values[ordinal]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -977,6 +977,10 @@ public override async Task Decimal_cast_to_double_works(bool isAsync)
WHERE CAST(""p"".""UnitPrice"" AS REAL) > 100.0");
}

[ConditionalTheory(Skip = "SQLite bug")]
public override Task Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_2(bool isAsync)
=> base.Project_single_element_from_collection_with_multiple_OrderBys_Take_and_FirstOrDefault_2(isAsync);

private void AssertSql(params string[] expected)
=> Fixture.TestSqlLoggerFactory.AssertBaseline(expected);
}
Expand Down
6 changes: 3 additions & 3 deletions test/Microsoft.Data.Sqlite.Tests/SqliteConnectionTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,14 @@ public void Open_works_when_memory_shared()
[Fact]
public void Open_works_when_password()
{
switch (SQLitePCLExtensions.GetProviderName())
switch (SQLitePCL.raw.GetNativeLibraryName())
{
case "SQLite3Provider_e_sqlite3":
case "e_sqlite3":
Open_works_when_password_e_sqlite3();
break;

// NB: Change project dependencies to test this
case "SQLite3Provider_sqlcipher":
case "e_sqlcipher":
Open_works_when_password_sqlcipher();
break;
}
Expand Down

0 comments on commit 9b0d6e0

Please sign in to comment.