Skip to content

Commit

Permalink
Fix a bug in the emaj_snap_log_group() function. The first mark bound…
Browse files Browse the repository at this point in the history
… was not taken in account when filtering the log records to export.
  • Loading branch information
beaud76 committed Jun 12, 2023
1 parent 3d6db81 commit 6bcc4d8
Show file tree
Hide file tree
Showing 10 changed files with 21 additions and 21 deletions.
4 changes: 2 additions & 2 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ E-Maj - Change log
* Minor code changes.

###Bug fixes:###


* Fix a bug in the emaj_snap_log_group() function. The first mark bound was
not taken in account when filtering the log records to export.

4.2.0 (2023-Apr-03)
------
Expand Down
2 changes: 1 addition & 1 deletion sql/emaj--4.2.0--devel.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1892,7 +1892,7 @@ $emaj_snap_log_group$
END IF;
-- Build the conditions on emaj_gid corresponding to this marks frame, used for the COPY statements dumping the tables.
v_conditions = 'TRUE';
IF NOT p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
IF p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
v_conditions = v_conditions || ' AND emaj_gid > '|| v_firstEmajGid;
END IF;
IF NOT v_noSuppliedLastMark THEN
Expand Down
2 changes: 1 addition & 1 deletion sql/emaj--devel.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10826,7 +10826,7 @@ $emaj_snap_log_group$
END IF;
-- Build the conditions on emaj_gid corresponding to this marks frame, used for the COPY statements dumping the tables.
v_conditions = 'TRUE';
IF NOT p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
IF p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
v_conditions = v_conditions || ' AND emaj_gid > '|| v_firstEmajGid;
END IF;
IF NOT v_noSuppliedLastMark THEN
Expand Down
2 changes: 1 addition & 1 deletion sql/emaj-devel.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10833,7 +10833,7 @@ $emaj_snap_log_group$
END IF;
-- Build the conditions on emaj_gid corresponding to this marks frame, used for the COPY statements dumping the tables.
v_conditions = 'TRUE';
IF NOT p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
IF p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
v_conditions = v_conditions || ' AND emaj_gid > '|| v_firstEmajGid;
END IF;
IF NOT v_noSuppliedLastMark THEN
Expand Down
6 changes: 3 additions & 3 deletions test/11/expected/misc.out
Original file line number Diff line number Diff line change
Expand Up @@ -1014,14 +1014,14 @@ ERROR: emaj_snap_log_group: The directory parameter cannot be NULL.
CONTEXT: PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 52 at RAISE
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','unknown_directory',NULL);
ERROR: relative path not allowed for COPY to file
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','/unknown_directory',NULL);
ERROR: could not open file "/unknown_directory/myschema2_myTbl3_log.snap" for writing: No such file or directory
HINT: COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \copy.
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down Expand Up @@ -1076,7 +1076,7 @@ select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK',:'EMAJTESTTMPDI
ERROR: syntax error at or near "dummy_option"
LINE 1: ... TO '/tmp/emaj_11/misc/myschema2_myTbl3_log.snap' dummy_opti...
^
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_11/misc/myschema2_myTbl3_log.snap' dummy_option
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_11/misc/myschema2_myTbl3_log.snap' dummy_option
CONTEXT: PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down
6 changes: 3 additions & 3 deletions test/12/expected/misc.out
Original file line number Diff line number Diff line change
Expand Up @@ -1014,14 +1014,14 @@ ERROR: emaj_snap_log_group: The directory parameter cannot be NULL.
CONTEXT: PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 52 at RAISE
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','unknown_directory',NULL);
ERROR: relative path not allowed for COPY to file
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','/unknown_directory',NULL);
ERROR: could not open file "/unknown_directory/myschema2_myTbl3_log.snap" for writing: No such file or directory
HINT: COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \copy.
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down Expand Up @@ -1076,7 +1076,7 @@ select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK',:'EMAJTESTTMPDI
ERROR: syntax error at or near "dummy_option"
LINE 1: ... TO '/tmp/emaj_12/misc/myschema2_myTbl3_log.snap' dummy_opti...
^
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_12/misc/myschema2_myTbl3_log.snap' dummy_option
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_12/misc/myschema2_myTbl3_log.snap' dummy_option
CONTEXT: PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down
6 changes: 3 additions & 3 deletions test/13/expected/misc.out
Original file line number Diff line number Diff line change
Expand Up @@ -1014,14 +1014,14 @@ ERROR: emaj_snap_log_group: The directory parameter cannot be NULL.
CONTEXT: PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 52 at RAISE
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','unknown_directory',NULL);
ERROR: relative path not allowed for COPY to file
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','/unknown_directory',NULL);
ERROR: could not open file "/unknown_directory/myschema2_myTbl3_log.snap" for writing: No such file or directory
HINT: COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \copy.
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down Expand Up @@ -1076,7 +1076,7 @@ select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK',:'EMAJTESTTMPDI
ERROR: syntax error at or near "dummy_option"
LINE 1: ... TO '/tmp/emaj_13/misc/myschema2_myTbl3_log.snap' dummy_opti...
^
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_13/misc/myschema2_myTbl3_log.snap' dummy_option
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_13/misc/myschema2_myTbl3_log.snap' dummy_option
CONTEXT: PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down
2 changes: 1 addition & 1 deletion test/14/expected/install_psql.out
Original file line number Diff line number Diff line change
Expand Up @@ -10636,7 +10636,7 @@ $emaj_snap_log_group$
END IF;
-- Build the conditions on emaj_gid corresponding to this marks frame, used for the COPY statements dumping the tables.
v_conditions = 'TRUE';
IF NOT p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
IF p_firstMark IS NOT NULL AND p_firstMark <> '' THEN
v_conditions = v_conditions || ' AND emaj_gid > '|| v_firstEmajGid;
END IF;
IF NOT v_noSuppliedLastMark THEN
Expand Down
6 changes: 3 additions & 3 deletions test/14/expected/misc.out
Original file line number Diff line number Diff line change
Expand Up @@ -1050,14 +1050,14 @@ ERROR: emaj_snap_log_group: The directory parameter cannot be NULL.
CONTEXT: PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 52 at RAISE
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','unknown_directory',NULL);
ERROR: relative path not allowed for COPY to file
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','/unknown_directory',NULL);
ERROR: could not open file "/unknown_directory/myschema2_myTbl3_log.snap" for writing: No such file or directory
HINT: COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \copy.
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down Expand Up @@ -1112,7 +1112,7 @@ select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK',:'EMAJTESTTMPDI
ERROR: syntax error at or near "dummy_option"
LINE 1: ... TO '/tmp/emaj_14/misc/myschema2_myTbl3_log.snap' dummy_opti...
^
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_14/misc/myschema2_myTbl3_log.snap' dummy_option
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_14/misc/myschema2_myTbl3_log.snap' dummy_option
CONTEXT: PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down
6 changes: 3 additions & 3 deletions test/15/expected/misc.out
Original file line number Diff line number Diff line change
Expand Up @@ -1050,14 +1050,14 @@ ERROR: emaj_snap_log_group: The directory parameter cannot be NULL.
CONTEXT: PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 52 at RAISE
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','unknown_directory',NULL);
ERROR: relative path not allowed for COPY to file
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO 'unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK','/unknown_directory',NULL);
ERROR: could not open file "/unknown_directory/myschema2_myTbl3_log.snap" for writing: No such file or directory
HINT: COPY TO instructs the PostgreSQL server process to write a file. You may want a client-side facility such as psql's \copy.
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
CONTEXT: SQL statement "COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/unknown_directory/myschema2_myTbl3_log.snap' "
PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down Expand Up @@ -1112,7 +1112,7 @@ select emaj.emaj_snap_log_group('myGroup2',NULL,'EMAJ_LAST_MARK',:'EMAJTESTTMPDI
ERROR: syntax error at or near "dummy_option"
LINE 1: ... TO '/tmp/emaj_15/misc/myschema2_myTbl3_log.snap' dummy_opti...
^
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_15/misc/myschema2_myTbl3_log.snap' dummy_option
QUERY: COPY (SELECT * FROM emaj_myschema2."myTbl3_log" WHERE TRUE AND emaj_gid > 4000000 AND emaj_gid <= 5011710 ORDER BY emaj_gid, emaj_tuple) TO '/tmp/emaj_15/misc/myschema2_myTbl3_log.snap' dummy_option
CONTEXT: PL/pgSQL function emaj._copy_to_file(text,text,text) line 20 at EXECUTE
SQL statement "SELECT emaj._copy_to_file(v_stmt, v_fileName, p_copyOptions)"
PL/pgSQL function emaj.emaj_snap_log_group(text,text,text,text,text) line 98 at PERFORM
Expand Down

0 comments on commit 6bcc4d8

Please sign in to comment.