class Amalgalite::SQLite3::Database::Stat

Ecapuslate a SQLite3 Database stat

A Stat represents a single Database Status code and its current highwater mark.

Some stats may not have a current or a highwater value, in those cases the associated has_current? or has_highwater? method returns false and the current or highwater method also returns nil.

Attributes

code[R]
name[R]

Public Class Methods

new( api_db, name ) click to toggle source
# File lib/amalgalite/sqlite3/database/status.rb, line 15
def initialize( api_db, name )
  @name      = name
  @code      = ::Amalgalite::SQLite3::Constants::DBStatus.value_from_name( name )
  @current   = nil
  @highwater = nil
  @api_db    = api_db 
end

Public Instance Methods

current() click to toggle source
# File lib/amalgalite/sqlite3/database/status.rb, line 23
def current
  update!
  return @current
end
highwater() click to toggle source
# File lib/amalgalite/sqlite3/database/status.rb, line 28
def highwater
  update!
  return @highwater
end
reset!() click to toggle source

reset the given stat's highwater mark. This will also populate the _@current_ and _@highwater_ instance variables

# File lib/amalgalite/sqlite3/database/status.rb, line 37
def reset!
  update!( true )
end
update!( reset = false ) → nil click to toggle source

Populates the _@current_ and _@higwater_ instance variables of the given Database Stat object with the values from the sqlite3_db_status call. If reset it true then the highwater mark for the stat is reset

VALUE am_sqlite3_database_stat_update_bang( int argc, VALUE *argv, VALUE self )
{
    int current    = -1;
    int highwater  = -1;
    int reset_flag = 0;
    int status_op  = FIX2INT( rb_iv_get( self, "@code" ) );
    int rc;

    am_sqlite3    *am_db;

    VALUE reset    = Qfalse;
    VALUE db       = rb_iv_get( self, "@api_db" );

    Data_Get_Struct(db, am_sqlite3, am_db);

    if ( argc > 0 ) {
        reset = argv[0];
        reset_flag = ( Qtrue == reset ) ? 1 : 0 ;
    }

    rc = sqlite3_db_status( am_db->db, status_op, &current, &highwater, reset_flag );

    if ( SQLITE_OK != rc ) {
        VALUE n    = rb_iv_get( self, "@name");
        char* name = StringValuePtr( n );
        rb_raise(eAS_Error, "Failure to retrieve database status for %s : [SQLITE_ERROR %d] \n", name, rc);
    }

    rb_iv_set( self, "@current", INT2NUM( current ) );
    rb_iv_set( self, "@highwater", INT2NUM( highwater) );

    return Qnil;
}