public void Ctor_sets_message_and_errorCode()
        {
            var ex = new SqliteException("test", 1);

            Assert.Equal("test", ex.Message);
            Assert.Equal(1, ex.SqliteErrorCode);
        }
Exemplo n.º 2
0
        public virtual Stream GetStream(int ordinal)
        {
            if (ordinal < 0 ||
                ordinal >= FieldCount)
            {
                throw new ArgumentOutOfRangeException(nameof(ordinal), ordinal, message: null);
            }

            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++)
            {
                if (i == ordinal)
                {
                    continue;
                }

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

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

                var columnName = sqlite3_column_origin_name(Handle, i).utf8_to_string();
                if (columnName == "rowid")
                {
                    rowidOrdinal = i;
                    break;
                }

                var rc = sqlite3_table_column_metadata(
                    _connection.Handle,
                    databaseName,
                    tableName,
                    columnName,
                    out var dataType,
                    out var collSeq,
                    out var notNull,
                    out var primaryKey,
                    out var autoInc);
                SqliteException.ThrowExceptionForRC(rc, _connection.Handle);
                if (string.Equals(dataType, "INTEGER", StringComparison.OrdinalIgnoreCase) &&
                    primaryKey != 0)
                {
                    rowidOrdinal = i;
                    break;
                }
            }

            if (rowidOrdinal < 0)
            {
                return(new MemoryStream(GetCachedBlob(ordinal), false));
            }

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

            return(new SqliteBlob(_connection, blobTableName, blobColumnName, rowid, readOnly: true));
        }
 /// <summary>Enables extension loading on the connection.</summary>
 /// <param name="enable">true to enable; false to disable</param>
 /// <seealso href="http://sqlite.org/loadext.html">Run-Time Loadable Extensions</seealso>
 public virtual void EnableExtensions(bool enable = true)
 {
     if (this._db == null || this._db.ptr == IntPtr.Zero)
         throw new InvalidOperationException("CallRequiresOpenConnection"+((object)nameof(EnableExtensions)));
     SqliteException.ThrowExceptionForRC(raw.sqlite3_enable_load_extension(this._db, enable ? 1 : 0), this._db);
 }
Exemplo n.º 4
0
        public virtual Stream GetStream(int ordinal, bool writable)
        {
            if (ordinal < 0 || ordinal >= FieldCount)
            {
                throw new ArgumentOutOfRangeException(nameof(ordinal), ordinal, message: null);
            }

            var blobDatabaseName = raw.sqlite3_column_database_name(_stmt, ordinal);
            var blobTableName    = raw.sqlite3_column_table_name(_stmt, ordinal);

            var rowidOrdinal = -1;

            for (var i = 0; i < FieldCount; i++)
            {
                if (i == ordinal)
                {
                    continue;
                }

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

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

                var columnName = raw.sqlite3_column_origin_name(_stmt, i);
                if ((columnName == "rowid") || (columnName == "_rowid_") || (columnName == "oid"))
                {
                    rowidOrdinal = i;
                    break;
                }

                var rc = raw.sqlite3_table_column_metadata(
                    _connection.Handle,
                    databaseName,
                    tableName,
                    columnName,
                    out var dataType,
                    out var collSeq,
                    out var notNull,
                    out var primaryKey,
                    out var autoInc);
                SqliteException.ThrowExceptionForRC(rc, _connection.Handle);
                if ((dataType == "INTEGER") && (primaryKey != 0))
                {
                    rowidOrdinal = i;
                    break;
                }
            }

            if (rowidOrdinal < 0)
            {
                if (writable)
                {
                    throw new InvalidOperationException(Resources.WritableStreamNotSupported);
                }

                return(new MemoryStream(GetCachedBlob(ordinal), false));
            }

            var blobColumnName = raw.sqlite3_column_origin_name(_stmt, ordinal);
            var rowid          = GetInt32(rowidOrdinal);

            return(new SqliteBlob(_connection, blobTableName, blobColumnName, rowid, writable));
        }
Exemplo n.º 5
0
        public virtual Stream GetStream(int ordinal)
        {
            if (ordinal < 0 ||
                ordinal >= FieldCount)
            {
                throw new ArgumentOutOfRangeException(nameof(ordinal), ordinal, message: null);
            }

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

            if (!_rowidOrdinal.HasValue)
            {
                _rowidOrdinal = -1;
                var pkColumns = -1L;

                for (var i = 0; i < FieldCount; i++)
                {
                    if (i == ordinal)
                    {
                        continue;
                    }

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

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

                    var columnName = sqlite3_column_origin_name(Handle, i).utf8_to_string();
                    if (columnName == "rowid")
                    {
                        _rowidOrdinal = i;
                        break;
                    }

                    var rc = sqlite3_table_column_metadata(
                        _connection.Handle,
                        databaseName,
                        tableName,
                        columnName,
                        out var dataType,
                        out var collSeq,
                        out var notNull,
                        out var primaryKey,
                        out var autoInc);
                    SqliteException.ThrowExceptionForRC(rc, _connection.Handle);
                    if (string.Equals(dataType, "INTEGER", StringComparison.OrdinalIgnoreCase) &&
                        primaryKey != 0)
                    {
                        if (pkColumns < 0L)
                        {
                            using (var command = _connection.CreateCommand())
                            {
                                command.CommandText = "SELECT COUNT(*) FROM pragma_table_info($table) WHERE pk != 0;";
                                command.Parameters.AddWithValue("$table", tableName);

                                pkColumns = (long)command.ExecuteScalar() !;
                            }
                        }

                        if (pkColumns == 1L)
                        {
                            _rowidOrdinal = i;
                            break;
                        }
                    }
                }

                Debug.Assert(_rowidOrdinal.HasValue);
            }

            if (_rowidOrdinal.Value < 0)
            {
                return(new MemoryStream(GetCachedBlob(ordinal), false));
            }

            var blobColumnName = sqlite3_column_origin_name(Handle, ordinal).utf8_to_string();
            var rowid          = GetInt64(_rowidOrdinal.Value);

            return(new SqliteBlob(_connection, blobDatabaseName, blobTableName, blobColumnName, rowid, readOnly: true));
        }
Exemplo n.º 6
0
 public void ThrowExceptionForRC_does_nothing_when_non_error(int rc)
 {
     SqliteException.ThrowExceptionForRC(rc, null);
 }