ddl_parser 0.0.8 → 0.0.9

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.
@@ -9,7 +9,7 @@ module DDLParser
9
9
  rule(:type_integer) {(str('integer')| str('int'))}
10
10
  rule(:type_bigint) {str('bigint').as(:bigint)}
11
11
  rule(:type_decimal) {(((str('decimal') | str('dec') | str('numeric') | str('num')) >>
12
- (lparen >> integer.as(:total) >> (comma >> integer.as(:scale)).maybe >> rparen).as(:precision))).as(:decimal)}
12
+ (lparen >> integer.as(:total) >> (comma >> integer.as(:scale)).maybe >> rparen).as(:precision).maybe)).as(:decimal)}
13
13
  rule(:type_float) {(str('float') >> (lparen >> integer >> rparen).as(:precision)).as(:float)}
14
14
  rule(:type_real) {str('real')}
15
15
  rule(:type_double) {str('double')}
@@ -13,7 +13,7 @@ class DDLParser::Translator::Column
13
13
  end
14
14
 
15
15
  def data_type
16
- return if @column_hash.nil?
16
+ raise "DataType not specified #{@column_hash.inspect}" if @column_hash.nil? || @column_hash[:data_type].nil?
17
17
  if @column_hash[:data_type].is_a?(Hash)
18
18
  @column_hash[:data_type].keys.first
19
19
  else
@@ -27,7 +27,11 @@ class DDLParser::Translator::Column
27
27
  when :decimal
28
28
  "#{precision}.#{scale}".to_f
29
29
  when :char
30
- @column_hash[:data_type][:char][:length][:integer].to_i
30
+ begin
31
+ @column_hash[:data_type][:char][:length][:integer].to_i
32
+ rescue
33
+ raise "DataType CHAR length wrong format #{@column_hash[:data_type].inspect}"
34
+ end
31
35
  else
32
36
  nil
33
37
  end
@@ -36,7 +40,11 @@ class DDLParser::Translator::Column
36
40
  def precision
37
41
  case data_type
38
42
  when :decimal
39
- @column_hash[:data_type][:decimal][:precision][:total][:integer].to_i
43
+ begin
44
+ @column_hash[:data_type][:decimal][:precision][:total][:integer].to_i
45
+ rescue
46
+ 5 # decimal default if no precision present
47
+ end
40
48
  else
41
49
  nil
42
50
  end
@@ -45,7 +53,11 @@ class DDLParser::Translator::Column
45
53
  def scale
46
54
  case data_type
47
55
  when :decimal
48
- @column_hash[:data_type][:decimal][:precision][:scale][:integer].to_i
56
+ begin
57
+ @column_hash[:data_type][:decimal][:precision][:scale][:integer].to_i
58
+ rescue
59
+ 0 # decimal default if no scale present
60
+ end
49
61
  else
50
62
  nil
51
63
  end
@@ -1,3 +1,3 @@
1
1
  module DDLParser
2
- VERSION = '0.0.8'
2
+ VERSION = '0.0.9'
3
3
  end
@@ -388,7 +388,32 @@ EOF
388
388
  :data_type=>{:char=>{:length=>{:integer=> '30'}}},
389
389
  :options=> ''}}]}
390
390
  end
391
+ end
392
+
393
+ context 'real dsv examples 2' do
394
+ it 'parses Example 16a' do
395
+ sql = <<EOF
396
+ CREATE TABLE COSTINVOICE
397
+ (DOC_NO CHARACTER(8) NOT NULL,
398
+ STATUS CHARACTER(12))
399
+ EOF
391
400
 
401
+ begin
402
+ result = parser.parse(sql.downcase)
403
+ rescue Parslet::ParseFailed => error
404
+ puts error.cause.ascii_tree
405
+ end
406
+
407
+ result.should == {:operation=> 'create table',
408
+ :table_name=> 'costinvoice',
409
+ :elements => [
410
+ {:column=>{:field=> 'doc_no',
411
+ :data_type=>{:char=>{:length=>{:integer=> '8'}}},
412
+ :options=>[{:column_option=> 'not null'}]}},
413
+ {:column=>{:field=> 'status',
414
+ :data_type=>{:char=>{:length=>{:integer=> '12'}}},
415
+ :options=> ''}}]}
416
+ end
392
417
  end
393
418
 
394
419
  context 'real dsv examples' do
@@ -451,6 +476,31 @@ EOF
451
476
  result[:operation].should == 'create table'
452
477
  result[:table_name].should == 'cost_invoice'
453
478
  end
479
+ end
480
+ context 'real dsv examples 3' do
481
+ it 'parses Example 18' do
482
+ sql = <<EOF
483
+ CREATE TABLE COSTINVOICE
484
+ (DOC_NO CHARACTER(8) NOT NULL DEFAULT 'TEST DEFAULT',
485
+ STATUS CHARACTER(12))
486
+
487
+ EOF
488
+
489
+ begin
490
+ result = parser.parse(sql.downcase)
491
+ rescue Parslet::ParseFailed => error
492
+ puts error.cause.ascii_tree
493
+ end
494
+
495
+ result.should == {:operation=>"create table",
496
+ :table_name=>"costinvoice",
497
+ :elements=>[{:column=>{:field=>"doc_no",
498
+ :data_type=>{:char=>{:length=>{:integer=>"8"}}},
499
+ :options=>[{:column_option=>"not null"},
500
+ {:default_clause=>[{:string=>"'test default'"}]}]}},
501
+ {:column=>{:field=>"status",
502
+ :data_type=>{:char=>{:length=>{:integer=>"12"}}}, :options=>""}}]}
503
+ end
454
504
 
