c_keywords.o: c_kwlist_d.h
keywords.o: $(top_srcdir)/src/include/parser/kwlist.h
+check:
+ $(prove_check)
+
install: all installdirs
$(INSTALL_PROGRAM) ecpg$(X) '$(DESTDIR)$(bindir)'
ecpg_targets += ecpg_exe
subdir('po', if_found: libintl)
+
+tests += {
+ 'name': 'ecpg',
+ 'sd': meson.current_source_dir(),
+ 'bd': meson.current_build_dir(),
+ 'tap': {
+ 'tests': [
+ 't/001_ecpg_err_warn_msg.pl',
+ 't/002_ecpg_err_warn_msg_informix.pl',
+ ],
+ 'deps': ecpg_exe,
+ },
+}
\ No newline at end of file
--- /dev/null
+
+# Copyright (c) 2021-2025, PostgreSQL Global Development Group
+
+use strict;
+use warnings FATAL => 'all';
+use PostgreSQL::Test::Utils;
+use Test::More;
+
+program_help_ok('ecpg');
+program_version_ok('ecpg');
+program_options_handling_ok('ecpg');
+command_fails(['ecpg'], 'ecpg without arguments fails');
+
+# Test that the ecpg command correctly detects unsupported or disallowed
+# statements in the input file and reports the appropriate error or
+# warning messages.
+command_checks_all(
+ [ 'ecpg', 't/err_warn_msg.pgc' ],
+ 3,
+ [qr//],
+ [
+ qr/ERROR: AT option not allowed in CONNECT statement/,
+ qr/ERROR: AT option not allowed in DISCONNECT statement/,
+ qr/ERROR: AT option not allowed in SET CONNECTION statement/,
+ qr/ERROR: AT option not allowed in TYPE statement/,
+ qr/ERROR: AT option not allowed in WHENEVER statement/,
+ qr/ERROR: AT option not allowed in VAR statement/,
+ qr/WARNING: COPY FROM STDIN is not implemented/,
+ qr/ERROR: using variable "cursor_var" in different declare statements is not supported/,
+ qr/ERROR: cursor "duplicate_cursor" is already defined/,
+ qr/ERROR: SHOW ALL is not implemented/,
+ qr/WARNING: no longer supported LIMIT/,
+ qr/WARNING: cursor "duplicate_cursor" has been declared but not opened/,
+ qr/WARNING: cursor "duplicate_cursor" has been declared but not opened/,
+ qr/WARNING: cursor ":cursor_var" has been declared but not opened/,
+ qr/WARNING: cursor ":cursor_var" has been declared but not opened/
+ ],
+ 'ecpg with errors and warnings');
+
+done_testing();
--- /dev/null
+
+# Copyright (c) 2021-2025, PostgreSQL Global Development Group
+
+use strict;
+use warnings FATAL => 'all';
+use PostgreSQL::Test::Utils;
+use Test::More;
+
+# Test that the ecpg command in INFORMIX mode correctly detects
+# unsupported or disallowed statements in the input file and reports
+# the appropriate error or warning messages.
+command_checks_all(
+ [ 'ecpg', '-C', 'INFORMIX', 't/err_warn_msg_informix.pgc' ],
+ 3,
+ [qr//],
+ [
+ qr/ERROR: AT option not allowed in CLOSE DATABASE statement/,
+ qr/ERROR: "database" cannot be used as cursor name in INFORMIX mode/
+ ],
+ 'ecpg in INFORMIX mode with errors and warnings');
+
+done_testing();
--- /dev/null
+/* Test ECPG warning/error messages */
+
+#include
+
+int
+main(void)
+{
+ EXEC SQL BEGIN DECLARE SECTION;
+ char *cursor_var = "mycursor";
+ short a;
+ EXEC SQL END DECLARE SECTION;
+
+ /* For consistency with other tests */
+ EXEC SQL CONNECT TO testdb AS con1;
+
+ /* Test AT option errors */
+ EXEC SQL AT con1 CONNECT TO testdb2;
+ EXEC SQL AT con1 DISCONNECT;
+ EXEC SQL AT con1 SET CONNECTION TO testdb2;
+ EXEC SQL AT con1 TYPE string IS char[11];
+ EXEC SQL AT con1 WHENEVER NOT FOUND CONTINUE;
+ EXEC SQL AT con1 VAR a IS int;
+
+ /* Test COPY FROM STDIN warning */
+ EXEC SQL COPY test FROM stdin;
+
+ /* Test same variable in multi declare statement */
+ EXEC SQL DECLARE :cursor_var CURSOR FOR SELECT * FROM test;
+ EXEC SQL DECLARE :cursor_var CURSOR FOR SELECT * FROM test;
+
+ /* Test duplicate cursor declarations */
+ EXEC SQL DECLARE duplicate_cursor CURSOR FOR SELECT * FROM test;
+ EXEC SQL DECLARE duplicate_cursor CURSOR FOR SELECT * FROM test;
+
+ /* Test SHOW ALL error */
+ EXEC SQL SHOW ALL;
+
+ /* Test deprecated LIMIT syntax warning */
+ EXEC SQL SELECT * FROM test LIMIT 10, 5;
+
+ return 0;
+}
--- /dev/null
+/* Test ECPG warning/error messages in INFORMIX mode */
+
+#include
+
+int
+main(void)
+{
+ /* For consistency with other tests */
+ $CONNECT TO testdb AS con1;
+
+ /* Test AT option usage at CLOSE DATABASE statement in INFORMIX mode */
+ $AT con1 CLOSE DATABASE;
+
+ /* Test cursor name errors in INFORMIX mode */
+ $DECLARE database CURSOR FOR SELECT * FROM test;
+
+ return 0;
+}