Class: AlPersistRDB

Inherits:
AlPersist show all
Defined in:
lib/al_persist_rdb.rb

Overview

データ永続化 RDB共通クラス

Direct Known Subclasses

AlPersistMysql, AlPersistPostgres, AlPersistSqlite

Instance Attribute Summary (collapse)

Attributes inherited from AlPersist

#persist_base, #pkeys, #result, #search_condition, #values

Instance Method Summary (collapse)

Methods inherited from AlPersist

#[], #[]=, #get_next_offset, #get_previous_offset, #pkey

Constructor Details

- (AlPersistRDB) initialize(base, tname, keys = nil)

constructor

Parameters:

  • base (AlRdbw)

    使用する RDB wrapper オブジェクト

  • tname (String)

    テーブル名

  • keys (Array<String,Symbol>, String, Symbol) (defaults to: nil)

    プライマリキー



31
32
33
34
35
# File 'lib/al_persist_rdb.rb', line 31

def initialize( base, tname, keys = nil )
  super( base, keys )
  @table = tname
  @column = "*"
end

Instance Attribute Details

- (String) column

Returns 検索フィールド名

Returns:

  • (String)

    検索フィールド名



21
22
23
# File 'lib/al_persist_rdb.rb', line 21

def column
  @column
end

- (String) table (readonly)

Returns テーブル名

Returns:

  • (String)

    テーブル名



18
19
20
# File 'lib/al_persist_rdb.rb', line 18

def table
  @table
end

Instance Method Details

- (Array<AlPersist>) all

Note:

登録データをすべて読み込む。

データ1件を1つのAlPersistオブジェクトとして配列で返す。 一件もデータがない場合は、空の配列を返す。 read()と違って自分は何も変わらず、自分の複製を生産する。

Returns:

  • (Array<AlPersist>)

    AlPersistオブジェクトの配列



175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/al_persist_rdb.rb', line 175

def all()
  rows = @persist_base.select( "select #{@column} from #{@table};" )

  ret = []
  rows.each do |row|
    a = self.dup
    a.values = row
    ret << a
  end

  @search_condition = { :total_rows=>ret.size, :num_rows=>ret.size }
  return ret
end

- (Boolean) create(values = nil)

Note:

データをRDBへ、新規保存する。

引数の指定があれば、その値を一旦内部値(@values)にしたうえで、 内部値を新規保存する。

Parameters:

  • values (Hash) (defaults to: nil)

    プライマリキーを含む保存する値のHash

Returns:

  • (Boolean)

    成功/失敗



86
87
88
89
90
91
# File 'lib/al_persist_rdb.rb', line 86

def create( values = nil )
  @values = values  if values

  @result = @persist_base.insert( @table, @values )
  return @result[:cmdtuples] == 1 ? true : false
end

- (Boolean) delete(values = nil)

Note:

キーの合致するRDB内のデータを、削除する。

valuesには、プライマリキー以外の値が含まれていてもよく、単に無視される。 引数の指定があれば、その値を一旦内部値(@values)にしたうえで削除する。

Parameters:

  • values (Hash) (defaults to: nil)

    プライマリキーを含むHash

Returns:

  • (Boolean)

    成功/失敗



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/al_persist_rdb.rb', line 130

def delete( values = nil )
  @values = values  if values

  if @pkeys.empty?
    @result = @persist_base.delete( @table, @values )

  else
    where_hash = {}

    # exclude keys
    @pkeys.each do |k|
      raise "No key included in value. #{k}"  if ! @values[k]
      where_hash[k] = @values[k]
    end

    @result = @persist_base.delete( @table, where_hash )
  end

  return @result[:cmdtuples] == 1 ? true : false
end

- (Boolean) entry(values = nil)

Note:

キーの合致するデータがあれば更新し、なければ新規登録する。

引数の指定があれば、その値を一旦内部値(@values)にしたうえで登録する。

Parameters:

  • values (Hash) (defaults to: nil)

    プライマリキーを含む保存する値のHash

Returns:

  • (Boolean)

    成功/失敗



160
161
162
163
# File 'lib/al_persist_rdb.rb', line 160

def entry( values = nil )
  delete( values )
  create()
end

- (Boolean) read(values = nil)

Note:

キーを指定してデータを読み込み、内部(@values) に保持する。

