spreadsheet_db-cache_refi 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/spreadsheet_db-cache_refi.rb +115 -0
  2. metadata +93 -0
@@ -0,0 +1,115 @@
1
+ # encoding: UTF-8
2
+
3
+ require "spreadsheet_manager_refi"
4
+ require "spreadsheet_db_refi"
5
+
6
+ # modifications to the db in SpreadsheetDb:
7
+ # * add metadata to the metadata table
8
+ # * creates a new table "sheet_cached"
9
+
10
+ module Refi
11
+
12
+ class SpreadsheetDbCache < SpreadsheetDb
13
+
14
+ @@ext1_create_tbls_strs = {
15
+ sheet_cached: %q(
16
+ create table sheet_cached(
17
+ sheet_id integer,
18
+ cached integer,
19
+
20
+ primary key(sheet_id),
21
+ foreign key(sheet_id) references sheet(id)
22
+ );
23
+ )
24
+ }.inject({}){|memo,(k,v)| memo[k] = v.strip_a_lot ; memo}.merge(@@std_create_tbls_strs)
25
+
26
+ @@ext1_stmts_strs = {
27
+ sheet_cached_set_sheet_cached: "insert or replace into sheet_cached(sheet_id,cached) values(?,?);",
28
+ sheet_cached_get_cached_by_sheet: "select cached from sheet_cached where sheet_id=?;",
29
+ sheet_cached_get_all: "select * from sheet_cached;",
30
+ }.merge(@@std_stmts_strs)
31
+
32
+ @@ext1_tbl_create_order = @@std_tbl_create_order + [:sheet_cached]
33
+
34
+ def initialize(db_pn,ss_pn,ss_manager)
35
+ @create_tbls_strs = @@ext1_create_tbls_strs
36
+ @stmts_strs = @@ext1_stmts_strs
37
+ @tbl_create_order = @@ext1_tbl_create_order
38
+ init2
39
+ @pn = db_pn
40
+ @ss_pn = ss_pn
41
+ @ss_manager = ss_manager
42
+ @db_pn = db_pn
43
+ has_old_db = File.exist?(db_pn)
44
+ if(has_old_db)
45
+ open
46
+ old_db_metadata = get_metadata()
47
+ if(old_db_metadata.at_least?(@ss_manager.get_metadata(ss_pn)))
48
+ # old db good
49
+ else
50
+ # old db metadata bad
51
+ reset
52
+ File.delete(db_pn)
53
+ create_cache
54
+ end
55
+ else
56
+ # no old db
57
+ create_cache
58
+ end
59
+ end
60
+ def create_cache
61
+ open
62
+ @db.transaction{|foo|
63
+ #set_feature("sheet_cache",true)
64
+ import_sheet_names(@ss_manager.get_ss(@ss_pn).sheets)
65
+ import_metadata(@ss_manager.get_metadata(@ss_pn))
66
+ }
67
+ end
68
+ def import_sheet_names(sheet_names)
69
+ sheet_names.each_index{|sheet_ix|
70
+ sheet_name = sheet_names[sheet_ix]
71
+ pos = sheet_ix
72
+ id = create_sheet(sheet_name,pos)
73
+ set_sheet_cached_state(id,0)
74
+ }
75
+ end
76
+ def set_sheet_cached_state(sheet_id,state)
77
+ dperr(324,"sheet_id must be of integer type (sheet_id.class:#{sheet_id.class.to_s})") unless sheet_id.is_a?(Fixnum)
78
+ @prep_stmts[:sheet_cached_set_sheet_cached].execute(sheet_id,state)
79
+ end
80
+ def import_metadata(metadata)
81
+ metadata.each{|name,value|
82
+ @prep_stmts[:metadata_set_nam_val].execute(name,value)
83
+ }
84
+ end
85
+ def is_sheet_cached?(sheet_id)
86
+ # TODO prep_ex ?
87
+ is_cached = ( @prep_stmts[:sheet_cached_get_cached_by_sheet].execute!(sheet_id).flatten[0] == 1 )
88
+ #pp @prep_stmts[:sheet_cached_get_cached_by_sheet].execute!(sheet_id)
89
+ return is_cached
90
+ end
91
+ def get_sheet(sheet_xid)
92
+ if sheet_xid == nil
93
+ $Log.tlog({id: 'err1040'})
94
+ end
95
+ sheet_id = get_sheet_id_from_xid(sheet_xid)
96
+ if(!is_sheet_cached?(sheet_id))
97
+ ss = @ss_manager.get_ss(@ss_pn)
98
+ sheet_name = get_sheet_name_from_xid(sheet_id)
99
+ if sheet_name == nil
100
+ $Log.tlog({id: 'err1070',sheet_id:sheet_id,sheet_xid:sheet_xid})
101
+ end
102
+ puts 'sheet_name:'
103
+ pp sheet_name
104
+ ss.default_sheet = sheet_name
105
+ import_sheet(sheet_id,ss)
106
+ end
107
+ super
108
+ end
109
+ def import_sheet(sheet_id,ss)
110
+ super
111
+ set_sheet_cached_state(sheet_id,1)
112
+ end
113
+ end
114
+
115
+ end # module Refi
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spreadsheet_db-cache_refi
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 0
9
+ version: 0.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Robert Fey
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-07-26 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: spreadsheet_db_refi
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 0
31
+ - 0
32
+ version: 0.0.0
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: spreadsheet_manager_refi
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - "="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ - 0
46
+ - 0
47
+ version: 0.0.0
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ description: cache reads from spreadsheet files in a sqilte db
51
+ email: feyrob@gmail.com
52
+ executables: []
53
+
54
+ extensions: []
55
+
56
+ extra_rdoc_files: []
57
+
58
+ files:
59
+ - lib/spreadsheet_db-cache_refi.rb
60
+ has_rdoc: true
61
+ homepage: http://rubygems.org/gems/spreadsheet_db-cache_refi
62
+ licenses: []
63
+
64
+ post_install_message:
65
+ rdoc_options: []
66
+
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ requirements: []
86
+
87
+ rubyforge_project: nowarning
88
+ rubygems_version: 1.3.7
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: ""
92
+ test_files: []
93
+