ddl_parser 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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