sqlite2dbf 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: efa63f4b52e4fa86211371dce58db97f686647c0
4
- data.tar.gz: 4ce02a2d7ddd94d3a2371cf05ad823f36c50cb63
3
+ metadata.gz: a174046549fd4651a2dcabcf6ab907d790f4b0ac
4
+ data.tar.gz: 24e59b0daac11a547ba42166bbca9c7390255e91
5
5
  SHA512:
6
- metadata.gz: 6c29cb8c99e820c288e115bb4e6e4582db95895323aed14d9d314447b05a2808484940fed2bdce53af4b6ac7a73ecfd6ecc8008348debf431a909cbccf94d8e5
7
- data.tar.gz: 319f49362f9ecedb7e245a0efbbb01dc4efdab06f1798877ac92f1e2a0ca1a1b8d25f369cbdb53b4c95619501d6d0bc9807baddde25fd056ba2a11c0d33a570a
6
+ metadata.gz: 6928d69a1a10f29487437ea08fdba0fa8df2fd2a4be45295e31992a77d7f75773ac07d4d49c268055fac789d6fd7b54ccf957107ce005d461630aaf54e9a4018
7
+ data.tar.gz: 32a353698e77bc9a64773af5715053fb302190bf437ec640fb734f2d4c3cd1a645c7c28636a46039b84a51b4cb27c8925643d81b686f52f260403c59feb7244d
data/lib/argparser.rb CHANGED
@@ -29,12 +29,10 @@ require_relative 'translating'
29
29
  require_relative 'constants'
30
30
 
31
31
  class ArgParser
32
- include Logging
33
- include Translating
34
32
 
35
33
  self.extend(Logging)
36
34
  self.extend(Translating)
37
- @@log = init_logger(STDOUT, Logger::DEBUG)
35
+ @@log = init_logger()
38
36
 
39
37
  # Returns a structure describing the options.
40
38
  #
@@ -68,8 +66,9 @@ class ArgParser
68
66
  options.datetime = list.gsub(/[,;]/, '').split
69
67
  end
70
68
 
71
- opts.on('-' << trl('o'), trl("--orig"), trl('Use the table-name as file-name for the DBF-result')) do
69
+ opts.on('-' << trl('o'), trl("--orig [PATH]"), trl('Use the table-name as file-name for the DBF-result, store output in PATH')) do |path|
72
70
  options.table_name = true
71
+ options.out_dir = path
73
72
  end
74
73
 
75
74
  =begin
data/lib/constants.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  $APPNAME = 'sqlite2dbf'
2
- $VERSION = '0.1.7'
2
+ $VERSION = '0.1.8'
3
3
  $DATE = '2016-11-12'
4
4
  $AUTHORS = ["Michael Uplawski <michael.uplawski@uplawski.eu>"]
5
5
  $EMAIL = 'michael.uplawski@uplawski.eu'
data/lib/log.conf CHANGED
@@ -45,7 +45,7 @@ unknown = Logger::UNKNOWN
45
45
  # :HtmlBuilder => [info, 'C:\temp\htmlbuilder.log']
46
46
  # :HtmlBuilder => [debug, '/tmp/htmlbuilder.log'],
47
47
 
48
- :ArgParser => debug,
48
+ :ArgParser => info,
49
49
  :SQLite2DBF => info,
50
50
 
51
51
  # And ignore the remainder, too.
data/lib/sqlite2dbf.rb CHANGED
@@ -47,9 +47,13 @@ class SQLite2DBF
47
47
  @time_fields = options.time ? options.time : []
48
48
 
49
49
  if(options.source)
50
+ @dbf_path = nil
50
51
  sqlite_file = options.source
51
52
  dbf_file = options.target if options.target
52
- dbf_file = :table if options.table_name
53
+ if(options.table_name && options.out_dir)
54
+ @dbf_path = options.out_dir
55
+ dbf_file = :table
56
+ end
53
57
  dbf_file ||= File.dirname(sqlite_file) << File::Separator << File.basename(sqlite_file, '.*')
54
58
  msg = nil
55
59
 
@@ -82,7 +86,7 @@ class SQLite2DBF
82
86
 