455
505
  end
456
506
  end
@@ -11,6 +11,8 @@ describe DDLParser::SharedRules::DataTypes do
11
11
  parser.data_type.parse('smallint').should == {:data_type=> 'smallint'}
12
12
  parser.data_type.parse('int').should == {:data_type=> 'int'}
13
13
  parser.data_type.parse('decimal(1,2)').should == {:data_type=>{:decimal=>{:precision => {:total=>{:integer=> '1'}, :scale=>{:integer=> '2'}}}}}
14
+ parser.data_type.parse('decimal(1)').should == {:data_type=>{:decimal=>{:precision => {:total=>{:integer=> '1'}}}}}
15
+ parser.data_type.parse('decimal').should == {:data_type=>{:decimal=>"decimal"}}
14
16
  parser.data_type.parse('float(1)').should == {:data_type=>{:float=>{:precision=>{:integer=> '1'}}}}
15
17
  parser.data_type.parse('real').should == {:data_type=> 'real'}
16
18
  parser.data_type.parse('double').should == {:data_type=> 'double'}
@@ -23,9 +23,21 @@ describe 'DDLParser::Translator::Column' do
23
23
  })
24
24
  }
25
25
 
26
- before :each do
26
+ let(:decimal_no_scale_column) {
27
+ DDLParser::Translator::Column.new(
28
+ {:field=> 'decimal_field',
29
+ :data_type=>{:decimal=>{:precision=>{:total=>{:integer=> '15'}}}},
30
+ :options=>[{:column_option=> 'not null'}, {:default_clause=>[{:integer=> '0'}]}]
31
+ })
32
+ }
27
33
 
28
- end
34
+ let(:decimal_no_precision_column) {
35
+ DDLParser::Translator::Column.new(
36
+ {:field=> 'decimal_field',
37
+ :data_type=>{:decimal=>"decimal"},
38
+ :options=>[{:column_option=> 'not null'}, {:default_clause=>[{:integer=> '0'}]}]
39
+ })
40
+ }
29
41
 
30
42
  it 'must receive hash' do
31
43
  DDLParser::Translator::Column.new('').to_hash.should == {}
@@ -54,12 +66,16 @@ describe 'DDLParser::Translator::Column' do
54
66
  int_column.precision.should == nil
55
67
  char_column.precision.should == nil
56
68
  decimal_column.precision.should == 15
69
+ decimal_no_scale_column.precision.should == 15
70
+ decimal_no_precision_column.precision.should == 5
57
71
  end
58
72
 
59
73
  it 'should return scale' do
60
74
  int_column.scale.should == nil
61
75
  char_column.scale.should == nil
62
76
  decimal_column.scale.should == 2
77
+ decimal_no_scale_column.scale.should == 0
78
+ decimal_no_precision_column.scale.should == 0
63
79
  end
64
80
 
65
81
  it 'should return options' do
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddl_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Rasmus Bergholdt
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-07-10 00:00:00.000000000 Z
12
+ date: 2014-07-15 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: parslet
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: bundler
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rake
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ~>
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: rspec
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - '='
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - '='
67
76
  - !ruby/object:Gem::Version
@@ -111,26 +120,27 @@ files:
111
120
  homepage: ''
112
121
  licenses:
113
122
  - MIT
114
- metadata: {}
115
123
  post_install_message:
116
124
  rdoc_options: []
117
125
  require_paths:
118
126
  - lib
119
127
  required_ruby_version: !ruby/object:Gem::Requirement
128
+ none: false
120
129
  requirements:
121
- - - '>='
130
+ - - ! '>='
122
131
  - !ruby/object:Gem::Version
123
132
  version: '0'
124
133
  required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
125
135
  requirements:
126
- - - '>='
136
+ - - ! '>='
127
137
  - !ruby/object:Gem::Version
128
138
  version: '0'
129
139
  requirements: []
130
140
  rubyforge_project:
131
- rubygems_version: 2.3.0
141
+ rubygems_version: 1.8.28
132
142
  signing_key:
133
- specification_version: 4
143
+ specification_version: 3
134
144
  summary: will parse statements and make it possible to extract content
135
145
  test_files:
136
146
  - spec/ddl_parser/ddl/db2/alter_table_spec.rb
@@ -142,4 +152,3 @@ test_files:
142
152
  - spec/ddl_parser/sql/db2/select_parser_spec.rb
143
153
  - spec/ddl_parser/translator/column_spec.rb
144
154
  - spec/spec_helper.rb
145
- has_rdoc:
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 43e8f3aea2bd03ccdd4c2a7b1a0b2c325f7bee84
4
- data.tar.gz: 2a21651fe9805d07d7f80f79a160cec065557297
5
- SHA512:
6
- metadata.gz: c6173cef6daad97465aac30304464b255d06955e88cbde966cdc940619cc2c653d2e872fdca48c534b2ac31678c35ad8697a025604eff2c2e0a2f49f51b75754
7
- data.tar.gz: 10aa29aa0671fe7773d6b607c7b31fe1ffcb17dafa70ba49f9370e9f8fa89d6f7508692c4548a9d1ded2e5c6f8665671a28134fdbfa4dee367cdeaea366164e4