copiousfreetime / amalgalite

SQLite database engine embedded in a ruby extension.

This URL has Read+Write access

amalgalite / examples / schema-info.rb
100644 35 lines (29 sloc) 1.083 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env ruby
 
require 'rubygems'
require 'amalgalite'
 
db_name = ARGV.shift
unless db_name
  puts "Usage: #{File.basename($0)} dbname"
  exit 1
end
db = Amalgalite::Database.new( db_name )
col_info = %w[ default_value declared_data_type collation_sequence_name not_null_constraint primary_key auto_increment ]
max_width = col_info.collect { |c| c.length }.sort.last
 
db.schema.tables.keys.sort.each do |table_name|
  puts "Table: #{table_name}"
  puts "=" * 42
  db.schema.tables[table_name].columns.each_pair do |col_name, col|
    puts " Column : #{col.name}"
    col_info.each do |ci|
      puts " |#{ci.rjust( max_width, "." )} : #{col.send( ci )}"
    end
    puts
  end
 
  db.schema.tables[table_name].indexes.each_pair do |idx_name, index|
    puts " Index : #{index.name}"
    puts " |#{"sequence_number".rjust( max_width, "." )} : #{index.sequence_number}"
    puts " |#{"is unique?".rjust( max_width, ".")} : #{index.unique?}"
    puts " |#{"columns".rjust( max_width, ".")} : #{index.columns.collect { |c| c.name }.join(',') }"
    puts
  end
end