83
87
  def transform(sqlite_file, dbf_file)
84
88
  # <------------ mapping SQLite-types to SHP/XBase ------------>
85
- tmap = {'INT' => 1, 'TINYINT' => 1, 'SMALLINT' => 1, 'MEDIUMINT' => 1, 'BIGINT' => 1, 'UNSIGNED BIGINT' => 1, 'VARCHAR' => 0, 'CHARACTER' => 0, 'VARYING CHARACTER(255)' => 0, 'LONGVARCHAR' => 0, 'TEXT' => 0, 'BLOB' => 0, 'INTEGER' => 1, 'FLOAT' => 2, 'REAL' => 2, 'DOUBLE' => 2}
89
+ tmap = {'INT' => 1, 'TINYINT' => 1, 'SMALLINT' => 1, 'MEDIUMINT' => 1, 'BIGINT' => 1, 'UNSIGNED BIGINT' => 1, 'VARCHAR' => 0, 'CHARACTER' => 0, 'VARYING CHARACTER' => 0, 'LONGVARCHAR' => 0, 'TEXT' => 0, 'BLOB' => 0, 'INTEGER' => 1, 'FLOAT' => 2, 'REAL' => 2, 'DOUBLE' => 2}
86
90
  # -----------> in a way ... <--------------
87
91
 
88
92
  begin
@@ -95,7 +99,7 @@ class SQLite2DBF
95
99
  @log.debug(tn[0] << ': ' << table_info.join)
96
100
  content = db.execute('select * from ' << tname )
97
101
  if(:table == dbf_file)
98
- dbf_name = tname << (content.empty? ? '_empty' : '')<< '.dbf'
102
+ dbf_name = @dbf_path << File::Separator << tname << (content.empty? ? '_empty' : '')<< '.dbf'
99
103
  else
100
104
  dbf_name = dbf_file.dup << num.to_s << (content.empty? ? '_empty' : '')<< '.dbf'
101
105
  end
@@ -107,7 +111,9 @@ class SQLite2DBF
107
111
  if( !@date_fields.include?(field_name) && !@time_fields.include?(field_name) )
108
112
  @log.debug('field is ' << field.to_s)
109
113
  # -----> determine the simple dbf data-type that has to do. <----
110
- ftype = tmap.detect{|key, value| field['type'].start_with?(key) }[1]
114
+ type_mapping = tmap.detect{|key, value| field['type'].upcase.start_with?(key) }
115
+ @log.debug('type_mapping is ' << type_mapping.to_s)
116
+ ftype = type_mapping[1] if type_mapping && type_mapping.respond_to?(:to_ary)
111
117
  # <---- Yes. I know. ---->
112
118
  end
113
119
 
@@ -122,21 +128,22 @@ class SQLite2DBF
122
128
  @log.debug('field is ' << field_name << ', svalue is ' << svalue.to_s << ', type is ' << sql_type)
123
129
  if(svalue && !svalue.to_s.empty?)
124
130
  if( @date_fields.include?(field_name) )
125
- conv_date = db.execute("select strftime('%Y%m%d %H%M%S', " << svalue.to_s << ", 'unixepoch')").join
131
+ conv_date = db.execute("select strftime('%Y-%m-%d %H:%M:%S', " << svalue.to_s << ", 'unixepoch')").join
126
132
  @log.debug('conv_date is ' << conv_date)
127
133
  dbt.write_string_attribute(record_no, field_index, conv_date)
128
134
  elsif( @time_fields.include?(field_name) )
129
- conv_time = db.execute("select strftime('%H%M%S', " << svalue.to_s << ", 'unixepoch')").join
135
+ conv_time = db.execute("select strftime('%s', " << svalue.to_s << ", 'unixepoch')").join
130
136
  @log.debug('conv_time is ' << conv_time)
131
137
  dbt.write_string_attribute(record_no, field_index, conv_time)
132
138
 
133
139
  else
