Commit Graph

1568 Commits

Author SHA1 Message Date
Dimitri Fontaine
1f354131d0 Release pgloader 3.5.1.
Lots of bug fixes did happen, time to release.
2018-05-17 10:41:40 +02:00
Dimitri Fontaine
f30f596eca Review bundle and regression test facilities.
Some path computation didn't work when trying to regression test the
produced bundle.

Also, the bundle building steps would use the pgloader system definition and
dependencies from what's currently available in Quicklisp rather than from
the local pgloader.asd being built.
2018-05-17 10:39:32 +02:00
Dimitri Fontaine
1fe835d31b Add sample data for fields escaped by double-quote.
See #787.
2018-04-29 19:05:52 +02:00
Dimitri Fontaine
a392328dad Allow any ordering of guards and extra cast rule clauses.
It used to be that extra were forced to being parsed before guards, but
there's no reason why a user wouldn't think to write its clauses the other
way round, so add support for that as well.

See #779.
2018-04-29 19:00:20 +02:00
Dimitri Fontaine
01f877bad7 Testing a change in the way we load CL+SSL.
Apparently cl+ssl needs to be reloaded a very specific way at image startup
time, and provides a function to do just that. Let's try and use this piece
of magic rather cffi:load-foreign-library directly.
2018-04-16 15:46:16 +02:00
Dimitri Fontaine
cb9e01f4d9 Code review for previous commit.
See #771.
2018-03-27 14:55:31 +02:00
Goo
c6271506ab Add a new transformation function: hex-to-dec
Closes #771
2018-03-27 14:51:34 +02:00
Dimitri Fontaine
792c0d0357 Typo fix in docs about concurrency settings. 2018-03-26 14:05:05 +02:00
Dimitri Fontaine
e4dca1a086 Implement support for MySQL useSSL=true|false option.
The MySQL connection string parameter for SSL usage is useSSL, so map an
option name to our expected values for sslmode in database connection
strings.

