Class: AlPersistRDB

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

Overview

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

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

#initialize(base, tname, keys = nil) ⇒ AlPersistRDB

constructor

Parameters:

  • base (AlRdbw)

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

  • tname (String)

    テーブル名

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

    プライマリキー



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

#columnString

Returns 検索フィールド名.

Returns:

  • (String)

    検索フィールド名



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

def column
  @column
end

#tableString (readonly)

Returns テーブル名.

Returns:

  • (String)

    テーブル名



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

def table
  @table
end

Instance Method Details

#allArray<AlPersist>

Note:

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

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

Returns:

  • (Array<AlPersist>)

    AlPersistオブジェクトの配列



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

Note:

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

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

Parameters:

  • values (Hash) (defaults to: nil)

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

Returns:

  • (Boolean)

    成功/失敗



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

Note:

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

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

Parameters:

  • values (Hash) (defaults to: nil)

    プライマリキーを含むHash

Returns:

  • (Boolean)

    成功/失敗



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

Note:

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

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

Parameters:

  • values (Hash) (defaults to: nil)

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

Returns:

  • (Boolean)

    成功/失敗



162
163
164
165
# File 'lib/al_persist_rdb.rb', line 162

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

#read(values = nil) ⇒ Boolean

Note:

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

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

Parameters:

  • values (Hash) (defaults to: nil)

    プライマリキーを含むHash

Returns:

  • (Boolean)

    成功/失敗



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>

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:



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を直接発行して登録データを選択的に読み込む。

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オブジェクトの配列



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

Note:

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

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

Parameters:

  • values (Hash) (defaults to: nil)

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

Returns:

  • (Boolean)

    成功/失敗



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