teradata-cli 0.0.8 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,6 +14,8 @@ require 'teradata-cli/exception'
14
14
  require 'forwardable'
15
15
  require 'stringio'
16
16
 
17
+ #require 'ruby-debug' #FIXME
18
+
17
19
  module TeradataCli
18
20
 
19
21
  class ConnectionError < CLIError; end
@@ -345,7 +347,7 @@ module TeradataCli
345
347
  end
346
348
  end
347
349
  warn { "read_metadata: each_fet_parcel returned before PclENDSTATEMENT?" }
348
- nil # FIXME: should raise?
350
+ nil #FIXME: should raise?
349
351
  end
350
352
 
351
353
  def read_record
@@ -360,7 +362,7 @@ module TeradataCli
360
362
  end
361
363
  end
362
364
  warn { "read_record: each_fet_parcel returned before PclENDSTATEMENT?" }
363
- nil # FIXME: should raise?
365
+ nil #FIXME: should raise?
364
366
  end
365
367
 
366
368
  def skip_current_statement
@@ -775,6 +777,7 @@ module TeradataCli
775
777
  def unmarshal(data)
776
778
  f = StringIO.new(data)
777
779
  cols = @types.zip(read_indicator(f)).map {|type, is_null|
780
+ # debugger #FIXME
778
781
  val = type.unmarshal(f) # We must read value regardless of NULL.
779
782
  is_null ? nil : val
780
783
  }
@@ -871,7 +874,7 @@ module TeradataCli
871
874
 
872
875
  # default implementation: only read as string.
873
876
  def unmarshal(f)
874
- f.read(@length)
877
+ f.read(@length).rstrip
875
878
  end
876
879
  end
877
880
 
@@ -884,7 +887,13 @@ module TeradataCli
884
887
  bind_code :BYTE_N, 693
885
888
 
886
889
  def unmarshal(f)
887
- @extractor.extract(f.read(@length))
890
+ val = @extractor.extract(f.read(@length)).rstrip
891
+ #FIXME why teradata cliv2 uses CHAR_NN for timestamps
892
+ if /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/ =~ val
893
+ DateTime.parse("#{val[0,10]}T#{val[11,19]}") rescue nil
894
+ else
895
+ val
896
+ end
888
897
  end
889
898
  end
890
899
 
@@ -996,7 +1005,11 @@ module TeradataCli
996
1005
  str
997
1006
  else
998
1007
  return '0.' + str if str.size == frac
999
- str[-frac, 0] = '.' rescue nil
1008
+ return '0.0' + str if str == "0"
1009
+ begin
1010
+ str[-frac, 0] = '.'
1011
+ rescue
1012
+ end
1000
1013
  str
1001
1014
  end
1002
1015
  end
@@ -1008,11 +1021,20 @@ module TeradataCli
1008
1021
 
1009
1022
  def unmarshal(f)
1010
1023
  d = (f.read(@length).unpack('l').first + 19000000).to_s
1011
- d[0,4] + '-' + d[4,2] + '-' + d[6,2]
1024
+ Date.parse(d[0,4] + '-' + d[4,2] + '-' + d[6,2]) rescue nil
1012
1025
  end
1013
1026
  end
1014
1027
 
1015
- # TIME, TIMESTAMP are same as CHAR.
1028
+ # TIME, TIMESTAMP
1029
+ class DateTimeType < FieldType
1030
+ # bind_code :CHAR_NN, 452
1031
+
1032
+ def unmarshal(f)
1033
+ # debugger #FIXME
1034
+ dt = @extractor.extract(f.read(@length)) # "2013-10-10 16:44:39"
1035
+ DateTime.parse("#{dt[0,10]}T#{dt[11,19]}") rescue nil
1036
+ end
1037
+ end
1016
1038
 
1017
1039
 
1018
1040
  class Record
@@ -1,3 +1,3 @@
1
1
  module TeradataCli
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.10"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teradata-cli
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 8
10
- version: 0.0.8
9
+ - 10
10
+ version: 0.0.10
11
11
  platform: ruby
12
12
  authors:
13
13
  - Giuseppe Privitera
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-10-25 00:00:00 Z
18
+ date: 2013-10-29 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bundler