imparcial 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/History.txt +5 -0
  2. data/Manifest.txt +5 -0
  3. data/README.txt +48 -0
  4. data/Rakefile +51 -0
  5. data/lib/imparcial.rb +7 -0
  6. metadata +37 -81
  7. data/lib/imparcial/driver/abstract/expression/base.rb +0 -111
  8. data/lib/imparcial/driver/abstract/expression/column.rb +0 -313
  9. data/lib/imparcial/driver/abstract/expression/constraint.rb +0 -149
  10. data/lib/imparcial/driver/abstract/expression/delete.rb +0 -88
  11. data/lib/imparcial/driver/abstract/expression/index.rb +0 -206
  12. data/lib/imparcial/driver/abstract/expression/insert.rb +0 -49
  13. data/lib/imparcial/driver/abstract/expression/lock.rb +0 -11
  14. data/lib/imparcial/driver/abstract/expression/record.rb +0 -41
  15. data/lib/imparcial/driver/abstract/expression/select.rb +0 -38
  16. data/lib/imparcial/driver/abstract/expression/sequence.rb +0 -260
  17. data/lib/imparcial/driver/abstract/expression/statement.rb +0 -128
  18. data/lib/imparcial/driver/abstract/expression/table.rb +0 -416
  19. data/lib/imparcial/driver/abstract/expression/transaction.rb +0 -143
  20. data/lib/imparcial/driver/abstract/expression/update.rb +0 -50
  21. data/lib/imparcial/driver/abstract/expression.rb +0 -24
  22. data/lib/imparcial/driver/abstract/result.rb +0 -95
  23. data/lib/imparcial/driver/abstract/sql/column.rb +0 -103
  24. data/lib/imparcial/driver/abstract/sql/constraint.rb +0 -42
  25. data/lib/imparcial/driver/abstract/sql/delete.rb +0 -22
  26. data/lib/imparcial/driver/abstract/sql/index.rb +0 -45
  27. data/lib/imparcial/driver/abstract/sql/insert.rb +0 -63
  28. data/lib/imparcial/driver/abstract/sql/record.rb +0 -19
  29. data/lib/imparcial/driver/abstract/sql/select.rb +0 -101
  30. data/lib/imparcial/driver/abstract/sql/sequence.rb +0 -55
  31. data/lib/imparcial/driver/abstract/sql/table.rb +0 -42
  32. data/lib/imparcial/driver/abstract/sql/transaction.rb +0 -43
  33. data/lib/imparcial/driver/abstract/sql/update.rb +0 -29
  34. data/lib/imparcial/driver/abstract/sql.rb +0 -21
  35. data/lib/imparcial/driver/abstract/typemap.rb +0 -168
  36. data/lib/imparcial/driver/abstract/util.rb +0 -53
  37. data/lib/imparcial/driver/abstract.rb +0 -255
  38. data/lib/imparcial/driver/mysql/expression/table.rb +0 -17
  39. data/lib/imparcial/driver/mysql/expression.rb +0 -11
  40. data/lib/imparcial/driver/mysql/result.rb +0 -33
  41. data/lib/imparcial/driver/mysql/sql/column.rb +0 -59
  42. data/lib/imparcial/driver/mysql/sql/constraint.rb +0 -39
  43. data/lib/imparcial/driver/mysql/sql/index.rb +0 -42
  44. data/lib/imparcial/driver/mysql/sql/sequence.rb +0 -39
  45. data/lib/imparcial/driver/mysql/sql/table.rb +0 -67
  46. data/lib/imparcial/driver/mysql/sql.rb +0 -15
  47. data/lib/imparcial/driver/mysql/typemap.rb +0 -13
  48. data/lib/imparcial/driver/mysql/util.rb +0 -13
  49. data/lib/imparcial/driver/mysql.rb +0 -49
  50. data/lib/imparcial/driver/postgre/expression.rb +0 -32
  51. data/lib/imparcial/driver/postgre/result.rb +0 -35
  52. data/lib/imparcial/driver/postgre/sql/column.rb +0 -53
  53. data/lib/imparcial/driver/postgre/sql/constraint.rb +0 -37
  54. data/lib/imparcial/driver/postgre/sql/index.rb +0 -53
  55. data/lib/imparcial/driver/postgre/sql/sequence.rb +0 -30
  56. data/lib/imparcial/driver/postgre/sql/table.rb +0 -46
  57. data/lib/imparcial/driver/postgre/sql.rb +0 -15
  58. data/lib/imparcial/driver/postgre/typemap.rb +0 -29
  59. data/lib/imparcial/driver/postgre/util.rb +0 -19
  60. data/lib/imparcial/driver/postgre.rb +0 -43
  61. data/lib/imparcial/driver.rb +0 -1
  62. data/lib/imparcial/exception.rb +0 -71
  63. data/lib/imparcial/initializer.rb +0 -62