valuesには、プライマリキー以外の値が含まれていてもよく、単に無視される。

Parameters:

  • values (Hash) (defaults to: nil)

    プライマリキーを含むHash

Returns:

  • (Boolean)

    成功/失敗



46
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
# File 'lib/al_persist_rdb.rb', line 46

def read( values = nil )
  @values = values  if values
  @search_condition = {}
  return false  if @values.empty?

  #
  # exclude keys
  #
  val = {}
  if ! @pkeys.empty?
    @pkeys.each do |k|
      return false  if ! @values.key?( k )
      val[k] = @values[k]
    end
  else
    @values.each do |k,v|
      val[k.to_sym] = v
    end
  end

  #
  # run sql
  #
  rows = @persist_base.select( "select #{@column} from #{@table} _WHERE_;", val )
  return false  if rows.empty?

  @values = rows[0]
  return true
end

- (Array<AlPersist>) search(param = {})

Note:

登録データを選択的に読み込む。

データ1件を1つのAlPersistオブジェクトとして配列で返す。 一件もデータがない場合は、空の配列を返す。 read()と違って自分は何も変わらず、自分の複製を生産する。 :total_rowsがtrueの時は、全件数も取得する。 :total_rowsが数値の時は、それを全件数の値として採用する。

Parameters:

  • param (Hash) (defaults to: {})

    検索パラメータ

Options Hash (param):

  • :where (Hash)

    検索条件のハッシュ

  • :order_by (Hash, Array, String)

    並べ替え順

  • :limit (Integer)

    最大取得数

  • :offset (Integer)

    オフセット

  • :total_rows (Boolean)

    全件取得するか?

  • :total_rows (Integer)

    全件数のキャッシュ

Returns:

  • (Array<AlPersist>)

    Persistオブジェクトの配列

See Also:



209
210
211
212
213
# File 'lib/al_persist_rdb.rb', line 209

def search( param = {} )
  return search_common( param,
      "select #{@column} from #{@table} #{param[:where] ? '_WHERE_' : ''}",
      "select count(*) as numrows from #{@table} #{param[:where] ? '_WHERE_' : ''};" )
end

- (Array<AlPersist>) select(tuple, sql_part, param = {})

selectを直接発行して登録データを選択的に読み込む。

Examples:

datas = persist.select( "t1.*, t2.note",
   "from t1 inner join t2 using(id) where d=CURRENT_DATE"
   :order_by=>"create_date desc", :limit=>limit, :offset=>offset,
   :total_rows=>total_rows )

Parameters:

  • tuple (String)

    取得するタプル名

  • sql_part (String)

    from以降(from句含む)

  • param (Hash) (defaults to: {})

    その他パラメータ

Options Hash (param):

  • :where (Hash)

    検索条件のハッシュ

  • :where (Array)

    パラメータクエリためのパラメータ

  • :order_by (Hash, Array, String)

    並べ替え順

  • :limit (Integer)

    最大取得数

  • :offset (Integer)

    オフセット

  • :total_rows (Boolean)

    全件取得するか?

  • :total_rows (Integer)

    全件数のキャッシュ

Returns:

  • (Array<AlPersist>)

    Persistオブジェクトの配列



236
237
238
239
240
# File 'lib/al_persist_rdb.rb', line 236

def select( tuple, sql_part, param = {} )
  return search_common( param,
              "select #{tuple} #{sql_part}",
              "select count(*) as numrows #{sql_part};" )
end

- (Boolean) update(values = nil)

Note:

キーの合致するRDB内のデータを、更新する。

引数の指定があれば、その値を一旦内部値(@values)にしたうえで更新する。

Parameters:

  • values (Hash) (defaults to: nil)

    プライマリキーを含む更新する値のHash

Returns:

  • (Boolean)

    成功/失敗



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/al_persist_rdb.rb', line 102

def update( values = nil )
  @values = values  if values
  return false  if @pkeys.empty?

  value_hash = @values.dup
  where_hash = {}

  # exclude key
  @pkeys.each do |k|
    raise "No key included in value. #{k}"  if ! value_hash[k]
    where_hash[k] = value_hash[k]
    value_hash.delete( k )
  end

  @result = @persist_base.update( @table, value_hash, where_hash )
  return @result[:cmdtuples] == 1 ? true : false
end