Class: AlPersistRDB
Overview
データ永続化 RDB共通クラス
Direct Known Subclasses
AlPersistMysql, AlPersistMysql2, AlPersistPostgres, AlPersistSqlite
Instance Attribute Summary collapse
-
#column ⇒ String
検索フィールド名.
-
#table ⇒ String
readonly
テーブル名.
Attributes inherited from AlPersist
#persist_base, #pkeys, #result, #search_condition, #values
Instance Method Summary collapse
-
#all ⇒ Array<AlPersist>
登録データをすべて読み込む。.
-
#create(values = nil) ⇒ Boolean
データをRDBへ、新規保存する。.
-
#delete(values = nil) ⇒ Boolean
キーの合致するRDB内のデータを、削除する。.
-
#entry(values = nil) ⇒ Boolean
キーの合致するデータがあれば更新し、なければ新規登録する。.
-
#initialize(base, tname, keys = nil) ⇒ AlPersistRDB
constructor
constructor.
-
#read(values = nil) ⇒ Boolean
キーを指定してデータを読み込み、内部(@values) に保持する。.
-
#search(param = {}) ⇒ Array<AlPersist>
登録データを選択的に読み込む。.
-
#select(tuple, sql_part, param = {}) ⇒ Array<AlPersist>
selectを直接発行して登録データを選択的に読み込む。.
-
#update(values = nil) ⇒ Boolean
キーの合致するRDB内のデータを、更新する。.
Methods inherited from AlPersist
#[], #[]=, #get_next_offset, #get_previous_offset, #pkey
Constructor Details
#initialize(base, tname, keys = nil) ⇒ AlPersistRDB
constructor
32 33 34 35 36 |
# File 'lib/al_persist_rdb.rb', line 32 def initialize( base, tname, keys = nil ) super( base, keys ) @table = tname @column = "*" end |
Instance Attribute Details
#column ⇒ String
Returns 検索フィールド名.
22 23 24 |
# File 'lib/al_persist_rdb.rb', line 22 def column @column end |
#table ⇒ String (readonly)
Returns テーブル名.
19 20 21 |
# File 'lib/al_persist_rdb.rb', line 19 def table @table end |
Instance Method Details
#all ⇒ Array<AlPersist>
登録データをすべて読み込む。
データ1件を1つのAlPersistオブジェクトとして配列で返す。 一件もデータがない場合は、空の配列を返す。 read()と違って自分は何も変わらず、自分の複製を生産する。
177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/al_persist_rdb.rb', line 177 def all() rows = @persist_base.select( "select #{@column} from #{@table};" ) ret = [] rows.each { |row| a = self.dup a.values = row ret << a } @search_condition = { :total_rows=>ret.size, :num_rows=>ret.size } return ret end |
#create(values = nil) ⇒ Boolean
データをRDBへ、新規保存する。
引数の指定があれば、その値を一旦内部値(@values)にしたうえで、 内部値を新規保存する。
87 88 89 90 91 92 |
# File 'lib/al_persist_rdb.rb', line 87 def create( values = nil ) @values = values if values @result = @persist_base.insert( @table, @values ) return @result[:cmdtuples] == 1 end |
#delete(values = nil) ⇒ Boolean
キーの合致するRDB内のデータを、削除する。
valuesには、プライマリキー以外の値が含まれていてもよく、単に無視される。 引数の指定があれば、その値を一旦内部値(@values)にしたうえで削除する。
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/al_persist_rdb.rb', line 132 def delete( values = nil ) @values = values if values if @pkeys.empty? @result = @persist_base.delete( @table, @values ) else where_hash = {} # exclude keys @pkeys.each { |k| raise "No key included in value. #{k}" if ! @values[k] where_hash[k] = @values[k] } @result = @persist_base.delete( @table, where_hash ) end return @result[:cmdtuples] == 1 end |
#entry(values = nil) ⇒ Boolean
キーの合致するデータがあれば更新し、なければ新規登録する。
引数の指定があれば、その値を一旦内部値(@values)にしたうえで登録する。
162 163 164 165 |
# File 'lib/al_persist_rdb.rb', line 162 def entry( values = nil ) delete( values ) create() end |
#read(values = nil) ⇒ Boolean
キーを指定してデータを読み込み、内部(@values) に保持する。
valuesには、プライマリキー以外の値が含まれていてもよく、単に無視される。
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/al_persist_rdb.rb', line 47 def read( values = nil ) @values = values if values @search_condition = {} return false if @values.empty? # # exclude keys # val = {} if ! @pkeys.empty? @pkeys.each { |k| return false if ! @values.key?( k ) val[k] = @values[k] } else @values.each { |k,v| val[k.to_sym] = v } end # # run sql # rows = @persist_base.select( "select #{@column} from #{@table} _WHERE_;", val ) return false if rows.empty? @values = rows[0] return true end |
#search(param = {}) ⇒ Array<AlPersist>
登録データを選択的に読み込む。
データ1件を1つのAlPersistオブジェクトとして配列で返す。 一件もデータがない場合は、空の配列を返す。 read()と違って自分は何も変わらず、自分の複製を生産する。 :total_rowsがtrueの時は、全件数も取得する。 :total_rowsが数値の時は、それを全件数の値として採用する。
211 212 213 214 215 |
# File 'lib/al_persist_rdb.rb', line 211 def search( param = {} ) return search_common( param, "select #{@column} from #{@table} #{param[:where] ? '_WHERE_' : ''}", "select count(*) as numrows from #{@table} #{param[:where] ? '_WHERE_' : ''};" ) end |
#select(tuple, sql_part, param = {}) ⇒ Array<AlPersist>
selectを直接発行して登録データを選択的に読み込む。
238 239 240 241 242 |
# File 'lib/al_persist_rdb.rb', line 238 def select( tuple, sql_part, param = {} ) return search_common( param, "select #{tuple} #{sql_part}", "select count(*) as numrows #{sql_part};" ) end |
#update(values = nil) ⇒ Boolean
キーの合致するRDB内のデータを、更新する。
引数の指定があれば、その値を一旦内部値(@values)にしたうえで更新する。
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/al_persist_rdb.rb', line 103 def update( values = nil ) @values = values if values return false if @pkeys.empty? value_hash = @values.dup where_hash = {} # exclude key @pkeys.each { |k| raise "No key included in value. #{k}" if ! value_hash[k] where_hash[k] = value_hash[k] value_hash.delete( k ) } return true if value_hash.empty? @result = @persist_base.update( @table, value_hash, where_hash ) return @result[:cmdtuples] == 1 end |