Class: Amalgalite::SQLite3::Stat

Inherits:
Object
  • Object
show all
Defined in:
lib/amalgalite/sqlite3/status.rb,
ext/amalgalite/c/amalgalite.c

Overview

A Stat represents a single 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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Stat



15
16
17
18
19
20
# File 'lib/amalgalite/sqlite3/status.rb', line 15

def initialize( name )
  @name      = name
  @code      = ::Amalgalite::SQLite3::Constants::Status.value_from_name( name )
  @current   = nil
  @highwater = nil
end

Instance Attribute Details

#codeObject (readonly)

Returns the value of attribute code.



13
14
15
# File 'lib/amalgalite/sqlite3/status.rb', line 13

def code
  @code
end

#nameObject (readonly)

Returns the value of attribute name.



12
13
14
# File 'lib/amalgalite/sqlite3/status.rb', line 12

def name
  @name
end

Instance Method Details

#currentObject



22
23
24
25
# File 'lib/amalgalite/sqlite3/status.rb', line 22

def current
  update!
  return @current
end

#highwaterObject



27
28
29
30
# File 'lib/amalgalite/sqlite3/status.rb', line 27

def highwater
  update!
  return @highwater
end

#reset!Object

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



36
37
38
# File 'lib/amalgalite/sqlite3/status.rb', line 36

def reset!
  update!( true )
end

#Amalgalite::SQLite3::Stat.update!(reset = false) ⇒ nil

Populates the @current and @higwater instance variables of self object with the values from the sqlite3_status call. If reset it true then the highwater mark for the stat is reset



164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'ext/amalgalite/c/amalgalite.c', line 164

VALUE am_sqlite3_stat_update_bang( int argc, VALUE *argv, VALUE self )
{
    int status_op  = -1;
    int current    = -1;
    int highwater  = -1;
    VALUE reset    = Qfalse;
    int reset_flag = 0;
    int rc;

    status_op  = FIX2INT( rb_iv_get( self, "@code" ) );
    if ( argc > 0 ) {
        reset = argv[0];
        reset_flag = ( Qtrue == reset ) ? 1 : 0 ;
    }

    rc = sqlite3_status( 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 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;
}