On 12/14/2012 11:33 AM, Tom Lane wrote:
Heikki Linnakangas <hlinnakan...@vmware.com> writes:
On 14.12.2012 17:54, Tom Lane wrote:
BTW, I think psql already has a "psql_assert".
psql_assert looks like this:
#ifdef USE_ASSERT_CHECKING
#include <assert.h>
#define psql_assert(p) assert(p)
#else
...
On my Linux system, a failure looks like this:
~$ ./a.out
a.out: a.c:5: main: Assertion `1==2' failed.
Aborted
That seems fine to me.
Works for me.  So just rename that to Assert() and move it into
postgres-fe.h?

                        


Here's a patch for that. I changed some of the psql assertions so they all have explicit boolean expressions - I think that's better style for use of assert.

I noticed, BTW, that there are one or two places in backend code that seem to call plain assert unconditionally, notably src/port/open.c, src/backend/utils/adt/inet_net_pton.c and some contrib modules. That seems undesirable. Should we need to look at turning these into Assert calls?

cheers

andrew


diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 8ccd00d..e605785 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -99,7 +99,7 @@ HandleSlashCmds(PsqlScanState scan_state,
 	char	   *cmd;
 	char	   *arg;
 
-	psql_assert(scan_state);
+	Assert(scan_state != NULL);
 
 	/* Parse off the command name */
 	cmd = psql_scan_slash_command(scan_state);
@@ -1819,7 +1819,7 @@ editFile(const char *fname, int lineno)
 	char	   *sys;
 	int			result;
 
-	psql_assert(fname);
+	Assert(fname != NULL);
 
 	/* Find an editor to use */
 	editorName = getenv("PSQL_EDITOR");
@@ -2177,7 +2177,7 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
 {
 	size_t		vallen = 0;
 
-	psql_assert(param);
+	Assert(param != NULL);
 
 	if (value)
 		vallen = strlen(value);
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 179c162..c2a2ab6 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -1160,7 +1160,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec)
 			}
 
 			OK = AcceptResult(results);
-			psql_assert(!OK);
+			Assert(!OK);
 			PQclear(results);
 			break;
 		}
diff --git a/src/bin/psql/common.h b/src/bin/psql/common.h
index f54baab..7f34290 100644
--- a/src/bin/psql/common.h
+++ b/src/bin/psql/common.h
@@ -12,13 +12,6 @@
 #include <setjmp.h>
 #include "libpq-fe.h"
 
-#ifdef USE_ASSERT_CHECKING
-#include <assert.h>
-#define psql_assert(p) assert(p)
-#else
-#define psql_assert(p)
-#endif
-
 #define atooid(x)  ((Oid) strtoul((x), NULL, 10))
 
 /*
diff --git a/src/bin/psql/psqlscan.l b/src/bin/psql/psqlscan.l
index 6c14298..f8822cc 100644
--- a/src/bin/psql/psqlscan.l
+++ b/src/bin/psql/psqlscan.l
@@ -1184,8 +1184,8 @@ psql_scan_setup(PsqlScanState state,
 				const char *line, int line_len)
 {
 	/* Mustn't be scanning already */
-	psql_assert(state->scanbufhandle == NULL);
-	psql_assert(state->buffer_stack == NULL);
+	Assert(state->scanbufhandle == NULL);
+	Assert(state->buffer_stack == NULL);
 
 	/* Do we need to hack the character set encoding? */
 	state->encoding = pset.encoding;
@@ -1245,7 +1245,7 @@ psql_scan(PsqlScanState state,
 	int			lexresult;
 
 	/* Must be scanning already */
-	psql_assert(state->scanbufhandle);
+	Assert(state->scanbufhandle != NULL);
 
 	/* Set up static variables that will be used by yylex */
 	cur_state = state;
@@ -1424,7 +1424,7 @@ psql_scan_slash_command(PsqlScanState state)
 	PQExpBufferData mybuf;
 
 	/* Must be scanning already */
-	psql_assert(state->scanbufhandle);
+	Assert(state->scanbufhandle != NULL);
 
 	/* Build a local buffer that we'll return the data of */
 	initPQExpBuffer(&mybuf);
@@ -1478,7 +1478,7 @@ psql_scan_slash_option(PsqlScanState state,
 	char		local_quote;
 
 	/* Must be scanning already */
-	psql_assert(state->scanbufhandle);
+	Assert(state->scanbufhandle != NULL);
 
 	if (quote == NULL)
 		quote = &local_quote;
@@ -1512,7 +1512,7 @@ psql_scan_slash_option(PsqlScanState state,
 	 * or LEXRES_EOL (the latter indicating end of string).  If we were inside
 	 * a quoted string, as indicated by YY_START, EOL is an error.
 	 */
-	psql_assert(lexresult == LEXRES_EOL || lexresult == LEXRES_OK);
+	Assert(lexresult == LEXRES_EOL || lexresult == LEXRES_OK);
 
 	switch (YY_START)
 	{
@@ -1608,7 +1608,7 @@ void
 psql_scan_slash_command_end(PsqlScanState state)
 {
 	/* Must be scanning already */
-	psql_assert(state->scanbufhandle);
+	Assert(state->scanbufhandle != NULL);
 
 	/* Set up static variables that will be used by yylex */
 	cur_state = state;
diff --git a/src/bin/psql/stringutils.c b/src/bin/psql/stringutils.c
index b557c5a..f0bed2b 100644
--- a/src/bin/psql/stringutils.c
+++ b/src/bin/psql/stringutils.c
@@ -245,8 +245,8 @@ strip_quotes(char *source, char quote, char escape, int encoding)
 	char	   *src;
 	char	   *dst;
 
-	psql_assert(source);
-	psql_assert(quote);
+	Assert(source != NULL);
+	Assert(quote != '\0');
 
 	src = dst = source;
 
@@ -299,8 +299,8 @@ quote_if_needed(const char *source, const char *entails_quote,
 	char	   *dst;
 	bool		need_quotes = false;
 
-	psql_assert(source);
-	psql_assert(quote);
+	Assert(source != NULL);
+	Assert(quote != '\0');
 
 	src = source;
 	dst = ret = pg_malloc(2 * strlen(src) + 3); /* excess */
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 18a2595..2241fa3 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -3558,7 +3558,7 @@ complete_from_list(const char *text, int state)
 	const char *item;
 
 	/* need to have a list */
-	psql_assert(completion_charpp);
+	Assert(completion_charpp != NULL);
 
 	/* Initialization */
 	if (state == 0)
@@ -3620,7 +3620,7 @@ complete_from_list(const char *text, int state)
 static char *
 complete_from_const(const char *text, int state)
 {
-	psql_assert(completion_charp);
+	Assert(completion_charp != NULL);
 	if (state == 0)
 	{
 		if (completion_case_sensitive)
@@ -3708,7 +3708,7 @@ complete_from_files(const char *text, int state)
 		/* expect a NULL return for the empty string only */
 		if (!unquoted_text)
 		{
-			psql_assert(!*text);
+			Assert(*text != '\0');
 			unquoted_text = text;
 		}
 	}
diff --git a/src/include/postgres_fe.h b/src/include/postgres_fe.h
index fcfbd31..68262a7 100644
--- a/src/include/postgres_fe.h
+++ b/src/include/postgres_fe.h
@@ -24,4 +24,11 @@
 
 #include "c.h"
 
+#ifdef USE_ASSERT_CHECKING
+#include <assert.h>
+#define Assert(p) assert(p)
+#else
+#define Assert(p)
+#endif
+
 #endif   /* POSTGRES_FE_H */
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to