Пример #1
0
 /// <summary> Sqlite 3 column type. </summary>
 /// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
 /// <param name="stmt"> The statement. </param>
 /// <param name="index"> Zero-based index of the. </param>
 /// <returns> A SqliteColumnType. </returns>
 internal SqliteColumnType sqlite3_column_type(SqliteStatementHandle stmt, int index)
 {
     if (stmt == null)
     {
         throw new ArgumentNullException(nameof(stmt));
     }
     stmt.CheckMaintenanceMode();
     return((SqliteColumnType)DbProviderOperations.sqlite3_column_type(stmt.Statement, index));
 }
Пример #2
0
 /// <summary> Sqlite 3 reset. </summary>
 /// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
 /// <param name="stmt"> The statement. </param>
 /// <returns> A SqliteResultCode. </returns>
 internal SqliteResultCode sqlite3_reset(SqliteStatementHandle stmt)
 {
     if (stmt == null)
     {
         throw new ArgumentNullException(nameof(stmt));
     }
     stmt.CheckMaintenanceMode();
     return((SqliteResultCode)DbProviderOperations.sqlite3_reset(stmt.Statement));
 }
Пример #3
0
 /// <summary> Sqlite 3 column count. </summary>
 /// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
 /// <param name="stmt"> The statement. </param>
 /// <returns> An int. </returns>
 internal int sqlite3_column_count(SqliteStatementHandle stmt)
 {
     if (stmt == null)
     {
         throw new ArgumentNullException(nameof(stmt));
     }
     stmt.CheckMaintenanceMode();
     return(DbProviderOperations.sqlite3_column_count(stmt.Statement));
 }
Пример #4
0
 /// <summary> Sqlite 3 column BLOB. </summary>
 /// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
 /// <param name="stmt"> The statement. </param>
 /// <param name="index"> Zero-based index of the. </param>
 /// <returns> A byte[]. </returns>
 internal byte[] sqlite3_column_blob(SqliteStatementHandle stmt, int index)
 {
     if (stmt == null)
     {
         throw new ArgumentNullException(nameof(stmt));
     }
     stmt.CheckMaintenanceMode();
     return(DbProviderOperations.sqlite3_column_blob(stmt.Statement, index));
 }
Пример #5
0
 /// <summary> Sqlite 3 bind text. </summary>
 /// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
 /// <param name="stmt"> The statement. </param>
 /// <param name="index"> Zero-based index of the. </param>
 /// <param name="value"> The value. </param>
 /// <returns> A SqliteResultCode. </returns>
 internal SqliteResultCode sqlite3_bind_text(SqliteStatementHandle stmt, int index, string value)
 {
     if (stmt == null)
     {
         throw new ArgumentNullException(nameof(stmt));
     }
     stmt.CheckMaintenanceMode();
     return((SqliteResultCode)DbProviderOperations.sqlite3_bind_text(stmt.Statement, index, value));
 }
Пример #6
0
 /// <summary> Sqlite 3 bind parameter index. </summary>
 /// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
 /// <param name="stmt"> The statement. </param>
 /// <param name="name"> The name. </param>
 /// <returns> An int. </returns>
 internal int sqlite3_bind_parameter_index(SqliteStatementHandle stmt, string name)
 {
     if (stmt == null)
     {
         throw new ArgumentNullException(nameof(stmt));
     }
     stmt.CheckMaintenanceMode();
     return(DbProviderOperations.sqlite3_bind_parameter_index(stmt.Statement, name));
 }
Пример #7
0
        /// <summary> Gets. </summary>
        /// <exception cref="ObjectDisposedException"> Thrown when a supplied object has been disposed. </exception>
        /// <exception cref="ArgumentOutOfRangeException"> Thrown when one or more arguments are outside
        ///     the required range. </exception>
        /// <exception cref="SqliteException"> Thrown when a Sqlite error condition occurs. </exception>
        /// <param name="index"> Zero-based index of the. </param>
        /// <param name="cancellationToken"> The cancellation token. </param>
        /// <returns> A SqliteStatementHandle. </returns>
        public SqliteStatementHandle Get(int index, CancellationToken cancellationToken)
        {
            if (_statements == null)
            {
                throw new ObjectDisposedException(GetType().Name);
            }
            if (index < 0 || index > _statements.Count)
            {
                throw new ArgumentOutOfRangeException(nameof(index));
            }
            if (index < _statements.Count)
            {
                return(_statements[index]);
            }
            if (_statements.Count > 0 && index == _statements.Count)
            {
                //statements are all done
                return(null);
            }

            Random           random = null;
            SqliteResultCode resultCode;

            do
            {
                var statement = new SqliteStatementHandle(_database, _forMaintenance);
                resultCode = statement.PrepareStatement(_commandText);

                switch (resultCode)
                {
                case SqliteResultCode.Ok:
                    _statements.Add(statement);
                    break;

                case SqliteResultCode.Busy:
                case SqliteResultCode.Locked:
                case SqliteResultCode.CantOpen:
                    if (cancellationToken.IsCancellationRequested)
                    {
                        return(null);
                    }
                    if (random == null)
                    {
                        random = new Random();
                    }
                    Thread.Sleep(random.Next(1, 150));
                    break;

                default:
                    throw new SqliteException(resultCode, _database);
                }
            } while (!resultCode.IsSuccessCode());

            return(_statements[index]);
        }
Пример #8
0
 /// <summary> Sqlite 3 step return rowid. </summary>
 /// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
 /// <param name="db"> The database. </param>
 /// <param name="stmt"> The statement. </param>
 /// <param name="code"> [out] The code. </param>
 /// <returns> A long. </returns>
 internal long sqlite3_step_return_rowid(SqliteDatabaseHandle db, SqliteStatementHandle stmt, out SqliteResultCode code)
 {
     if (db == null)
     {
         throw new ArgumentNullException(nameof(db));
     }
     if (stmt == null)
     {
         throw new ArgumentNullException(nameof(stmt));
     }
     lock (_stepLocker) {
         stmt.CheckMaintenanceMode();
         code = (SqliteResultCode)DbProviderOperations.sqlite3_step(stmt.Statement);
         return(code.IsSuccessCode()
             ? DbProviderOperations.sqlite3_last_insert_rowid(stmt.ForMaintenance ? db.MaintenanceDb : db.Db)
             : -1);
     }
 }