31 Commits

Author SHA1 Message Date
Dimitri Fontaine
52e3371be8 Review default SQLite options. 2014-09-22 14:34:57 +02:00
Alexander Couzens
b8807f52b1 sqlite: convert clob -> text 2014-08-22 20:44:49 +02:00
Dimitri Fontaine
ca52ddacb1 SQLite: transform "0" timestamps to NULL, see #100. 2014-07-30 18:42:49 +02:00
Dimitri Fontaine
ed8022ce64 SQLite: transform default values to their PostgreSQL representation.
When default values are used in SQLite they are of course using their
SQLite representation, which might not be compatible with the PostgreSQL
target data type we're casting to. Make it so that the default values
are transformed too, as we already do in the MySQL case.

See #100.
2014-07-30 16:32:35 +02:00
Dimitri Fontaine
79f622234f Allow specifying the SQLite text encoding, fix #99. 2014-07-25 19:01:15 +02:00
Dimitri Fontaine
b538539fb3 Handle errors when processing data from SQLite.
Some errors could be related to encoding issues, as in #99.
2014-07-25 18:40:46 +02:00
Dimitri Fontaine
cb4b2a3334 Convert SQLite tinyint to PostgreSQL smallint, fixes #97. 2014-07-18 11:06:37 +02:00
Dimitri Fontaine
ff8489e656 Fix internal API in sqlite, using report-full-summary. 2014-06-14 23:31:34 +02:00
Dimitri Fontaine
8becf05803 Register "real" datatype to the existing float transformation.
Attempt at fixing #73.
2014-06-05 01:00:33 +02:00
Dimitri Fontaine
1273c42393 Parse SQLite "unsigned" and "short" noise words, fix #72.
In SQLite it's possible to define columns using type names such as
"smallint unsigned" or "short integer", without any changes to the way
those data types are handled, given its "dynamic typing" features.

Improve the pgloader casting machinery for SQLite to handle those cases.
2014-06-04 11:11:50 +02:00
Dimitri Fontaine
e710cacad1 Truncate all tables in a single command, fix #61.
The truncate command is only sent to PostgreSQL when we didn't just
CREATE TABLE before. Some refactoring would be necessary to fit the
TRUNCATE command within the same transaction as the CREATE TABLE
command, for PostgreSQL performances.

This patch has been testing with MySQL and SQLite sources, the trick is
that to be able to test it, it's needed to first make a full
import (creating the target tables), so the test are not modified yet.
2014-05-19 18:07:35 +02:00
Dimitri Fontaine
9e12035ca1 Review SQLite blob types in light of "manifest typing", fix #60.
When using SQLite 3, a blob column might return either string of byte
vector values dynamically depending on the data itself, or maybe some
more complex parameters controlled at data insert time.

Hard-code the rule that a blob column returned as a string is in fact
base64 encoded (which looks like common practice) and decode it
automatically when needed, before sending to byte-vector-to-bytea. It
might be a tad slow but at least the data is properly converted.

In future, that decision might come and byte us in the back again, at
which point it'll be necessary to consider full casting options as in
the MySQL CAST rules. It seems like a big enough win for now if we can
avoid that.
2014-05-16 23:13:57 +02:00
Dimitri Fontaine
39af63b053 Implement support for SQLite blob to bytea, fixes #59.
This issue has been re-opened with blob instead of double. Semi-blindly
implement support for the blob type with an image data type.

Disturbingly enough when tested with non-binary data SQLite was
returning strings rather than byte vectors, tripping up the transform
function that sure expects byte vectors.
2014-05-16 00:28:02 +02:00
Dimitri Fontaine
d6c457d89a Add support for SQLite "double" data type, Fix #59.
This time with a test case rather than trying to blindly address the
problem in a very small amount of time.
2014-05-15 23:28:21 +02:00
Dimitri Fontaine
efda3eebfa Attempt at fixing #59 (sqlite double type casting).
Blindly add a new type conversion in the SQLite code base to handle the
source type DOUBLE and convert it to "double precision".
2014-05-13 11:57:03 +02:00
Dimitri Fontaine
3abcfeb569 Avoid empty index definitions in SQLite, fixes #52.
I could get down to the problem here, which is that a couple of indexes
where reported to pgloader but without any SQL definition for them, and
then pgloader would wait for non existing tasks.

It seems easier to just skip does indexes, that's what this patch does.
2014-04-28 16:00:34 +02:00
Dimitri Fontaine
9516a90d9d Fix SQLite support for filename parsing.
The code didn't get the memo about the way we now do support source
filenames and all.
2014-04-28 15:20:30 +02:00
Dimitri Fontaine
db947e1467 Rework reader and writer data exchange.
With this patch, the whole data massaging and final formating into the
PostgreSQL COPY TEXT format is done by the reader thread, which publishes a
batch at a time in the communication channel: a lparallel.queue object.

Before that, the raw vectors where pushed directly in the queue, offering
more flexibility to adjust to the reader and writer IO rates and
capabilities, but impeding the ability of the Garbage Collector: data still
in the queue was not collected even if not needed anymore.

The new model also uses less memory, and allows a better control over what
amount of data stays in memory. The new *concurrent-batches* parameter
should be key to being able to process huge rows.

The intent is to offering a way for the users to tune *concurrent-batches*
down to 1 for sources with massive per-row memory footprint. Even better
would be to find a way to automatically adjust the setting without spending
too much time counting the bytes we're batching.

Preliminary tests show no sensible impact on performances from this patch,
even some improvements in cases.
2014-01-25 23:54:49 +01:00
Dimitri Fontaine
8bf4bffb2c Fix SQLite stats, wasn't counting read rows. 2013-12-23 13:16:04 +01:00
Dimitri Fontaine
fe302af221 Refactor the dbname API to feed from the connection string directly. 2013-12-20 17:24:02 +01:00
Dimitri Fontaine
3a5d618cc8 Switch to using vectors for representing rows, minimize consing. 2013-12-18 23:30:11 +01:00
Dimitri Fontaine
6a6684bd8b Desultory improve the SQLite importer. 2013-11-21 21:34:02 +01:00
Dimitri Fontaine
e9b734dc41 Reverting "Shorten column names in the application to bypass a postmodern bug (or something)."
Revert "Shorten column names in the application to bypass a postmodern bug (or something)."

This reverts commit 240574a1a5f71edefc19a4b0f35f37862bdfeacc.
2013-11-08 17:27:45 +01:00
Dimitri Fontaine
240574a1a5 Shorten column names in the application to bypass a postmodern bug (or something). 2013-11-08 00:10:49 +01:00
Dimitri Fontaine
2e3edde3ad Implement a generic API to deal with indexes, use it in MySQL and SQLite sources. 2013-11-07 22:07:00 +01:00
Dimitri Fontaine
fe75f3df54 Improve the set of options for loading from databases, assorted fixes. 2013-11-05 23:07:03 +01:00
Dimitri Fontaine
7ef8cd7667 Implement filtering against the list of tables to migrate, in SQLite. 2013-11-05 14:52:22 +01:00
Dimitri Fontaine
ff9d0fd6f5 Fix function exporting bug, and index counts that caused infinite waiting. 2013-11-04 23:13:46 +01:00
Dimitri Fontaine
24f47640e2 Add grammar support for loading a SQLite database. 2013-11-04 21:54:51 +01:00
Dimitri Fontaine
8abbaeea37 Refactor SQLite to use the new API. 2013-11-04 16:22:17 +01:00
Dimitri Fontaine
0a38195853 Refactoring the API with a real definition of it, and reorg the source tree. 2013-11-04 13:21:45 +01:00