@@ -1,103 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Column
5
-
6
- private
7
-
8
- # Generate SQL statement for getting columns information.
9
- # We need name, type and size.
10
-
11
- def sql_for_getting_columns_information ( options )
12
-
13
- %{SELECT
14
- column_name,
15
- data_type,
16
- character_maximum_length
17
- FROM INFORMATION_SCHEMA.columns
18
- WHERE table_name = #{quote_value(options[:table_name])}
19
- }
20
-
21
- end
22
-
23
- # Generate SQL statement for getting column information.
24
- # We need name, type and size. Quite similar to above, except,
25
- # it's a more narrow SQL.
26
-
27
- def sql_for_getting_column_information ( options )
28
-
29
- %{SELECT
30
- column_name,
31
- data_type,
32
- character_maximum_length
33
- FROM INFORMATION_SCHEMA.columns
34
- WHERE table_name = #{quote_value(options[:table_name])} AND
35
- column_name = #{quote_value(options[:field_name])}
36
- }
37
-
38
- end
39
-
40
- # Generate SQL statement for adding some columns.
41
- # Alter table will do the job for us.
42
-
43
- def sql_for_adding_columns ( options )
44
-
45
- syntax = ''
46
-
47
- syntax += 'ALTER TABLE ' + quote(options[:table_name]) + ' '
48
-
49
- parse_fields options[:fields] do |field|
50
-
51
- syntax += "ADD COLUMN " + field_to_column_sql(field) + ","
52
-
53
- end
54
-
55
- syntax.chop!
56
-
57
- syntax
58
-
59
- end
60
-
61
- # Generate SQL statement for dropping some columns.
62
- # Alter table will do the job for us.
63
-
64
- def sql_for_dropping_columns ( options )
65
-
66
- syntax = ''
67
-
68
- syntax += 'ALTER TABLE ' + quote(options[:table_name]) + ' '
69
-
70
- options[:fields].each do |field_name|
71
-
72
- syntax += 'DROP ' + field_name + ','
73
-
74
- end
75
-
76
- syntax.chop!
77
-
78
- syntax
79
-
80
- end
81
-
82
- # Generate SQL statement for renaming a column.
83
- # Must be overriden.
84
-
85
- def sql_for_renaming_column ( options )
86
-
87
- raise FeatureNotFound
88
-
89
- end
90
-
91
- # Generate SQL statement for modifying a column.
92
- # Must be overriden.
93
-
94
- def sql_for_modifying_columns ( options )
95
-
96
- raise FeatureNotFound
97
-
98
- end
99
-
100
- end
101
- end
102
- end
103
- end
@@ -1,42 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Constraint
5
-
6
- private
7
-
8
- def sql_for_adding_primary_key ( options )
9
-
10
- syntax = 'ALTER TABLE ' + quote(options[:table_name]) + ' '
11
- syntax += 'ADD PRIMARY KEY ('
12
-
13
- for field_name in options[:fields]
14
-
15
- syntax += quote(field_name) + ','
16
-
17
- end
18
-
19
- syntax.chop!
20
- syntax += ')'
21
-
22
- syntax
23
-
24
- end
25
-
26
- def sql_for_adding_column ( options )
27
-
28
- raise FeatureNotFound
29
-
30
- end
31
-
32
- def sql_for_adding_default_value ( options )
33
-
34
- raise FeatureNotFound
35
-
36
- end
37
-
38
-
39
- end
40
- end
41
- end
42
- end
@@ -1,22 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Delete
5
-
6
- private
7
-
8
- # SQL for generating the delete statement.
9
-
10
- def sql_for_deleting ( options )
11
-
12
- syntax = 'DELETE FROM ' + quote(options[:table_name])
13
- syntax += parse_conditions options[:conditions] if options[:conditions]
14
-
15
- syntax
16
-
17
- end
18
-
19
- end
20
- end
21
- end
22
- end
@@ -1,45 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Index
5
-
6
- private
7
-
8
- # Generate SQL statement for creating an index.
9
-
10
- def sql_for_creating_index ( options )
11
-
12
- syntax = 'CREATE '
13
- syntax += options[:index_type] + ' ' if options[:index_type]
14
- syntax += 'INDEX '
15
- syntax += options[:index_name] + ' '
16
- syntax += 'ON ' + quote(options[:table_name])
17
- syntax += '('
18
- syntax += quote(options[:column_name])
19
- syntax += ')'
20
-
21
- syntax
22
-
23
- end
24
-
25
- # Generate SQL statement for dropping an index.
26
-
27
- def sql_for_dropping_index ( options )
28
-
29
- 'DROP INDEX ' + options[:index_name]
30
-
31
- end
32
-
33
- # Subclasses need to override this method.
34
-
35
- def sql_for_getting_indexes
36
-
37
- raise FeatureNotFound
38
-
39
- end
40
-
41
- end
42
- end
43
- end
44
- end
45
-
@@ -1,63 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Insert
5
-
6
- private
7
-
8
- # Some helpers for inserting method.
9
- # Extract column names from a hash.
10
-
11
- def column_names_for ( values )
12
-
13
- column_names = []
14
-
15
- values.each_key do |column_name|
16
-
17
- column_names << quote(column_name)
18
-
19
- end
20
-
21
- column_names
22
-
23
- end
24
-
25
- # Extract column values from a hash.
26
-
27
- def column_values_for ( values )
28
-
29
- column_values = []
30
-
31
- values.each_value do |column_value|
32
-
33
- column_values << quote_value(column_value)
34
-
35
- end
36
-
37
- column_values
38
-
39
- end
40
-
41
- # Execute the SQL statement for inserting.
42
-
43
- def sql_for_inserting ( options )
44
-
45
- syntax = 'INSERT INTO ' + quote(options[:table_name])
46
- syntax += '('
47
-
48
- syntax += column_names_for(options[:values]).join(',')
49
-
50
- syntax += ') VALUES ('
51
-
52
- syntax += column_values_for(options[:values]).join(',')
53
-
54
- syntax += ')'
55
-
56
- syntax
57
-
58
- end
59
-
60
- end
61
- end
62
- end
63
- end
@@ -1,19 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Record
5
-
6
- private
7
-
8
- # Execute SQL statement for couting records of a table.
9
-
10
- def sql_for_couting_records ( options )
11
-
12
- 'SELECT COUNT(*) FROM ' + quote(options[:table_name])
13
-
14
- end
15
-
16
- end
17
- end
18
- end
19
- end
@@ -1,101 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Select
5
-
6
- private
7
-
8
- def get_key ( name, table_metadata )
9
-
10
- key_name = ('key_for_' + name.to_s).to_sym
11
- key = table_metadata[key_name]
12
-
13
- unless key
14
-
15
- msg = 'A key has not been defined at '+table_metadata[:name].to_s
16
- raise SelectError.new(msg)
17
-
18
- end
19
-
20
- key
21
-
22
- end
23
-
24
- def get_relkind ( table )
25
-
26
- table[:relkind].to_s.upcase!.gsub!('_', ' ')
27
-
28
- end
29
-
30
- def unroll_joins ( table_list, previous_table_metadata )
31
-
32
- syntax = ''
33
-
34
- # Array
35
-
36
- table_list.each do |list|
37
-
38
- for table_metadata, inner_table_list in list
39
-
40
- rel = get_relkind table_metadata
41
-
42
- syntax += ' ' + rel + ' ' + quote(table_metadata[:name]) + ' ON '
43
-
44
- previous_key = get_key previous_table_metadata[:name], table_metadata
45
- previous_id = quote(table_metadata[:name]) + '.' + previous_key
46
-
47
- current_key = get_key table_metadata[:name], previous_table_metadata
48
- current_id = quote(previous_table_metadata[:name]) + '.' + current_key
49
-
50
- syntax += previous_id + ' = ' + current_id
51
-
52
- next unless inner_table_list
53
- next if inner_table_list.length == 0
54
-
55
- syntax += unroll_joins inner_table_list, table_metadata
56
-
57
- end
58
-
59
- end
60
-
61
- syntax
62
-
63
- end
64
-
65
- # Enable selection by column name.
66
-
67
- def build_field_selection ( fields )
68
-
69
- if fields
70
-
71
- fields.join(',')
72
-
73
- else
74
-
75
- '*'
76
-
77
- end
78
-
79
- end
80
-
81
- def sql_for_selecting ( options )
82
-
83
- syntax = 'SELECT '
84
- syntax += build_field_selection options[:fields]
85
- syntax += ' FROM '
86
-
87
- syntax += quote options[:joins] ? options[:joins][0].keys.first[:name] : options[:table_name]
88
- syntax += unroll_joins options[:joins][0].values[0], options[:joins][0].keys.first if options[:joins]
89
-
90
- syntax += parse_conditions options[:conditions]
91
- syntax += parse_limit options[:limit]
92
- syntax += parse_order options
93
-
94
- syntax
95
-
96
- end
97
-
98
- end
99
- end
100
- end
101
- end
@@ -1,55 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Sequence
5
-
6
- private
7
-
8
- # Generate SQL statement for creating a sequence.
9
-
10
- def sql_for_creating_sequence ( options = {} )
11
-
12
- syntax = 'CREATE SEQUENCE ' + quote(options[:sequence_name]) + ' '
13
- syntax += 'START WITH ' + quote_value(options[:start_with]) + ' '
14
- syntax += 'MINVALUE ' + quote_value(options[:min_value]) + ' '
15
- syntax += 'MAXVALUE ' + quote_value(options[:max_value]) if options[:max_value]
16
- syntax += 'INCREMENT BY ' + quote_value(options[:increment_by]) + ' '
17
- syntax += options[:cycle] ? 'CYCLE ' : 'NO CYCLE '
18
- syntax += 'CACHE ' + quote_value(options[:cache]) if options[:cache]
19
-
20
- syntax
21
-
22
- end
23
-
24
- private
25
-
26
- # Generate SQL statement for dropping a sequence.
27
-
28
- def sql_for_dropping_sequence ( options = {} )
29
-
30
- 'DROP SEQUENCE ' + quote(options[:sequence_name])
31
-
32
- end
33
-
34
- # Generate SQL statement for verifying sequences.
35
- # Subclasses must override this method.
36
-
37
- def sql_for_sequence_exists? ( options = {} )
38
-
39
- raise FeatureNotFound
40
-
41
- end
42
-
43
- # Generate SQL statement for retrieving sequences.
44
- # Subclasses must override this method.
45
-
46
- def sql_for_getting_sequences
47
-
48
- raise FeatureNotFound
49
-
50
- end
51
-
52
- end
53
- end
54
- end
55
- end
@@ -1,42 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Table
5
-
6
- private
7
-
8
- # Generate SQL statement for dropping table.
9
-
10
- def sql_for_dropping_table ( options )
11
-
12
- 'DROP TABLE ' + quote( options[:table_name] )
13
-
14
- end
15
-
16
- # Generate SQL statement for creating table.
17
-
18
- def sql_for_creating_table ( options )
19
-
20
- columns = []
21
-
22
- # Let's parse some columns in order to provide default options.
23
-
24
- parse_fields options[:fields] do |field|
25
-
26
- columns << field_to_column_sql(field)
27
-
28
- end
29
-
30
- syntax = 'CREATE TABLE ' + quote( options[:table_name] )
31
- syntax += '('
32
- syntax += columns.join(',')
33
- syntax += ')'
34
-
35
- syntax
36
-
37
- end
38
-
39
- end
40
- end
41
- end
42
- end
@@ -1,43 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Transaction
5
-
6
- private
7
-
8
- # Generate SQL statement for initializing a transaction.
9
-
10
- def sql_for_initializing_a_transaction
11
-
12
- 'BEGIN'
13
-
14
- end
15
-
16
- # Generate SQL statement for terminating a transaction.
17
-
18
- def sql_for_terminating_a_transaction
19
-
20
- 'COMMIT'
21
-
22
- end
23
-
24
- # Generate SQL statement for rolling back a transaction.
25
-
26
- def sql_for_rolling_back ( options )
27
-
28
- options[:savepoint_name] == nil ? 'ROLLBACK' : 'ROLLBACK TO ' + options[:savepoint_name].to_s
29
-
30
- end
31
-
32
- # Generate SQL statement for placing a saving point.
33
-
34
- def sql_for_saving_point ( options )
35
-
36
- 'SAVEPOINT ' + options[:savepoint_name].to_s
37
-
38
- end
39
-
40
- end
41
- end
42
- end
43
- end
@@ -1,29 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module AbstractSQL
4
- module Update
5
-
6
- private
7
-
8
- def sql_for_updating ( options )
9
-
10
- syntax = 'UPDATE ' + quote(options[:table_name]) + ' SET '
11
-
12
- options[:values].each do |name, value|
13
-
14
- syntax += quote(name) + ' = ' + quote_value(value) + ','
15
-
16
- end
17
-
18
- syntax.chop!
19
-
20
- syntax += parse_conditions options[:conditions]
21
-
22
- syntax
23
-
24
- end
25
-
26
- end
27
- end
28
- end
29
- end
@@ -1,21 +0,0 @@
1
- FileList[File.dirname(__FILE__) + '/sql/*.rb'].each do |f|
2
- require f
3
- end
4
-
5
- module Imparcial
6
- module Driver
7
- module AbstractSQL
8
- include Table
9
- include Sequence
10
- include Transaction
11
- include Index
12
- include Insert
13
- include Delete
14
- include Select
15
- include Update
16
- include Column
17
- include Constraint
18
- include Record
19
- end
20
- end
21
- end