sqlite2dbf 0.2.3 → 0.2.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7be1a8a57f53ba10d2c381fcfb92ca0c6f1ff968
4
- data.tar.gz: 9adc48c9b542eee385332efb970af34e37ed6c4a
3
+ metadata.gz: 338fe75d81aa22633648e9005b9ad262a06bde71
4
+ data.tar.gz: 78d126d3a85a9ffe72ec7436c207aec4c1f94c0f
5
5
  SHA512:
6
- metadata.gz: '012886645568475052ef870adbdd5795f0f35b2a6971f859ea5fac9a8ec721a6c5826f538ed383604df9ca3e789f805c6cb97ed867c319e18c3bc4a9e9285e64'
7
- data.tar.gz: 427f6ec1332cf382f1b05e73ccaa6d7c9f36448525d2e4296575aee66dc701c8f6c3c30149452f685996eda03876c9cfa1fd6565905da0fb44d96e8d191411e7
6
+ metadata.gz: ce3e77e74de5e59efed84500ce4240ecb2d6315bb6dbe6a5688cf4ee337252e741f35be9adcc319fd229feacc6656e59a64492e4afb9cd402d50a28c4aa1bb7f
7
+ data.tar.gz: b09a42e729f994f60b02edf73a39f40c7e556c5080ae38e5b57f5870580765953198e921d9599c848b823c76e8a984f1c5c803bf53b5592d5b43b8dc0edee652
@@ -0,0 +1,455 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
7
+ <title>Sqlite2dbf</title>
8
+ <style type="text/css">
9
+
10
+ /*
11
+ :Author: David Goodger (goodger@python.org)
12
+ :Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
13
+ :Copyright: This stylesheet has been placed in the public domain.
14
+
15
+ Default cascading style sheet for the HTML output of Docutils.
16
+
17
+ See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
18
+ customize this style sheet.
19
+ */
20
+
21
+ /* used to remove borders from tables and images */
22
+ .borderless, table.borderless td, table.borderless th {
23
+ border: 0 }
24
+
25
+ table.borderless td, table.borderless th {
26
+ /* Override padding for "table.docutils td" with "! important".
27
+ The right padding separates the table cells. */
28
+ padding: 0 0.5em 0 0 ! important }
29
+
30
+ .first {
31
+ /* Override more specific margin styles with "! important". */
32
+ margin-top: 0 ! important }
33
+
34
+ .last, .with-subtitle {
35
+ margin-bottom: 0 ! important }
36
+
37
+ .hidden {
38
+ display: none }
39
+
40
+ .subscript {
41
+ vertical-align: sub;
42
+ font-size: smaller }
43
+
44
+ .superscript {
45
+ vertical-align: super;
46
+ font-size: smaller }
47
+
48
+ a.toc-backref {
49
+ text-decoration: none ;
50
+ color: black }
51
+
52
+ blockquote.epigraph {
53
+ margin: 2em 5em ; }
54
+
55
+ dl.docutils dd {
56
+ margin-bottom: 0.5em }
57
+
58
+ object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
59
+ overflow: hidden;
60
+ }
61
+
62
+ /* Uncomment (and remove this text!) to get bold-faced definition list terms
63
+ dl.docutils dt {
64
+ font-weight: bold }
65
+ */
66
+
67
+ div.abstract {
68
+ margin: 2em 5em }
69
+
70
+ div.abstract p.topic-title {
71
+ font-weight: bold ;
72
+ text-align: center }
73
+
74
+ div.admonition, div.attention, div.caution, div.danger, div.error,
75
+ div.hint, div.important, div.note, div.tip, div.warning {
76
+ margin: 2em ;
77
+ border: medium outset ;
78
+ padding: 1em }
79
+
80
+ div.admonition p.admonition-title, div.hint p.admonition-title,
81
+ div.important p.admonition-title, div.note p.admonition-title,
82
+ div.tip p.admonition-title {
83
+ font-weight: bold ;
84
+ font-family: sans-serif }
85
+
86
+ div.attention p.admonition-title, div.caution p.admonition-title,
87
+ div.danger p.admonition-title, div.error p.admonition-title,
88
+ div.warning p.admonition-title, .code .error {
89
+ color: red ;
90
+ font-weight: bold ;
91
+ font-family: sans-serif }
92
+
93
+ /* Uncomment (and remove this text!) to get reduced vertical space in
94
+ compound paragraphs.
95
+ div.compound .compound-first, div.compound .compound-middle {
96
+ margin-bottom: 0.5em }
97
+
98
+ div.compound .compound-last, div.compound .compound-middle {
99
+ margin-top: 0.5em }
100
+ */
101
+
102
+ div.dedication {
103
+ margin: 2em 5em ;
104
+ text-align: center ;
105
+ font-style: italic }
106
+
107
+ div.dedication p.topic-title {
108
+ font-weight: bold ;
109
+ font-style: normal }
110
+
111
+ div.figure {
112
+ margin-left: 2em ;
113
+ margin-right: 2em }
114
+
115
+ div.footer, div.header {
116
+ clear: both;
117
+ font-size: smaller }
118
+
119
+ div.line-block {
120
+ display: block ;
121
+ margin-top: 1em ;
122
+ margin-bottom: 1em }
123
+
124
+ div.line-block div.line-block {
125
+ margin-top: 0 ;
126
+ margin-bottom: 0 ;
127
+ margin-left: 1.5em }
128
+
129
+ div.sidebar {
130
+ margin: 0 0 0.5em 1em ;
131
+ border: medium outset ;
132
+ padding: 1em ;
133
+ background-color: #ffffee ;
134
+ width: 40% ;
135
+ float: right ;
136
+ clear: right }
137
+
138
+ div.sidebar p.rubric {
139
+ font-family: sans-serif ;
140
+ font-size: medium }
141
+
142
+ div.system-messages {
143
+ margin: 5em }
144
+
145
+ div.system-messages h1 {
146
+ color: red }
147
+
148
+ div.system-message {
149
+ border: medium outset ;
150
+ padding: 1em }
151
+
152
+ div.system-message p.system-message-title {
153
+ color: red ;
154
+ font-weight: bold }
155
+
156
+ div.topic {
157
+ margin: 2em }
158
+
159
+ h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
160
+ h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
161
+ margin-top: 0.4em }
162
+
163
+ h1.title {
164
+ text-align: center }
165
+
166
+ h2.subtitle {
167
+ text-align: center }
168
+
169
+ hr.docutils {
170
+ width: 75% }
171
+
172
+ img.align-left, .figure.align-left, object.align-left, table.align-left {
173
+ clear: left ;
174
+ float: left ;
175
+ margin-right: 1em }
176
+
177
+ img.align-right, .figure.align-right, object.align-right, table.align-right {
178
+ clear: right ;
179
+ float: right ;
180
+ margin-left: 1em }
181
+
182
+ img.align-center, .figure.align-center, object.align-center {
183
+ display: block;
184
+ margin-left: auto;
185
+ margin-right: auto;
186
+ }
187
+
188
+ table.align-center {
189
+ margin-left: auto;
190
+ margin-right: auto;
191
+ }
192
+
193
+ .align-left {
194
+ text-align: left }
195
+
196
+ .align-center {
197
+ clear: both ;
198
+ text-align: center }
199
+
200
+ .align-right {
201
+ text-align: right }
202
+
203
+ /* reset inner alignment in figures */
204
+ div.align-right {
205
+ text-align: inherit }
206
+
207
+ /* div.align-center * { */
208
+ /* text-align: left } */
209
+
210
+ .align-top {
211
+ vertical-align: top }
212
+
213
+ .align-middle {
214
+ vertical-align: middle }
215
+
216
+ .align-bottom {
217
+ vertical-align: bottom }
218
+
219
+ ol.simple, ul.simple {
220
+ margin-bottom: 1em }
221
+
222
+ ol.arabic {
223
+ list-style: decimal }
224
+
225
+ ol.loweralpha {
226
+ list-style: lower-alpha }
227
+
228
+ ol.upperalpha {
229
+ list-style: upper-alpha }
230
+
231
+ ol.lowerroman {
232
+ list-style: lower-roman }
233
+
234
+ ol.upperroman {
235
+ list-style: upper-roman }
236
+
237
+ p.attribution {
238
+ text-align: right ;
239
+ margin-left: 50% }
240
+
241
+ p.caption {
242
+ font-style: italic }
243
+
244
+ p.credits {
245
+ font-style: italic ;
246
+ font-size: smaller }
247
+
248
+ p.label {
249
+ white-space: nowrap }
250
+
251
+ p.rubric {
252
+ font-weight: bold ;
253
+ font-size: larger ;
254
+ color: maroon ;
255
+ text-align: center }
256
+
257
+ p.sidebar-title {
258
+ font-family: sans-serif ;
259
+ font-weight: bold ;
260
+ font-size: larger }
261
+
262
+ p.sidebar-subtitle {
263
+ font-family: sans-serif ;
264
+ font-weight: bold }
265
+
266
+ p.topic-title {
267
+ font-weight: bold }
268
+
269
+ pre.address {
270
+ margin-bottom: 0 ;
271
+ margin-top: 0 ;
272
+ font: inherit }
273
+
274
+ pre.literal-block, pre.doctest-block, pre.math, pre.code {
275
+ margin-left: 2em ;
276
+ margin-right: 2em }
277
+
278
+ pre.code .ln { color: grey; } /* line numbers */
279
+ pre.code, code { background-color: #eeeeee }
280
+ pre.code .comment, code .comment { color: #5C6576 }
281
+ pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
282
+ pre.code .literal.string, code .literal.string { color: #0C5404 }
283
+ pre.code .name.builtin, code .name.builtin { color: #352B84 }
284
+ pre.code .deleted, code .deleted { background-color: #DEB0A1}
285
+ pre.code .inserted, code .inserted { background-color: #A3D289}
286
+
287
+ span.classifier {
288
+ font-family: sans-serif ;
289
+ font-style: oblique }
290
+
291
+ span.classifier-delimiter {
292
+ font-family: sans-serif ;
293
+ font-weight: bold }
294
+
295
+ span.interpreted {
296
+ font-family: sans-serif }
297
+
298
+ span.option {
299
+ white-space: nowrap }
300
+
301
+ span.pre {
302
+ white-space: pre }
303
+
304
+ span.problematic {
305
+ color: red }
306
+
307
+ span.section-subtitle {
308
+ /* font-size relative to parent (h1..h6 element) */
309
+ font-size: 80% }
310
+
311
+ table.citation {
312
+ border-left: solid 1px gray;
313
+ margin-left: 1px }
314
+
315
+ table.docinfo {
316
+ margin: 2em 4em }
317
+
318
+ table.docutils {
319
+ margin-top: 0.5em ;
320
+ margin-bottom: 0.5em }
321
+
322
+ table.footnote {
323
+ border-left: solid 1px black;
324
+ margin-left: 1px }
325
+
326
+ table.docutils td, table.docutils th,
327
+ table.docinfo td, table.docinfo th {
328
+ padding-left: 0.5em ;
329
+ padding-right: 0.5em ;
330
+ vertical-align: top }
331
+
332
+ table.docutils th.field-name, table.docinfo th.docinfo-name {
333
+ font-weight: bold ;
334
+ text-align: left ;
335
+ white-space: nowrap ;
336
+ padding-left: 0 }
337
+
338
+ /* "booktabs" style (no vertical lines) */
339
+ table.docutils.booktabs {
340
+ border: 0px;
341
+ border-top: 2px solid;
342
+ border-bottom: 2px solid;
343
+ border-collapse: collapse;
344
+ }
345
+ table.docutils.booktabs * {
346
+ border: 0px;
347
+ }
348
+ table.docutils.booktabs th {
349
+ border-bottom: thin solid;
350
+ text-align: left;
351
+ }
352
+
353
+ h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
354
+ h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
355
+ font-size: 100% }
356
+
357
+ ul.auto-toc {
358
+ list-style-type: none }
359
+
360
+ </style>
361
+ </head>
362
+ <body>
363
+ <div class="document" id="sqlite2dbf">
364
+ <h1 class="title">SQLite2DBF</h1>
365
+ <h2 class="subtitle" id="convert-an-sqlite-database-table-to-foxbase-dbase">convert an sqlite database-table to FoxBase (dBase)</h2>
366
+
367
+ <div class="section" id="synopsis">
368
+ <h1>SYNOPSIS</h1>
369
+ <blockquote>
370
+ <strong>sqlite2dbf -s [SQLite-file] [options]</strong></blockquote>
371
+ <p>or</p>
372
+ <blockquote>
373
+ <strong>sqlite2dbf [Common options]</strong></blockquote>
374
+ </div>
375
+ <div class="section" id="description">
376
+ <h1>DESCRIPTION</h1>
377
+ <p>You can use a variety of graphical user interfaces, notably those which support
378
+ the SQL language, to create and maintain SQLite databases. The same is no
379
+ longer true for dBase, a database format which is considered outdated,
380
+ nowadays. However, the file-format is still in use in some contexts.</p>
381
+ <p>With sqlite2dbf you can convert one table at a time from an SQLite database
382
+ into a dbf-file (in FoxBase format) and so benefit from the available
383
+ GUI-interfaces, without risking incompatibilities, where a dBase-file is
384
+ needed.</p>
385
+ </div>
386
+ <div class="section" id="options">
387
+ <h1>OPTIONS</h1>
388
+ <p><strong>-s, --source</strong> [PATH] SQLite-file to read.</p>
389
+ <p><strong>-c, --config</strong> [PATH] Configuration file for this transformation</p>
390
+ <p><strong>-n, --name</strong> [TABLE] The name of the table from the SQLite-database to convert</p>
391
+ <p><strong>-t, --target</strong> [PATH] Path to the dBase-file to be written.</p>
392
+ <p><strong>-l, --list</strong> Show the list of available tables and exit</p>
393
+ <p><strong>-o, --out</strong> [PATH] Use the table-name as file-name for the DBF-result, store output in PATH</p>
394
+ <p><strong>--time</strong> [list] Fields (table-columns) which shall be handled as timestamp values.</p>
395
+ <p><strong>--date</strong> [list] Fields (table-columns) which shall be handled as date-time values.</p>
396
+ <div class="section" id="common-options">
397
+ <h2>Common Options</h2>
398
+ <p><strong>-d, --debug</strong> Show debug-messages</p>
399
+ <p><strong>-h, --help</strong> Show this message</p>
400
+ <p><strong>-v, --version</strong> Show version and program information</p>
401
+ </div>
402
+ </div>
403
+ <div class="section" id="examples">
404
+ <h1>EXAMPLES</h1>
405
+ <p>List available tables in a SQLite database:</p>
406
+ <blockquote>
407
+ sqlite2dbf --list -s database.sqlite</blockquote>
408
+ <p>Transform a table from the database to dBase, the resulting file will be named after the table:</p>
409
+ <blockquote>
410
+ sqlite2dbf -s database.sqlite --name table</blockquote>
411
+ <p>Transform a table from the database to dBase, write the result to the target-file:</p>
412
+ <blockquote>
413
+ sqlite2dbf -s database.sqlite --name table -t /directory/file.dbf</blockquote>
414
+ <p>Transform a table from the database to dBase, put the result in a named directory:</p>
415
+ <blockquote>
416
+ sqlite2dbf -s database.sqlite --name table -o /directory</blockquote>
417
+ <p>Transform a table from the database to dBase, handle the named fields as dates:</p>
418
+ <blockquote>
419
+ sqlite2dbf -s database.sqlite --name table --date &quot;expired last_accessed&quot;</blockquote>
420
+ <p>As before but be verbose:</p>
421
+ <blockquote>
422
+ sqlite2dbf -s database.sqlite --name table --date &quot;expired last_accessed&quot; -d</blockquote>
423
+ <p>Use a user-defined configuration from config.txt for this transformation:</p>
424
+ <blockquote>
425
+ sqlite2dbf -c /home/user/sqlite2dbf_config.txt</blockquote>
426
+ <p>As before but overwrite the path to the source-file:</p>
427
+ <blockquote>
428
+ sqlite2dbf -c /home/user/sqlite2dbf_config.txt --source base.sqlite</blockquote>
429
+ </div>
430
+ <div class="section" id="errors-and-warnings">
431
+ <h1>ERRORS and WARNINGS</h1>
432
+ <p>sqlite2dbf does not return error-codes but writes errors and warnings to
433
+ STDOUT. This mainly concerns cases, where a data-type from the SQLite-database
434
+ cannot be converted for use in the dBase-file, probably when date- and/or
435
+ time-fields are listed on the command-line. Please contact the author, if these
436
+ issues seriously obstruct your work with sqlite2dbf. The converter should in
437
+ any way create a useable dBase-file.</p>
438
+ </div>
439
+ <div class="section" id="source-code-and-development">
440
+ <h1>SOURCE CODE and DEVELOPMENT</h1>
441
+ <p>sqlite2dbf is developed in Ruby and can be installed as a Ruby-Gem. As Ruby is
442
+ an interpreter-language, the source-code of the installed version is always
443
+ accessible. You can also decompress the gem-file to take a look at the code.</p>
444
+ <table class="docutils field-list" frame="void" rules="none">
445
+ <col class="field-name" />
446
+ <col class="field-body" />
447
+ <tbody valign="top">
448
+ <tr class="field"><th class="field-name">AUTHOR:</th><td class="field-body">Michael Uplawski &lt;michael[dot]uplawski[at]uplawski[dot]eu&gt;</td>
449
+ </tr>
450
+ </tbody>
451
+ </table>
452
+ </div>
453
+ </div>
454
+ </body>
455
+ </html>
@@ -0,0 +1,157 @@
1
+ .\" Man page generated from reStructuredText.
2
+ .
3
+ .TH SQLITE2DBF "1" "Sun 14 May 2017" "0.2.5" "User Commands"
4
+ .SH NAME
5
+ SQLite2DBF \- convert an sqlite database-table to FoxBase (dBase)
6
+ .
7
+ .nr rst2man-indent-level 0
8
+ .
9
+ .de1 rstReportMargin
10
+ \\$1 \\n[an-margin]
11
+ level \\n[rst2man-indent-level]
12
+ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
13
+ -
14
+ \\n[rst2man-indent0]
15
+ \\n[rst2man-indent1]
16
+ \\n[rst2man-indent2]
17
+ ..
18
+ .de1 INDENT
19
+ .\" .rstReportMargin pre:
20
+ . RS \\$1
21
+ . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
22
+ . nr rst2man-indent-level +1
23
+ .\" .rstReportMargin post:
24
+ ..
25
+ .de UNINDENT
26
+ . RE
27
+ .\" indent \\n[an-margin]
28
+ .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
29
+ .nr rst2man-indent-level -1
30
+ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
31
+ .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
32
+ ..
33
+ .SH SYNOPSIS
34
+ .INDENT 0.0
35
+ .INDENT 3.5
36
+ \fBsqlite2dbf \-s [SQLite\-file] [options]\fP
37
+ .UNINDENT
38
+ .UNINDENT
39
+ .sp
40
+ or
41
+ .INDENT 0.0
42
+ .INDENT 3.5
43
+ \fBsqlite2dbf [Common options]\fP
44
+ .UNINDENT
45
+ .UNINDENT
46
+ .SH DESCRIPTION
47
+ .sp
48
+ You can use a variety of graphical user interfaces, notably those which support
49
+ the SQL language, to create and maintain SQLite databases. The same is no
50
+ longer true for dBase, a database format which is considered outdated,
51
+ nowadays. However, the file\-format is still in use in some contexts.
52
+ .sp
53
+ With sqlite2dbf you can convert one table at a time from an SQLite database
54
+ into a dbf\-file (in FoxBase format) and so benefit from the available
55
+ GUI\-interfaces, without risking incompatibilities, where a dBase\-file is
56
+ needed.
57
+ .SH OPTIONS
58
+ .sp
59
+ \fB\-s, \-\-source\fP [PATH] SQLite\-file to read.
60
+ .sp
61
+ \fB\-c, \-\-config\fP [PATH] Configuration file for this transformation
62
+ .sp
63
+ \fB\-n, \-\-name\fP [TABLE] The name of the table from the SQLite\-database to convert
64
+ .sp
65
+ \fB\-t, \-\-target\fP [PATH] Path to the dBase\-file to be written.
66
+ .sp
67
+ \fB\-l, \-\-list\fP Show the list of available tables and exit
68
+ .sp
69
+ \fB\-o, \-\-out\fP [PATH] Use the table\-name as file\-name for the DBF\-result, store output in PATH
70
+ .sp
71
+ \fB\-\-time\fP [list] Fields (table\-columns) which shall be handled as timestamp values.
72
+ .sp
73
+ \fB\-\-date\fP [list] Fields (table\-columns) which shall be handled as date\-time values.
74
+ .SS Common Options
75
+ .sp
76
+ \fB\-d, \-\-debug\fP Show debug\-messages
77
+ .sp
78
+ \fB\-h, \-\-help\fP Show this message
79
+ .sp
80
+ \fB\-v, \-\-version\fP Show version and program information
81
+ .SH EXAMPLES
82
+ .sp
83
+ List available tables in a SQLite database:
84
+ .INDENT 0.0
85
+ .INDENT 3.5
86
+ sqlite2dbf \-\-list \-s database.sqlite
87
+ .UNINDENT
88
+ .UNINDENT
89
+ .sp
90
+ Transform a table from the database to dBase, the resulting file will be named after the table:
91
+ .INDENT 0.0
92
+ .INDENT 3.5
93
+ sqlite2dbf \-s database.sqlite \-\-name table
94
+ .UNINDENT
95
+ .UNINDENT
96
+ .sp
97
+ Transform a table from the database to dBase, write the result to the target\-file:
98
+ .INDENT 0.0
99
+ .INDENT 3.5
100
+ sqlite2dbf \-s database.sqlite \-\-name table \-t /directory/file.dbf
101
+ .UNINDENT
102
+ .UNINDENT
103
+ .sp
104
+ Transform a table from the database to dBase, put the result in a named directory:
105
+ .INDENT 0.0
106
+ .INDENT 3.5
107
+ sqlite2dbf \-s database.sqlite \-\-name table \-o /directory
108
+ .UNINDENT
109
+ .UNINDENT
110
+ .sp
111
+ Transform a table from the database to dBase, handle the named fields as dates:
112
+ .INDENT 0.0
113
+ .INDENT 3.5
114
+ sqlite2dbf \-s database.sqlite \-\-name table \-\-date "expired last_accessed"
115
+ .UNINDENT
116
+ .UNINDENT
117
+ .sp
118
+ As before but be verbose:
119
+ .INDENT 0.0
120
+ .INDENT 3.5
121
+ sqlite2dbf \-s database.sqlite \-\-name table \-\-date "expired last_accessed" \-d
122
+ .UNINDENT
123
+ .UNINDENT
124
+ .sp
125
+ Use a user\-defined configuration from config.txt for this transformation:
126
+ .INDENT 0.0
127
+ .INDENT 3.5
128
+ sqlite2dbf \-c /home/user/sqlite2dbf_config.txt
129
+ .UNINDENT
130
+ .UNINDENT
131
+ .sp
132
+ As before but overwrite the path to the source\-file:
133
+ .INDENT 0.0
134
+ .INDENT 3.5
135
+ sqlite2dbf \-c /home/user/sqlite2dbf_config.txt \-\-source base.sqlite
136
+ .UNINDENT
137
+ .UNINDENT
138
+ .SH ERRORS AND WARNINGS
139
+ .sp
140
+ sqlite2dbf does not return error\-codes but writes errors and warnings to
141
+ STDOUT. This mainly concerns cases, where a data\-type from the SQLite\-database
142
+ cannot be converted for use in the dBase\-file, probably when date\- and/or
143
+ time\-fields are listed on the command\-line. Please contact the author, if these
144
+ issues seriously obstruct your work with sqlite2dbf. The converter should in
145
+ any way create a useable dBase\-file.
146
+ .SH SOURCE CODE AND DEVELOPMENT
147
+ .sp
148
+ sqlite2dbf is developed in Ruby and can be installed as a Ruby\-Gem. As Ruby is
149
+ an interpreter\-language, the source\-code of the installed version is always
150
+ accessible. You can also decompress the gem\-file to take a look at the code.
151
+ .INDENT 0.0
152
+ .TP
153
+ .B AUTHOR
154
+ Michael Uplawski <michael[dot]uplawski[at]uplawski[dot]eu>
155
+ .UNINDENT
156
+ .\" Generated by docutils manpage writer.
157
+ .
Binary file
@@ -0,0 +1,107 @@
1
+ ==========================
2
+ SQLite2DBF
3
+ ==========================
4
+ ------------------------------------------------------------
5
+ convert an sqlite database-table to FoxBase (dBase)
6
+ ------------------------------------------------------------
7
+
8
+ SYNOPSIS
9
+ =========
10
+
11
+ **sqlite2dbf -s [SQLite-file] [options]**
12
+
13
+ or
14
+
15
+ **sqlite2dbf [Common options]**
16
+
17
+ DESCRIPTION
18
+ ============
19
+
20
+ You can use a variety of graphical user interfaces, notably those which support
21
+ the SQL language, to create and maintain SQLite databases. The same is no
22
+ longer true for dBase, a database format which is considered outdated,
23
+ nowadays. However, the file-format is still in use in some contexts.
24
+
25
+ With sqlite2dbf you can convert one table at a time from an SQLite database
26
+ into a dbf-file (in FoxBase format) and so benefit from the available
27
+ GUI-interfaces, without risking incompatibilities, where a dBase-file is
28
+ needed.
29
+
30
+ OPTIONS
31
+ ============================
32
+ **-s, --source** [PATH] SQLite-file to read.
33
+
34
+ **-c, --config** [PATH] Configuration file for this transformation
35
+
36
+ **-n, --name** [TABLE] The name of the table from the SQLite-database to convert
37
+
38
+ **-t, --target** [PATH] Path to the dBase-file to be written.
39
+
40
+ **-l, --list** Show the list of available tables and exit
41
+
42
+ **-o, --out** [PATH] Use the table-name as file-name for the DBF-result, store output in PATH
43
+
44
+ **--time** [list] Fields (table-columns) which shall be handled as timestamp values.
45
+
46
+ **--date** [list] Fields (table-columns) which shall be handled as date-time values.
47
+
48
+ Common Options
49
+ ----------------
50
+
51
+ **-d, --debug** Show debug-messages
52
+
53
+ **-h, --help** Show this message
54
+
55
+ **-v, --version** Show version and program information
56
+
57
+ EXAMPLES
58
+ ============================
59
+ List available tables in a SQLite database:
60
+
61
+ sqlite2dbf --list -s database.sqlite
62
+
63
+ Transform a table from the database to dBase, the resulting file will be named after the table:
64
+
65
+ sqlite2dbf -s database.sqlite --name table
66
+
67
+ Transform a table from the database to dBase, write the result to the target-file:
68
+
69
+ sqlite2dbf -s database.sqlite --name table -t /directory/file.dbf
70
+
71
+ Transform a table from the database to dBase, put the result in a named directory:
72
+
73
+ sqlite2dbf -s database.sqlite --name table -o /directory
74
+
75
+ Transform a table from the database to dBase, handle the named fields as dates:
76
+
77
+ sqlite2dbf -s database.sqlite --name table --date "expired last_accessed"
78
+
79
+ As before but be verbose:
80
+
81
+ sqlite2dbf -s database.sqlite --name table --date "expired last_accessed" -d
82
+
83
+ Use a user-defined configuration from config.txt for this transformation:
84
+
85
+ sqlite2dbf -c /home/user/sqlite2dbf_config.txt
86
+
87
+ As before but overwrite the path to the source-file:
88
+
89
+ sqlite2dbf -c /home/user/sqlite2dbf_config.txt --source base.sqlite
90
+
91
+ ERRORS and WARNINGS
92
+ ============================
93
+ sqlite2dbf does not return error-codes but writes errors and warnings to
94
+ STDOUT. This mainly concerns cases, where a data-type from the SQLite-database
95
+ cannot be converted for use in the dBase-file, probably when date- and/or
96
+ time-fields are listed on the command-line. Please contact the author, if these
97
+ issues seriously obstruct your work with sqlite2dbf. The converter should in
98
+ any way create a useable dBase-file.
99
+
100
+ SOURCE CODE and DEVELOPMENT
101
+ ============================
102
+ sqlite2dbf is developed in Ruby and can be installed as a Ruby-Gem. As Ruby is
103
+ an interpreter-language, the source-code of the installed version is always
104
+ accessible. You can also decompress the gem-file to take a look at the code.
105
+
106
+ :AUTHOR: Michael Uplawski <michael[dot]uplawski[at]uplawski[dot]eu>
107
+
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2016 Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * ©2016-2017 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the GNU General Public License as published by *
@@ -29,7 +29,7 @@ require_relative 'translating'
29
29
  require_relative 'constants'
30
30
 
31
31
  class ArgParser
32
-
32
+ # Class level logger. This is a static class.
33
33
  self.extend(Logging)
34
34
  self.extend(Translating)
35
35
  @@log = init_logger()
@@ -117,7 +117,7 @@ end
117
117
 
118
118
  opts.on_tail(trl("-v"), trl("--version"), trl("Show version and program information") ) do
119
119
  puts "\t#{$APPNAME}"
120
- puts "\t© #{$YEARS}, <#{$AUTHORS.join(', ')}>"
120
+ puts "\t© #{$YEARS}, #{$AUTHORS.join(', ')}"
121
121
  exit true
122
122
  end
123
123
  end
data/lib/config CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # ©2016-2016, Michael Uplawski <michael.uplawski@souris-libre.fr>
2
+ # ©2016-2017, Michael Uplawski <michael.uplawski@souris-libre.fr>
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
5
5
  # the Free Software Foundation; either version 3 of the License, or
@@ -48,7 +48,7 @@ save_what:
48
48
  # Example: /data/my_database/customers.sqlite
49
49
  # ./my_employers.sqlite
50
50
  # F:\\Path_to_database\Products.db
51
- # Default: empty (required on the command-line)
51
+ # Default: empty (then REQUIRED on the command-line)
52
52
  source:
53
53
 
54
54
  # The name of the table, which is converted.
@@ -57,7 +57,7 @@ source:
57
57
  # table in the SQLite-database
58
58
  # Example: employees
59
59
  # Price-list
60
- # Default: empty (required on the command-line)
60
+ # Default: empty (then REQUIRED on the command-line)
61
61
  name:
62
62
 
63
63
  # The target-file (dBase).
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2016 Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * ©2016-2017 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the GNU General Public License as published by *
@@ -28,16 +28,23 @@ require_relative 'translating'
28
28
 
29
29
  class Configuration
30
30
  include File_Checking
31
- include Logging
32
31
  include Singleton
33
32
  include Translating
33
+
34
+ # class-level logger is not more useful in the singleton,
35
+ # than the object-level logger, but what the heg.
36
+
37
+ self.extend(Logging)
38
+ @@log = init_logger()
34
39
 
35
40
  # default configuration file
36
41
  @@config_file = File::dirname(__FILE__) << File::Separator << 'config'
37
42
 
38
43
  # do initializations
39
44
  def initialize()
40
- init_logger()
45
+ # Use class-level logger for now.
46
+ # init_logger()
47
+ @log = @@log
41
48
  end
42
49
 
43
50
  # Configure with the command-line arguments.
@@ -59,7 +66,7 @@ class Configuration
59
66
  @log.debug('config-file is ' << @@config_file)
60
67
  # read defaults from configuration-file
61
68
  co = OpenStruct.new(YAML::load_file(@@config_file))
62
- # merge and overwrite with the comman-line arguments
69
+ # merge and overwrite with the command-line arguments
63
70
  @config = co.to_h.merge(options.to_h)
64
71
  @log.debug('config is now: ' << @config.to_s )
65
72
  verify
@@ -1,9 +1,31 @@
1
+ #encoding: UTF-8
2
+ =begin
3
+ /***************************************************************************
4
+ * ©2016-2017 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
+ * *
6
+ * This program is free software; you can redistribute it and/or modify *
7
+ * it under the terms of the GNU General Public License as published by *
8
+ * the Free Software Foundation; either version 3 of the License, or *
9
+ * (at your option) any later version. *
10
+ * *
11
+ * This program is distributed in the hope that it will be useful, *
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
+ * GNU General Public License for more details. *
15
+ * *
16
+ * You should have received a copy of the GNU General Public License *
17
+ * along with this program; if not, write to the *
18
+ * Free Software Foundation, Inc., *
19
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
20
+ ***************************************************************************/
21
+ =end
22
+
1
23
  $APPNAME = 'sqlite2dbf'
2
- $VERSION = '0.2.3'
3
- $DATE = '2016-11-24'
24
+ $VERSION = '0.2.5'
25
+ $DATE = '2017-03-08'
4
26
  $AUTHORS = ["Michael Uplawski <michael.uplawski@uplawski.eu>"]
5
27
  $EMAIL = 'michael.uplawski@uplawski.eu'
6
28
  $LICENSE = 'GPL-3.0'
7
29
 
8
- $YEARS = '2016'
30
+ $YEARS = '2016 - 2017'
9
31
 
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2013-2016 Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * ©2013-2017 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the GNU General Public License as published by *
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2016 Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * ©2016-2017 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the GNU General Public License as published by *
@@ -29,7 +29,8 @@
29
29
  # in the future, make sense to preview several mapping-objects for the
30
30
  # transformation of several tables in a row.
31
31
  class Mapping
32
-
32
+ # Depending on the decisions for the future uses of this class,
33
+ # it might or might not be better to move the logger to class-level.
33
34
  include Logging
34
35
 
35
36
  @@TMap = {
@@ -52,9 +53,11 @@ class Mapping
52
53
  }
53
54
 
54
55
  # Constructor
55
- # Creates a mapping for the table of name config.name and basedon the
56
+ # Creates a mapping for the table of name config.name and based on the
56
57
  # table_info.
57
58
  def initialize config, table_info, content
59
+ # TODO: Veryfy the need for an object level logger. Move to class-level,
60
+ # when more than one object of this class can be created.
58
61
  init_logger()
59
62
 
60
63
  @table_name = config.name
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2016 Michael Uplawski <michael.uplawski@uplawski.eu> *
4
+ * ©2016-2017 Michael Uplawski <michael.uplawski@uplawski.eu> *
5
5
  * *
6
6
  * This program is free software; you can redistribute it and/or modify *
7
7
  * it under the terms of the GNU General Public License as published by *
@@ -34,6 +34,7 @@ require_relative 'argparser'
34
34
  =end
35
35
 
36
36
  class SQLite2DBF
37
+
37
38
  include Logging
38
39
  include Translating
39
40
 
@@ -41,7 +42,7 @@ class SQLite2DBF
41
42
  options = ArgParser::parse(args)
42
43
  @config = Configuration.instance()
43
44
  @config.set(options)
44
-
45
+ # Object level logger. “There can only be one!”
45
46
  init_logger
46
47
  level = (@config.debug ? Logger::DEBUG : @log.level)
47
48
  @log.level = level
@@ -136,7 +137,7 @@ class SQLite2DBF
136
137
  dbf_value = db.execute("select strftime('%s', " << value.to_s << ")").join if dbf_value.start_with?('-')
137
138
  end
138
139
 
139
- # create a time-vaue from value
140
+ # create a time-value from value
140
141
  def time(db, value)
141
142
  db.execute("select strftime('%s', " << value.to_s << ", 'unixepoch')").join
142
143
  end
@@ -166,9 +167,12 @@ class SQLite2DBF
166
167
 
167
168
  if(svalue && !svalue.to_s.empty? && dbf_type)
168
169
  svalue = date(db, svalue) if @date_fields.include?(field_name)
169
- svalue = date(db, svalue) if @time_fields.include?(field_name)
170
+ svalue = time(db, svalue) if @time_fields.include?(field_name)
170
171
 
171
172
  @log.debug('field is ' << field_name << ', svalue is ' << svalue.to_s << ', type is ' << dbf_type.to_s)
173
+ # This is Ruby. But if you do not like the verbosity
174
+ # remove the magic numbers and call them text, int and float or
175
+ # similar.
172
176
  begin
173
177
  case dbf_type
174
178
  when 0
@@ -1,7 +1,7 @@
1
1
  #encoding: UTF-8
2
2
  =begin
3
3
  /***************************************************************************
4
- * ©2011-2015, Michael Uplawski *
4
+ * ©2011-2017, Michael Uplawski *
5
5
  * <michael.uplawski@uplawski.eu> *
6
6
  * *
7
7
  * This program is free software; you can redistribute it and/or modify *
@@ -34,6 +34,9 @@ require_relative 'logging'
34
34
  Translations are read from a file "translations" in the program folder.
35
35
  =end
36
36
  module Translating
37
+ # Module-level logger. There is a static version of the translating
38
+ # function! Otherwise, the including objects should rather have their own
39
+ # loggers.
37
40
  self.extend(Logging)
38
41
 
39
42
  # intitialize class variabes (static attributes)
@@ -3,11 +3,11 @@ Gem::Specification.new do |s|
3
3
  s.name = $APPNAME
4
4
  s.version = $VERSION
5
5
  s.date = $DATE
6
- s.summary = "Man-Page in the doc-subdirectory. I still to not know how to install it correctly on the target system."
6
+ s.summary = "Bug-fixes and cosmetics"
7
7
  s.description = "converts SQLite to DBase"
8
8
  s.authors = $AUTHORS
9
9
  s.email = $EMAIL
10
- s.files = %w~sqlite2dbf~.collect{|f| 'bin/' << f} + %w~constants.rb mapping.rb argparser.rb sqlite2dbf.rb file_checking.rb log.conf logging.rb mapping.rb configuration.rb config translating.rb translations ~.collect{|f| 'lib/' << f} + %w~sqlite2dbf.gemspec~.collect{|f|f} + %w~sqlite2dbf.1~.collect{|f| 'man/' << f}
10
+ s.files = %w~sqlite2dbf~.collect{|f| 'bin/' << f} + %w~constants.rb mapping.rb argparser.rb sqlite2dbf.rb file_checking.rb log.conf logging.rb mapping.rb configuration.rb config translating.rb translations ~.collect{|f| 'lib/' << f} + %w~sqlite2dbf.gemspec~.collect{|f|f} + %w~man/sqlite2dbf.1 pdf/sqlite2dbf.pdf rst/sqlite2dbf.rst html/sqlite2dbf.html~.collect{|f| 'doc/' << f}
11
11
  s.requirements = 'shp, sqlite3'
12
12
  s.add_runtime_dependency 'shp', '~> 0.0', '>= 0.0.3'
13
13
  s.add_runtime_dependency 'sqlite3', '~> 1.3', '>= 1.3.12'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlite2dbf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Uplawski <michael.uplawski@uplawski.eu>
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-24 00:00:00.000000000 Z
11
+ date: 2017-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: shp
@@ -58,6 +58,10 @@ extensions: []
58
58
  extra_rdoc_files: []
59
59
  files:
60
60
  - bin/sqlite2dbf
61
+ - doc/html/sqlite2dbf.html
62
+ - doc/man/sqlite2dbf.1
63
+ - doc/pdf/sqlite2dbf.pdf
64
+ - doc/rst/sqlite2dbf.rst
61
65
  - lib/argparser.rb
62
66
  - lib/config
63
67
  - lib/configuration.rb
@@ -69,7 +73,6 @@ files:
69
73
  - lib/sqlite2dbf.rb
70
74
  - lib/translating.rb
71
75
  - lib/translations
72
- - man/sqlite2dbf.1
73
76
  - sqlite2dbf.gemspec
74
77
  homepage: https://rubygems.org/gems/sqlite2dbf
75
78
  licenses:
@@ -95,6 +98,5 @@ rubyforge_project:
95
98
  rubygems_version: 2.6.8
96
99
  signing_key:
97
100
  specification_version: 4
98
- summary: Man-Page in the doc-subdirectory. I still to not know how to install it correctly
99
- on the target system.
101
+ summary: Bug-fixes and cosmetics
100
102
  test_files: []
@@ -1,245 +0,0 @@
1
- .\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32)
2
- .\"
3
- .\" Standard preamble:
4
- .\" ========================================================================
5
- .de Sp \" Vertical space (when we can't use .PP)
6
- .if t .sp .5v
7
- .if n .sp
8
- ..
9
- .de Vb \" Begin verbatim text
10
- .ft CW
11
- .nf
12
- .ne \\$1
13
- ..
14
- .de Ve \" End verbatim text
15
- .ft R
16
- .fi
17
- ..
18
- .\" Set up some character translations and predefined strings. \*(-- will
19
- .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20
- .\" double quote, and \*(R" will give a right double quote. \*(C+ will
21
- .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
22
- .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
23
- .\" nothing in troff, for use with C<>.
24
- .tr \(*W-
25
- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26
- .ie n \{\
27
- . ds -- \(*W-
28
- . ds PI pi
29
- . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30
- . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
31
- . ds L" ""
32
- . ds R" ""
33
- . ds C` ""
34
- . ds C' ""
35
- 'br\}
36
- .el\{\
37
- . ds -- \|\(em\|
38
- . ds PI \(*p
39
- . ds L" ``
40
- . ds R" ''
41
- . ds C`
42
- . ds C'
43
- 'br\}
44
- .\"
45
- .\" Escape single quotes in literal strings from groff's Unicode transform.
46
- .ie \n(.g .ds Aq \(aq
47
- .el .ds Aq '
48
- .\"
49
- .\" If the F register is >0, we'll generate index entries on stderr for
50
- .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
51
- .\" entries marked with X<> in POD. Of course, you'll have to process the
52
- .\" output yourself in some meaningful fashion.
53
- .\"
54
- .\" Avoid warning from groff about undefined register 'F'.
55
- .de IX
56
- ..
57
- .if !\nF .nr F 0
58
- .if \nF>0 \{\
59
- . de IX
60
- . tm Index:\\$1\t\\n%\t"\\$2"
61
- ..
62
- . if !\nF==2 \{\
63
- . nr % 0
64
- . nr F 2
65
- . \}
66
- .\}
67
- .\"
68
- .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69
- .\" Fear. Run. Save yourself. No user-serviceable parts.
70
- . \" fudge factors for nroff and troff
71
- .if n \{\
72
- . ds #H 0
73
- . ds #V .8m
74
- . ds #F .3m
75
- . ds #[ \f1
76
- . ds #] \fP
77
- .\}
78
- .if t \{\
79
- . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80
- . ds #V .6m
81
- . ds #F 0
82
- . ds #[ \&
83
- . ds #] \&
84
- .\}
85
- . \" simple accents for nroff and troff
86
- .if n \{\
87
- . ds ' \&
88
- . ds ` \&
89
- . ds ^ \&
90
- . ds , \&
91
- . ds ~ ~
92
- . ds /
93
- .\}
94
- .if t \{\
95
- . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96
- . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97
- . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98
- . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99
- . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100
- . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101
- .\}
102
- . \" troff and (daisy-wheel) nroff accents
103
- .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104
- .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105
- .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106
- .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107
- .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108
- .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109
- .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110
- .ds ae a\h'-(\w'a'u*4/10)'e
111
- .ds Ae A\h'-(\w'A'u*4/10)'E
112
- . \" corrections for vroff
113
- .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114
- .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115
- . \" for low resolution devices (crt and lpr)
116
- .if \n(.H>23 .if \n(.V>19 \
117
- \{\
118
- . ds : e
119
- . ds 8 ss
120
- . ds o a
121
- . ds d- d\h'-1'\(ga
122
- . ds D- D\h'-1'\(hy
123
- . ds th \o'bp'
124
- . ds Th \o'LP'
125
- . ds ae ae
126
- . ds Ae AE
127
- .\}
128
- .rm #[ #] #H #V #F C
129
- .\" ========================================================================
130
- .\"
131
- .IX Title "SQLITE2DBF 1"
132
- .TH SQLITE2DBF 1 "2016-12-24" "perl v5.24.1" "sqlite2dbf conversion utility"
133
- .\" For nroff, turn off justification. Always turn off hyphenation; it makes
134
- .\" way too many mistakes in technical documents.
135
- .if n .ad l
136
- .nh
137
- .SH "NAME"
138
- sqlite2dbf \- convert an sqlite database\-table to FoxBase (dBase)
139
- .SH "SYNOPSIS"
140
- .IX Header "SYNOPSIS"
141
- \&\fB sqlite2dbf \-s [SQLite\-file] [options]\fR
142
- .PP
143
- or
144
- .PP
145
- \&\fB sqlite2dbf [Common options]\fR
146
- .SH "DESCRIPTION"
147
- .IX Header "DESCRIPTION"
148
- You can use a variety of graphical user interfaces, notably those which support
149
- the \s-1SQL\s0 language, to create and maintain SQLite databases. The same is no
150
- longer true for dBase, a database format which is considered outdated,
151
- nowadays. However, the file-format is still in use in some contexts.
152
- .PP
153
- With sqlite2dbf you can convert one table at a time from an SQLite database
154
- into a dbf-file (in FoxBase format) and so benefit from the available
155
- GUI-interfaces, without risking incompatibilities, where a dBase-file is
156
- needed.
157
- .SH "OPTIONS"
158
- .IX Header "OPTIONS"
159
- \&\fB\-s, \-\-source\fR [\s-1PATH\s0] SQLite-file to read.
160
- .PP
161
- \&\fB\-c, \-\-config\fR [\s-1PATH\s0] Configuration file for this transformation
162
- .PP
163
- \&\fB\-n, \-\-name\fR [\s-1TABLE\s0] The name of the table from the SQLite-database to convert
164
- .PP
165
- \&\fB\-t, \-\-target\fR [\s-1PATH\s0] Path to the dBase-file to be written.
166
- .PP
167
- \&\fB\-l, \-\-list\fR Show the list of available tables and exit
168
- .PP
169
- \&\fB\-o, \-\-out\fR [\s-1PATH\s0] Use the table-name as file-name for the DBF-result, store output in \s-1PATH\s0
170
- .PP
171
- \&\fB \-\-time\fR [list] Fields (table-columns) which shall be handled as timestamp values.
172
- .PP
173
- \&\fB \-\-date\fR [list] Fields (table-columns) which shall be handled as date-time values.
174
- .SS "Common Options"
175
- .IX Subsection "Common Options"
176
- \&\fB\-d, \-\-debug\fR Show debug-messages
177
- .PP
178
- \&\fB\-h, \-\-help\fR Show this message
179
- .PP
180
- \&\fB\-v, \-\-version\fR Show version and program information
181
- .SH "EXAMPLES"
182
- .IX Header "EXAMPLES"
183
- List available tables in a SQLite database:
184
- .PP
185
- .Vb 1
186
- \& sqlite2dbf \-\-list \-s database.sqlite
187
- .Ve
188
- .PP
189
- Transform a table from the database to dBase, the resulting file will be named after the table:
190
- .PP
191
- .Vb 1
192
- \& sqlite2dbf \-s database.sqlite \-\-name table
193
- .Ve
194
- .PP
195
- Transform a table from the database to dBase, write the result to the target-file:
196
- .PP
197
- .Vb 1
198
- \& sqlite2dbf \-s database.sqlite \-\-name table \-t /directory/file.dbf
199
- .Ve
200
- .PP
201
- Transform a table from the database to dBase, put the result in a named directory:
202
- .PP
203
- .Vb 1
204
- \& sqlite2dbf \-s database.sqlite \-\-name table \-o /directory
205
- .Ve
206
- .PP
207
- Transform a table from the database to dBase, handle the named fields as dates:
208
- .PP
209
- .Vb 1
210
- \& sqlite2dbf \-s database.sqlite \-\-name table \-\-date "expired last_accessed"
211
- .Ve
212
- .PP
213
- As before but be verbose:
214
- .PP
215
- .Vb 1
216
- \& sqlite2dbf \-s database.sqlite \-\-name table \-\-date "expired last_accessed" \-d
217
- .Ve
218
- .PP
219
- Use a user-defined configuration from config.txt for this transformation:
220
- .PP
221
- .Vb 1
222
- \& sqlite2dbf \-c /home/user/sqlite2dbf_config.txt
223
- .Ve
224
- .PP
225
- As before but overwrite the path to the source-file:
226
- .PP
227
- .Vb 1
228
- \& sqlite2dbf \-c /home/user/sqlite2dbf_config.txt \-\-source base.sqlite
229
- .Ve
230
- .SH "ERRORS and WARNINGS"
231
- .IX Header "ERRORS and WARNINGS"
232
- sqlite2dbf does not return error-codes but writes errors and warnings to
233
- \&\s-1STDOUT.\s0 This mainly concerns cases, where a data-type from the SQLite-database
234
- cannot be converted for use in the dBase-file, probably when date\- and/or
235
- time-fields are listed on the command-line. Please contact the author, if these
236
- issues seriously obstruct your work with sqlite2dbf. The converter should in
237
- any way create a useable dBase-file.
238
- .SH "SOURCE and DEVELOPMENT"
239
- .IX Header "SOURCE and DEVELOPMENT"
240
- sqlite2dbf is developed in Ruby and can be installed as a Ruby-Gem. As Ruby is
241
- an interpreter-language, the source-code of the installed version is always
242
- accessible. You can also decompress the gem-file to take a look at the code.
243
- .SH "AUTHOR"
244
- .IX Header "AUTHOR"
245
- Michael Uplawski <michael[dot]uplawski[at]uplawski[dot]eu>