#ENCODING: cp1250 =begin rdoc Testcode sequel *http://sequel.rubyforge.org/rdoc/files/doc/cheat_sheet_rdoc.html =end require 'rake' require 'sequel' #3.13.0 #======connect=========== desc 'Connect to database' task :connect => :connect_sqlite #======connect_sqlite=========== task :connect_sqlite do DB = Sequel.sqlite() =begin *Ohne Dateiname wird die DB im Hauptspeicher angelegt. *Insbesonders beim Synchron arbeiten kann es deutlich schneller sein. =end end #task connect_sqlite #======connect_odbc=========== task :connect_odbc do #dsn, username and password must be known. DB = Sequel.connect( :adapter=>'ado', :host=> $server, :database=>$dsn, :user=> $username, :password=>$password ) =begin =end end #task :connect_odbc #======disconnect=========== task :disconnect do DB.disconnect =begin =end end #task disconnect #======create_model=========== task :create_model => :connect do class Film < Sequel::Model(:films) end =begin #Model Film verweist auf Tabelle films. #Abweichende Tabellennamen sind möglich =end end #task create_model #======create_tables=========== task :create_tables => :connect do DB.create_table :films do #~ primary_key :fid column :title, :string column :year, :string, :size => 4 end =begin Das Verzichten auf den primary_key mag nicht mit jeder DB funktionieren. =end end #task create_tables #======fill_db=========== desc 'DB mit Testwerten füllen' task :fill_db => [:create_tables, :create_model] do YAML.load(File.read('filmdaten.yaml')).each{|film| DB[:films].insert( :title => film['title'], :year => film['year']) } =begin =end end #task fill_db #======insert_values=========== task :insert_values => [:create_tables, :create_model] do Film.insert( :title => 'Three Ages', :year => 1923 ) =begin =end end #task insert_values #======select2array=========== task :select2array => :fill_db do #Model Film wurde bereits definiert res = Film.all puts res.inspect[0,40] =begin Die Definition von Models ist möglich. =end end #task select2array #======select2block=========== task :select2block => :fill_db do #Model Film wurde bereits definiert Film.each{|film| p film } =begin =end end #task select2block #======select_where=========== task :select_where => :fill_db do #Model Film wurde bereits definiert Film.filter( :year => 1923 ).all Film.where( :year => 1923 ).each{|f| p f } =begin =end end #task select_where #======select_where_gt=========== task :select_where_gt => [:create_model, :fill_db] do #Model Film wurde bereits definiert res = Film.where{ :year > 1927 }.all res = Film.filter{ :year > 1927 }.each{|f| p f } =begin *Mit Blöcken sind weitere Vergleiche möglich =end end #task select_where_gt #======select_where_in=========== task :select_where_in => [:create_model, :fill_db] do #Model Film wurde bereits definiert Film.where( :year => [ 1920, 1923 ] ).all Film.filter( :year => [ 1920, 1923 ] ).each{|f| p f } =begin =end end #task select_where_in #======select_where_range=========== task :select_where_range => [:create_model, :fill_db] do #Model Film wurde bereits definiert Film.where( :year => 1920..1923 ).all Film.filter( :year => 1920..1923 ).each{ |f| p f } =begin =end end #task select_where_range #======select_col=========== task :select_col => [:create_model, :fill_db] do #Model Film wurde bereits definiert Film.select(:title).each{|f| p f } =begin =end end #task select_col #======update=========== task :update => [:create_model, :fill_db] do #Model Film wurde bereits definiert Film.update(:year => 'egal') =begin *Das Update-Kommando gibt die Anzahl geänderter Datensätze zurück. =end end #task update #======no_model_insert=========== task :no_model_insert => :create_tables do DB[:films].insert( :title => 'Three Ages', :year => 1923 ) =begin Insert funktioniert auch ohne Model =end end #task no_model_insert #======no_model_select2array=========== task :no_model_select2array => :fill_db do res = DB[:films].all puts res.inspect[0,45] =begin =end end #task no_model_select2array #======no_model_select2block=========== task :no_model_select2block => :fill_db do DB[:films].each{|film| p film } =begin =end end #task no_model_select2block #======no_model_select_where=========== task :no_model_select_where => :fill_db do DB[:films].filter( :year => 1923 ).all DB[:films].where( :year => 1923 ).each{|f| p f } =begin Select funktioniert auch ohne Model =end end #task no_model_select_where #======no_model_select_col=========== task :no_model_select_col => :fill_db do DB[:films].select(:title).each{|f| p f } =begin Select funktioniert auch ohne Model =end end #task no_model_select_col #======no_model_update=========== task :no_model_update => :fill_db do DB[:films].update(:year => 'egal') =begin *Update funktioniert auch ohne Model *Das Update-Kommando gibt die Anzahl geänderter Datensätze zurück. =end end #task no_model_update #======create_view=========== task :create_view => [:create_tables, :fill_db] do DB.create_view(:films1923, DB[:films]. where(:year => 1923). select(:title) ) DB[:films1923].each{|f| p f} =begin =end end #task create_view #======check_schema=========== desc 'Tabellenbeschreibung erhalten' task :check_schema => [:create_tables] do puts DB.schema(:films).to_yaml =begin =end end #task check_schema #======check_schema_columns=========== desc 'Spalten einer Tabelle erhalten' task :check_schema_columns => [:create_tables] do p DB[:films].columns =begin =end end #task check_schema #======use_sql=========== task :use_sql => :fill_db do puts "Before: #{DB.tables.inspect}" DB.run( "create table actors ( id integer primary key, name varchar(255) )" ) puts "After: #{DB.tables.inspect}" =begin *SQL-Kommandos können mit DB#run gestartet werden. =end end #task use_sql #======use_sql_select=========== task :use_sql_select => :fill_db do DB.fetch( "select title from films where year = 1923" ){|f| p f } =begin *SQL-selects können mit fetch gestartet werden. *Ohne Block kann die Anweisung in einer Variablen gespeichert und später ausgeführt werden. =end end #task use_sql_select #======use_sql_inverse=========== task :use_sql_inverse => :fill_db do puts Film.select(:title). where(:year => 1923).sql =begin *Das Kommando #sql gibt für die Aktionen die entsprechenden SQL-Kommandos zurück. =end end #task use_sql_inverse # ================= #~ task :default => :connect #~ task :default => :create_model #~ task :default => :create_tables #~ task :default => :fill_db #~ task :default => :insert_values #~ task :default => :select2array #~ task :default => :select2block #~ task :default => :select_where #~ task :default => :select_where_gt #~ task :default => :select_where_in #~ task :default => :select_where_range #~ task :default => :select_col #~ task :default => :update #~ task :default => :no_model_insert #~ task :default => :no_model_select2array #~ task :default => :no_model_select2block #~ task :default => :no_model_select_where #~ task :default => :no_model_select_col #~ task :default => :no_model_update #~ task :default => :create_view task :default => :check_schema #~ task :default => :use_sql #~ task :default => :use_sql_select #~ task :default => :use_sql_inverse if $0 == __FILE__ Rake.application[:default].invoke end __END__ task table_info