class Database

Constants

ResultSet

Public Class Methods

new(name) click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 216
def initialize(name)
  raise ArgumentError, "Database name cannot be nil" unless name
  @name = name
  connect name
end

Public Instance Methods

close() click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 281
def close
  @db = nil
  @tables = nil
end
columns(table) click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 232
def columns table
  raise ArgumentError, "#{$0}: table name cannot be nil" unless table
  columns, ignore = self.get_metadata table
  return columns
end
connect(name) click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 221
def connect name
  raise ArgumentError, "Database name cannot be nil" unless name
  @tables = nil
  @db = SQLite3::Database.new(name) 
end
execute_query(sql) click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 270
def execute_query sql
  columns, *rows = @db.execute2(sql)
  content = rows
  return nil if content.nil? or content[0].nil?
  datatypes = content[0].types 
  rs = ResultSet.new(content, columns, datatypes)
  return rs
end
get_data(sql) click to toggle source

runs sql query and returns an array of arrays

# File lib/cetusql/cli_sqlite.rb, line 262
def get_data sql
  #$log.debug "SQL: #{sql} "
  columns, *rows = @db.execute2(sql)
  #$log.debug "XXX COLUMNS #{sql}, #{rows.count}  "
  content = rows
  return content
end
Also aliased as: sql
get_metadata(table) click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 252
def get_metadata table
  raise ArgumentError, "#{$0}: table name cannot be nil" unless table
  sql =  "select * from #{table} limit 1"
  columns, *rows = @db.execute2(sql)
  content = rows
  return nil if content.nil? or content[0].nil?
  datatypes = content[0].types 
  return columns, datatypes
end
indexed_columns(table) click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 237
def indexed_columns table
  indexes = sql %Q{select sql from sqlite_master where type='index' and tbl_name = "#{table}" }
  return nil if indexes == []
  #pp indexes
  arr = []
  indexes.each do |ind|
    if ind.first.nil?
      arr << "auto?"
      next
    end
    m = ind.first.match /\((.*)\)/
    arr << m[1] if m
  end
  return arr.join(",")
end
sql(sql)
Alias for: get_data
sql_recent_rows(tablename) click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 278
def sql_recent_rows tablename
  sql =  "SELECT * from #{tablename} ORDER by rowid DESC LIMIT 100"
end
tables() click to toggle source
# File lib/cetusql/cli_sqlite.rb, line 226
def tables
  return @tables if @tables
  tables = sql "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
  tables.collect!{|x| x[0] }  ## 1.9 hack, but will it run on 1.8 ??
  @tables = tables
end