134
- ftype = tmap.detect{|key, value| sql_type.start_with?(key) }[1]
135
- dbt.write_string_attribute(record_no, field_index, svalue ) if 0 == ftype
140
+ type_mapping = tmap.detect{|key, value| sql_type.upcase.start_with?(key) }
141
+ ftype = type_mapping[1] if type_mapping && type_mapping.respond_to?(:to_ary)
136
142
  begin
143
+ dbt.write_string_attribute(record_no, field_index, svalue ) if 0 == ftype
137
144
  dbt.write_integer_attribute(record_no, field_index, svalue) if 1 == ftype
138
145
  dbt.write_double_attribute(record_no, field_index, svalue) if 2 == ftype
139
- rescue RangeError => ex
146
+ rescue StandardError => ex
140
147
  @log.error(trl("ERROR! cannot write value of type %s" %sql_type) << ': ' << ex.message )
141
148
  end
142
149
  end
@@ -148,6 +155,7 @@ class SQLite2DBF
148
155
  dbt.close
149
156
  end
150
157
  end
158
+ puts trl('DONE. Bye.')
151
159
  end
152
160
  rescue SQLite3::Exception => er
153
161
  @log.error trl("ERROR! Cannot read the source-file") << ' (' << sqlite_file << "): %s" %er.message << '.'
data/lib/translations CHANGED
@@ -75,17 +75,17 @@ o:
75
75
  de: t
76
76
  fr: t
77
77
 
78
- --orig:
79
- de: --tab
80
- fr: --tab
78
+ --orig [PATH]:
79
+ de: --tab [PFAD]
80
+ fr: --tab [RÉPERTOIRE]
81
81
 
82
82
  Table-names:
83
83
  de: Namen der Tabellen
84
84
  fr: Noms des tableaux
85
85
 
86
- Use the table-name as file-name for the DBF-result:
87
- de: Tabellen-Namen als Dateinamen für die DBF-Ausgabe verwenden
88
- fr: Utiliser les noms des tableaux comme noms des fichiers DBF
86
+ Use the table-name as file-name for the DBF-result, store output in PATH:
87
+ de: Tabellen-Namen als Dateinamen für die DBF-Ausgabe verwenden, Ausgabe in PFAD speichern
88
+ fr: Utiliser les noms des tableaux comme noms des fichiers DBF, écris fichier dans RÉPERTOIRE
89
89
 
90
90
  ERROR! cannot write value of type INTEGER:
91
91
  de: FEHLER! Kann INTEGER-Wert nicht schreiben
@@ -167,5 +167,12 @@ ERROR! Cannot read the source-file:
167
167
  de: FEHLER! Kann die Quelldatei nicht lesen
168
168
  fr: ERREUR ! Source inlisible
169
169
 
170
+ ERROR! cannot write value of type TEXT:
171
+ de: FEHLER! Kann einen Textwert nicht schreiben
172
+ fr: ERREUR ! Une valeur de type TEXT ne peut pas être écrit
173
+
174
+ DONE. Bye.:
175
+ de: Fertig. Tschüsie.
176
+ fr: Terminé. À plus.
170
177
 
171
178
  # eof
data/sqlite2dbf.gemspec CHANGED
@@ -3,7 +3,7 @@ Gem::Specification.new do |s|
3
3
  s.name = $APPNAME
4
4
  s.version = $VERSION
5
5
  s.date = $DATE
6
- s.summary = "Parameter --dates added for a list of datetime and time fields, Blob as text"
6
+ s.summary = "Bug-fix: SQLite types are lower case or upper case. That is not a bug, but I thought they were always upper case. And there are null-types... non-types. Whatever."
7
7
  s.description = "converts SQLite to DBase"
8
8
  s.authors = $AUTHORS
9
9
  s.email = $EMAIL
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlite2dbf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Uplawski <michael.uplawski@uplawski.eu>
@@ -51,5 +51,6 @@ rubyforge_project:
51
51
  rubygems_version: 2.6.7
52
52
  signing_key:
53
53
  specification_version: 4
54
- summary: Parameter --dates added for a list of datetime and time fields, Blob as text
54
+ summary: 'Bug-fix: SQLite types are lower case or upper case. That is not a bug, but
55
+ I thought they were always upper case. And there are null-types... non-types. Whatever.'
55
56
  test_files: []