See #748.
2018-03-16 16:41:40 +01:00
Denis Ivanov
a7fd776ecd Update mssql.rst (#762)
Typo in like word
2018-03-13 17:08:51 +01:00
Andy Chosak
ceb5c85f56 fix minor error in docs about logfile location (#761)
The default logfile location seems to be `/tmp/pgloader/pgloader.log`,
not `/tmp/pgloader.log` as currently documented. This is observable in
practice and also in [the source
code](5b227200a9/src/main.lisp (L110)).
2018-03-13 10:37:48 +01:00
Dimitri Fontaine
3112adea6f Fix date-with-no-separator transform.
The expected string length was hard-coded, which is not a good idea given
the support for custom date formats.
2018-03-07 23:07:00 +01:00
Dimitri Fontaine
42c9ccfbb3 DB3: pick user's choice of schema name when given.
We would hard-code the schema name into the table's name in the DB3 case on
the grounds that a db3/dbf file doesn't have a notion of a schema. But when
the user wants to add data into an existing target table, then we merge the
catalogs and must keep the given target schema and table name.

Fix #701.
2018-02-25 23:39:52 +01:00
Dimitri Fontaine
784aff6ed5 Handle parsing errors in pgpass gracefully.
Accept empty password lines in ~/.pgpass files, and when otherwise pgloader
fails to parse or process the file log a warning and return a nil password.

See #748.
2018-02-25 00:12:06 +01:00
Dimitri Fontaine
bd7eb38720 Review Dockerfiles.
Upgrade to stretch in the docker builds and improve disk footprint to some
degree, using classic docker tricks.

See #748.
2018-02-25 00:00:42 +01:00
Dimitri Fontaine
5c10f12a07 Fix duplicate package names.
In a previous commit we re-used the package name pgloader.copy for the now
separated implementation of the COPY protocol, but this package was already
in use for the implementation of the COPY file format as a pgloader source.

Oops.

And CCL was happily doing its magic anyway, so that I've been blind to the
problem.

To fix, rename the new package pgloader.pgcopy, and to avoid having to deal
with other problems of the same kind in the future, rename every source
package pgloader.source.<format>, so that we now have pgloader.source.copy
and pgloader.pgcopy, two visibily different packages to deal with.

This light refactoring came with a challenge tho. The split in between the
pgloader.sources API and the rest of the code involved some circular
depencendies in the namespaces. CL is pretty flexible here because it can
reload code definitions at runtime, but it was still a mess. To untangle it,
implement a new namespace, the pgloader.load package, where we can use the
pgloader.sources API and the pgloader.connection and pgloader.pgsql APIs
too.

A little problem gave birth to quite a massive patch. As it happens when
refactoring and cleaning-up the dirt in any large enough project, right?

See #748.
2018-02-24 19:24:22 +01:00
Dimitri Fontaine
4301503df2 Add a new test case for {{ENVVAR}} template support.
See #555.
2018-02-20 14:45:07 +01:00
Dimitri Fontaine
48af01dbbc Fix implementation of foreign keys in data only mode.
In data-only mode, the foreign keys parameter (which defaults to True) means
something special: we remove the fkey definitions prior to the data only
load then re-install the fkeys.

This got broken in a previous commit, the WITH clause option being processed
like the other DDL ones that only make sense when creating the schema. While
fixing the setting in copy-database, we have to also fix a nesting bug in
complete-pgsql-database that would prevent fkey to be installed again at the
end of the load.

This patch not only fix that choice, but also review the implementation of
the drop-pgsql-fkeys support function to use more modern internal API,
preparing a list of SQL statements to be sent to the psql-execute level.

Fixes #745.
2018-02-19 22:07:43 +01:00
Dimitri Fontaine
e129e77eb6 Fix SQL execute counters maintenance. 2018-02-19 22:06:51 +01:00
Dimitri Fontaine
957c975b9b Improve summary reporting of errors.
Not all error paths are counted correctly at this point, this commit
improves the situation in passing. A thorough review should probably be
planned sometime.
2018-02-19 22:05:53 +01:00
Dimitri Fontaine
4fed8c5eca Fix support for newid() from MS SQL.
Several places in the code are involved to deal with the default values from
MS SQL. The catalog query is dealing with strange quoting rules on the
source side and used to fill in directly the PostgreSQL expected value. But
then the quoting of a function call wasn't properly handled.

Rather than coping with the quoting rules here, have the catalog query
return a pgloader specific placeholder "GENERATE_UUID". Then the MS SQL
specific code can normalize that to the symbol :generate_uuid. Then the
generic PostgreSQL DDL code can implement the proper replacement for that
symbol, not having to know where it comes from.

Fix #742.
2018-02-17 00:25:33 +01:00
Dimitri Fontaine
0a315214f3 Some improvements on the GitHub issue template.
Well, let's be more direct to the user.
2018-02-17 00:18:42 +01:00
Dimitri Fontaine
a4a9fdf668 Add a GitHub issue template. 2018-02-17 00:12:36 +01:00
Dimitri Fontaine
5e3acbb462 When merging catalogs, "float" and "double precision" the same type.
PostgreSQL understands both spellings of the data type name and implements
float as being a double precision value, so we should refrain from any
warning about that non-discrepency when doing a data-only load.

Should fix #746.
2018-02-16 23:42:46 +01:00
Dimitri Fontaine
67a1b1d408 Fix SQLite SQL queries.
Some copy-paste errors made their way to those queries and prevented usage
of pgloader, but I missed that because I was using a previous version of the
query text files in my interactive environment.

Also, SQLite doesn't like the queries finishing with a semi-colon, so remove
them.

Fixes #747.
2018-02-16 17:51:58 +01:00
Christoph Berg
8e3ebd5f1e Remove obsolete "make docs" target
pgloader.1.md doesn't exist anymore
2018-02-13 21:02:59 +01:00
Xavier Noria
d0fbd2bf5c Typo fix in the README (MacOSX, macOs)
updates the name of Mac OS X (#743)
2018-02-13 11:28:26 +01:00
Dimitri Fontaine
ea6c91b429 Fix "drop default" casting rules for all databases.
The support for drop default in (user defined) casting rules was completely
broken in SQLite, because the code didn't even bother looking at what's
returning after applying the casting rules.

This patch fixes the code so that is uses the pgcol instance's default
value, as per after applying casting rules. The bug also existed in a subtle
form for MySQL and MS SQL, but would only show up there when the default
value is spelled using a known variation of “current timestamp”.
2018-02-08 23:33:51 +01:00
Dimitri Fontaine
29506e6fa6 Assorted fixes for SQLite.
First review the `sqlite_sequence` support so that we can still work with
databases that don't have this catalog, which doesn't always exists -- it
might depend on the SQLite version though.

Then while at it use the sql macro to host the SQLite “queries” in their own
files, enhancing the hackability of the system to some degrees. Not that
much, because we have to use a lot of PGRAMA command and then the column
output isn't documented with the query text itself.
2018-02-08 22:55:15 +01:00
Dimitri Fontaine
20d7858e27 Implement SQLite casting rule for “decimal”.
Fix #739.
2018-02-07 20:47:47 +01:00
Dimitri Fontaine
976e4c1c1d Fix SQLite processing of columns with a sequence attached.
The handling of the SQLite catalogs where fixed in a previous patch, but
either it's been broken in between or it never actually worked (oops).

Moreover, the recent patch about :on-update-current-timestamp changed the
casting rules matching code and we should position :auto-increment from the
SQLite module rather than "auto_increment" as before. That's better, but
wasn't done.

Fix #563 again, tested with a provided test-case (thanks!).
2018-01-31 22:49:10 +01:00
Dimitri Fontaine
4612e68435 Implement support for new casting rules guards and actions.
Namely the actions are “keep extra” and “drop extra” and the casting rule
guard is “with extra on update current timestamp”. Having support for those
elements in the casting rules allow such a definition as the following:

      type timestamp with extra on update current timestamp
        to "timestamp with time zone" drop extra

The effect of such as cast rule would be to ignore the MySQL extra
definition and then refrain pgloader from creating the PostgreSQL triggers
that implement the same behavior.

Fix #735.
2018-01-31 15:17:05 +01:00
Dimitri Fontaine
5ecd03ceba Don't push-row a nil value.
In case of a failure to pre-process or transform values in the row that as
been read, we need to refrain from pushing the row into our next batch.

See #726, that got hit by the recent bug in the middle of something else
entirely.
2018-01-25 23:53:11 +01:00
Dimitri Fontaine
25152f6054 Add a restart-case for interactive debugging.
When dealing with MATERIALIZING VIEWS test cases and failing in the middle
of them, as it happens when fixing bugs, then it was tedious (to say the
least) to clean-up manually the view each time.

That said, for end-users, doing it automatically would risk cleaning-up the
wrong view definition if they had a typo in their pgloader command, say.

Common Lisp helps a lot here: we simply create a restart that is only
available interactively for the developers of pgloader!
2018-01-25 23:38:59 +01:00
Dimitri Fontaine
7b08b6e3d3 Refrain from creating tables in “data only” operations.
We forgot that rule in the case of creating the target tables for the
materializing views commands, which led to surprising and wrong behavior.

Fix #721, and add a new test case while at it.
2018-01-25 23:32:31 +01:00
Dimitri Fontaine
5ba42edb0c Review misleading error message with schema not found.
It might be that the schema exists but we didn't find what we expected to
in there, so that it didn't make it to pgloader's internal catalogs. Be
friendly to the user with a better error message.

Fix #713.
2018-01-25 23:29:36 +01:00
Dimitri Fontaine
a603cd8882 Step back on (safety 0) optimization.
It doesn't appear worth it at this time yet, too risky.
2018-01-24 23:26:37 +01:00
Dimitri Fontaine
6ae3bd1862 Docs cleanup.
Don't maintain generated files in git, it's useless (thanks mainly to
readthedocs), also remove the previous format of the docs.
2018-01-24 22:47:37 +01:00
Dimitri Fontaine
f86371970f Review the pgloader COPY implementation further.
Refactor file organisation further to allow for adding a “direct stream”
option when the on-error-stop behavior has been selected. This happens
currently by default for databases sources.

Introduce the new WITH option “on error resume next” which forces the
classic behavior of pgloader. The option “on error stop” already existed,
its implementation is new.

When this new behavior is activated, the data is sent to PostgreSQL
directly, without intermediate batches being built. It means that the whole
operation fails at the first error, and we don't have any information in
memory to try replaying any COPY of the data. It's gone.

This behavior should be fine for database migrations as you don't usually
want to fix the data manually in intermediate files, you want to fix the
problem at the source database and do the whole dance all-over again, up
until your casting rules are perfect.

This patch might also incurr some performance benenits in terms of both
timing and memory usage, though the local testing didn't show much of
anything for the moment.
2018-01-24 22:45:23 +01:00
Dimitri Fontaine
8ee799070a Simplify format-vector-row a lot.
Copy some code over from cl-postgres-trivial-utf-8 and add the support for
PostgreSQL COPY escaping right at the same place, allowing to allocate our
formatted utf-8 buffer only once, with the escaping already installed.

This patch was expected to be more about perfs, but it's actually only about
code cleaning it seems, as it doesn't make a big difference in the testing I
could do here.

That said, getting rid of one intermediate buffer should be nice in terms of
memory management.
2018-01-24 00:10:40 +01:00
Dimitri Fontaine
adf03c47ad Clean up source code organisation.
The copy format and batch facilities are no longer the meat of your
PostgreSQL support in the src/pgsql directory, so have them leave in their
own space.
2018-01-23 19:52:13 +01:00
Dimitri Fontaine
3bb128c5db Review format-vector-row.
This function prepares the data to be sent down to PostgreSQL as a clean
COPY text with unicode handled correctly. This commit is mainly a clean-up
of the function, and also adds some smarts to try and make it faster.

In testing, the function is now tangentially faster than before, but not by
much. The hope here is that it's now easier to optimize it.
2018-01-22 21:37:14 +01:00
Dimitri Fontaine
ba2d8669c3 Add support for the newer Qmynd error handling.
We now have a qmynd-impl::decoding-error condition to deal with, which as a
very good error reporting, so that we don't need to poke into babel details
anymore. The error message adds the column name, type and collation to the
output, too.

We keep the babel handlers for a while until people have all migrated to
using the patch in qmynd.

With the fix to Qmynd, Fix #716.
2018-01-22 16:14:05 +01:00
Dimitri Fontaine
572f6a3dbe Fix CSV separator parsing.
The previous patch introduced parser conflicts and we couldn't parse some
expressions any more, such as the following:

        fields escaped by '\',

It's now possible to represent single quote as either '''', '\'', or '0x27'
and we still can parse '\' as being a single backslash character.

See #705.
2018-01-14 15:33:47 +01:00
Julien Danjou
bb6c3d0a32 doc: fix a few link format (#711)
They are still in Markdown format, remove or move to rst.
2018-01-09 19:22:21 +01:00
Olivier Macchioni
b683292784 Fix broken link to https://pgloader.io/ (#706) 2017-12-28 18:59:50 +01:00
Dimitri Fontaine
81be9ae60e Implement support for \' as the CSV separator.
The option "fields optionally enclosed by" was missing a way to easily
specify a single quote as the quoting character. Add '\'' to the existing
solution '0x27' which isn't as friendly.

See #705.
2017-12-26 21:04:06 +01:00
Dimitri Fontaine
07cdf3e7e5 Use MySQL column names in MySQL queries.
The query for concurrency-support didn't get the memo that we should ignore
PostgreSQL identifier-case when querying the source MySQL database. Fix the
query string to include column names as given by the MySQL catalogs.

In bug report #703, the problem is found in PostgreSQL queries. This has
been fixed before already. Trying to reproduce the bug produced an error in
the concurrency-support query instead, so let's fix this one.

Fix #703.
2017-12-22 14:15:46 +01:00
Dimitri Fontaine
25c79dfebc Switch the documentation to using Sphinx.
The website is moving to pgloader.org and readthedocs.io is going to be
integrated. Let's see what happens. The docs build fine locally with the
sphinx tools and the docs/Makefile.

Having separate files for the documentation should help ease the maintenance
and add new topics, such as support for Common Lisp Hackers level docs,
which are currently missing.
2017-12-21 17:45:09 +01:00
Dimitri Fontaine
21f8baabab Update CNAME 2017-12-21 17:21:19 +01:00