@@ -6,21 +6,12 @@ class SchemaCache
66
77 def initialize ( conn )
88 @connection = conn
9- @tables = { }
109
11- @columns = Hash . new do |h , table_name |
12- h [ table_name ] = conn . columns ( table_name )
13- end
14-
15- @columns_hash = Hash . new do |h , table_name |
16- h [ table_name ] = Hash [ columns [ table_name ] . map { |col |
17- [ col . name , col ]
18- } ]
19- end
20-
21- @primary_keys = Hash . new do |h , table_name |
22- h [ table_name ] = table_exists? ( table_name ) ? conn . primary_key ( table_name ) : nil
23- end
10+ @columns = { }
11+ @columns_hash = { }
12+ @primary_keys = { }
13+ @tables = { }
14+ prepare_default_proc
2415 end
2516
2617 # A cached lookup for table existence.
@@ -45,6 +36,35 @@ def clear_table_cache!(table_name)
4536 @primary_keys . delete table_name
4637 @tables . delete table_name
4738 end
39+
40+ def marshal_dump
41+ [ :@columns , :@columns_hash , :@primary_keys , :@tables ] . map do |val |
42+ self . instance_variable_get ( val ) . inject ( { } ) { |h , v | h [ v [ 0 ] ] = v [ 1 ] ; h }
43+ end
44+ end
45+
46+ def marshal_load ( array )
47+ @columns , @columns_hash , @primary_keys , @tables = array
48+ prepare_default_proc
49+ end
50+
51+ private
52+
53+ def prepare_default_proc
54+ @columns . default_proc = Proc . new do |h , table_name |
55+ h [ table_name ] = connection . columns ( table_name )
56+ end
57+
58+ @columns_hash . default_proc = Proc . new do |h , table_name |
59+ h [ table_name ] = Hash [ columns [ table_name ] . map { |col |
60+ [ col . name , col ]
61+ } ]
62+ end
63+
64+ @primary_keys . default_proc = Proc . new do |h , table_name |
65+ h [ table_name ] = table_exists? ( table_name ) ? connection . primary_key ( table_name ) : nil
66+ end
67+ end
4868 end
4969 end
5070end
0 commit comments