public void BindProperty(SqliteStatement statement, int index, byte[] value)
 {
     statement.BindBlob(index, value);
 }
        public void BindProperty(SqliteStatement statement, int index, ulong value)
        {
            var n = unchecked ((long)value);

            statement.BindInt64(index, n);
        }
        public async Task General()
        {
            const int recordCount = 10;

            using (var dbGenerator = new DbGenerator(DbFilename))
            {
                var dbInterface = new SqliteInterface(dbGenerator.CreateDb());

                const string insertSql = "INSERT INTO Frog (Name, DateOfBirth) VALUES (@Name, @DateOfBirth);" +
                                         "SELECT last_insert_rowid();";

                const string readSingleSql = "SELECT * FROM Frog WHERE Id = @Id";
                const string readAllSql    = "SELECT * FROM Frog";
                const string updateSql     = "UPDATE Frog SET Name = @NewName WHERE Id BETWEEN @FromId AND @ToId";

                var ids = new List <long>();
                for (long i = 1; i <= recordCount; i++)
                {
                    var nameParam        = new SqliteParameter("@Name", $"Kermit{i}");
                    var dateOfBirthParam = new SqliteParameter("@DateOfBirth", DateTime.Today.AddDays(-i));

                    var statement = new SqliteStatement(insertSql, nameParam, dateOfBirthParam);
                    var id        = await dbInterface.ExecuteScalarAsync(statement).ConfigureAwait(false);

                    // it's a new DB so should be the case, depending on this for following tests
                    Assert.Equal(i, id);
                    ids.Add((long)id);
                }

                Assert.Equal(recordCount, ids.Count);

                foreach (var id in ids)
                {
                    var idParam   = new SqliteParameter("@Id", id);
                    var statement = new SqliteStatement(readSingleSql, idParam);

                    using (var reader = await dbInterface.GetReaderAsync(statement).ConfigureAwait(false))
                    {
                        Assert.True(await reader.ReadAsync().ConfigureAwait(false));
                        Assert.Equal(id, reader["Id"]);
                        Assert.Equal($"Kermit{id}", reader["Name"]);
                        Assert.Equal(DateTime.Today.AddDays(-id), Convert.ToDateTime(reader["DateOfBirth"]));
                    }
                }

                var updateStatement = new SqliteStatement(updateSql, new SqliteParameter("@NewName", "Frank"),
                                                          new SqliteParameter("@FromId", 5), new SqliteParameter("@ToId", 8));

                var affected = await dbInterface.ExecuteNonQueryAsync(updateStatement).ConfigureAwait(false);

                Assert.Equal(4, affected);

                var readAllStatement = new SqliteStatement(readAllSql);
                using (var reader = await dbInterface.GetReaderAsync(readAllStatement).ConfigureAwait(false))
                {
                    var count = 0;
                    while (await reader.ReadAsync().ConfigureAwait(false))
                    {
                        count++;
                        var id = (long)reader["Id"];
                        if (id >= 5 && id <= 8)
                        {
                            Assert.Equal("Frank", reader["Name"]);
                        }
                        else
                        {
                            Assert.Equal($"Kermit{id}", reader["Name"]);
                        }
                    }

                    Assert.Equal(recordCount, count);
                }
            }
        }
Beispiel #4
0
 internal override int GetCursorForTable(SqliteStatement stmt, int database, int rootPage)
 {
     throw new NotImplementedException();
 }
Beispiel #5
0
 internal override long GetRowIdForCursor(SqliteStatement stmt, int cursor)
 {
     throw new NotImplementedException();
 }
Beispiel #6
0
 internal override void Bind_Double(SqliteStatement stmt, int index, double value)
 {
     this._bindValue(stmt, index, value);
 }
Beispiel #7
0
 internal override string ColumnTableName(SqliteStatement stmt, int index)
 {
     throw new NotImplementedException();
 }
Beispiel #8
0
 internal override int ColumnCount(SqliteStatement stmt)
 {
     lock (dbLock) {
         return(stmt._sqlite_stmt.ColumnCount);
     }
 }
Beispiel #9
0
 internal override string ColumnName(SqliteStatement stmt, int index)
 {
     lock (dbLock) {
         return(stmt._sqlite_stmt.ColumnName(index));
     }
 }
Beispiel #10
0
 internal override void Bind_DateTime(SqliteStatement stmt, int index, DateTime dt)
 {
     this._bindValue(stmt, index, dt.ToString());
 }
Beispiel #11
0
 internal override int Bind_ParamCount(SqliteStatement stmt)
 {
     return(stmt.ParamList.Count);
 }
Beispiel #12
0
 internal override void Bind_Blob(SqliteStatement stmt, int index, byte[] blobData)
 {
     this._bindValue(stmt, index, blobData);
 }
Beispiel #13
0
 internal override void Bind_Text(SqliteStatement stmt, int index, string value)
 {
     this._bindValue(stmt, index, value);
 }
Beispiel #14
0
 internal override void Bind_Int64(SqliteStatement stmt, int index, long value)
 {
     this._bindValue(stmt, index, value);
 }
Beispiel #15
0
 public void BindProperty(SqliteStatement statement, int index, ushort value)
 {
     statement.BindInt64(index, value);
 }
Beispiel #16
0
 internal override int ColumnIndex(SqliteStatement stmt, string columnName)
 {
     throw new NotImplementedException();
 }
Beispiel #17
0
 public void BindProperty(SqliteStatement statement, int index, float value)
 {
     statement.BindFloat64(index, value);
 }
Beispiel #18
0
 public void BindProperty(SqliteStatement statement, int index, string value)
 {
     statement.BindText(index, value);
 }