*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.92 2003/03/20 03:34:55 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.93 2003/03/20 05:18:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "utils/acl.h"
#include "utils/builtins.h"
-
-#ifndef INT64_IS_BUSTED
-#ifdef HAVE_LL_CONSTANTS
-#define SEQ_MAXVALUE ((int64) 0x7FFFFFFFFFFFFFFFLL)
-#else
-#define SEQ_MAXVALUE ((int64) 0x7FFFFFFFFFFFFFFF)
-#endif
-#else /* INT64_IS_BUSTED */
-#define SEQ_MAXVALUE ((int64) 0x7FFFFFFF)
-#endif /* INT64_IS_BUSTED */
-
-#define SEQ_MINVALUE (-SEQ_MAXVALUE)
-
/*
* We don't want to log each fetching of a value from a sequence,
* so we pre-log a few fetches in advance. In the event of
* by PostgreSQL
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.319 2003/03/10 22:28:19 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.320 2003/03/20 05:18:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "catalog/pg_trigger.h"
#include "catalog/pg_type.h"
+#include "commands/sequence.h"
+
#include "libpq-fe.h"
#include "libpq/libpq-fs.h"
PGresult *res;
char *last,
*incby,
- *maxv,
- *minv,
+ *maxv = NULL,
+ *minv = NULL,
*cache;
+ char bufm[100],
+ bufx[100];
bool cycled,
called;
PQExpBuffer query = createPQExpBuffer();
/* Make sure we are in proper schema */
selectSourceSchema(tbinfo->relnamespace->nspname);
+ snprintf(bufm, sizeof(bufm), INT64_FORMAT, SEQ_MINVALUE);
+ snprintf(bufx, sizeof(bufx), INT64_FORMAT, SEQ_MAXVALUE);
+
appendPQExpBuffer(query,
- "SELECT sequence_name, last_value, increment_by, max_value, "
- "min_value, cache_value, is_cycled, is_called from %s",
+ "SELECT sequence_name, last_value, increment_by, "
+ "CASE WHEN increment_by > 0 AND max_value = %s THEN NULL "
+ " WHEN increment_by < 0 AND max_value = -1 THEN NULL "
+ " ELSE max_value "
+ "END AS max_value, "
+ "CASE WHEN increment_by > 0 AND min_value = 1 THEN NULL "
+ " WHEN increment_by < 0 AND min_value = %s THEN NULL "
+ " ELSE min_value "
+ "END AS min_value, "
+ "cache_value, is_cycled, is_called from %s",
+ bufx, bufm,
fmtId(tbinfo->relname));
res = PQexec(g_conn, query->data);
last = PQgetvalue(res, 0, 1);
incby = PQgetvalue(res, 0, 2);
- maxv = PQgetvalue(res, 0, 3);
- minv = PQgetvalue(res, 0, 4);
+ if (!PQgetisnull(res, 0, 3))
+ maxv = PQgetvalue(res, 0, 3);
+ if (!PQgetisnull(res, 0, 4))
+ minv = PQgetvalue(res, 0, 4);
cache = PQgetvalue(res, 0, 5);
cycled = (strcmp(PQgetvalue(res, 0, 6), "t") == 0);
called = (strcmp(PQgetvalue(res, 0, 7), "t") == 0);
resetPQExpBuffer(query);
appendPQExpBuffer(query,
- "CREATE SEQUENCE %s\n START %s\n INCREMENT %s\n"
- " MAXVALUE %s\n MINVALUE %s\n CACHE %s%s;\n",
+ "CREATE SEQUENCE %s\n START WITH %s\n INCREMENT BY %s\n",
fmtId(tbinfo->relname),
- (called ? minv : last),
- incby, maxv, minv, cache,
- (cycled ? "\n CYCLE" : ""));
+ (called ? minv : last), incby);
+
+ if (maxv)
+ appendPQExpBuffer(query, " MAXVALUE %s\n", maxv);
+ else
+ appendPQExpBuffer(query, " NO MAXVALUE\n");
+
+ if (minv)
+ appendPQExpBuffer(query, " MINVALUE %s\n", minv);
+ else
+ appendPQExpBuffer(query, " NO MINVALUE\n");
+
+ appendPQExpBuffer(query,
+ " CACHE %s%s;\n",
+ cache, (cycled ? "\n CYCLE" : ""));
ArchiveEntry(fout, tbinfo->oid, tbinfo->relname,
tbinfo->relnamespace->nspname, tbinfo->usename,
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: sequence.h,v 1.21 2002/06/20 20:29:49 momjian Exp $
+ * $Id: sequence.h,v 1.22 2003/03/20 05:18:15 momjian Exp $
*
*-------------------------------------------------------------------------
*/
extern void seq_undo(XLogRecPtr lsn, XLogRecord *rptr);
extern void seq_desc(char *buf, uint8 xl_info, char *rec);
+/* Set the upper and lower bounds of a sequence */
+#ifndef INT64_IS_BUSTED
+#ifdef HAVE_LL_CONSTANTS
+#define SEQ_MAXVALUE ((int64) 0x7FFFFFFFFFFFFFFFLL)
+#else
+#define SEQ_MAXVALUE ((int64) 0x7FFFFFFFFFFFFFFF)
+#endif
+#else /* INT64_IS_BUSTED */
+#define SEQ_MAXVALUE ((int64) 0x7FFFFFFF)
+#endif /* INT64_IS_BUSTED */
+
+#define SEQ_MINVALUE (-SEQ_MAXVALUE)
+
#endif /* SEQUENCE_H */