From 29f1645d25e0b55fbaede0726ab96f35020338f3 Mon Sep 17 00:00:00 2001
From: Josh Soref <jsoref@users.noreply.github.com>
Date: Thu, 2 Mar 2017 05:38:16 +0000
Subject: [PATCH 1/5] spelling: comments

---
 contrib/pgcrypto/crypt-des.c            | 2 +-
 contrib/spi/timetravel.c                | 2 +-
 src/backend/access/transam/twophase.c   | 2 +-
 src/backend/commands/copy.c             | 4 ++--
 src/backend/commands/tablecmds.c        | 2 +-
 src/backend/foreign/foreign.c           | 2 +-
 src/backend/optimizer/plan/createplan.c | 2 +-
 src/backend/parser/parse_collate.c      | 4 ++--
 src/backend/parser/parse_param.c        | 2 +-
 src/backend/regex/regc_pg_locale.c      | 2 +-
 src/backend/storage/ipc/procarray.c     | 4 ++--
 src/backend/storage/lmgr/lock.c         | 4 ++--
 src/backend/tsearch/dict_thesaurus.c    | 2 +-
 src/backend/utils/adt/selfuncs.c        | 2 +-
 src/backend/utils/cache/lsyscache.c     | 2 +-
 src/backend/utils/cache/plancache.c     | 4 ++--
 src/backend/utils/error/elog.c          | 6 +++---
 src/backend/utils/fmgr/fmgr.c           | 2 +-
 src/backend/utils/hash/dynahash.c       | 2 +-
 src/backend/utils/misc/README           | 2 +-
 src/bin/pg_dump/parallel.c              | 2 +-
 src/fe_utils/string_utils.c             | 2 +-
 src/include/utils/jsonapi.h             | 2 +-
 src/interfaces/libpq/fe-connect.c       | 2 +-
 src/interfaces/libpq/fe-exec.c          | 2 +-
 src/pl/plperl/ppport.h                  | 6 +++---
 src/pl/plpgsql/src/pl_exec.c            | 2 +-
 src/pl/plpython/plpy_procedure.c        | 2 +-
 src/pl/plpython/plpy_typeio.c           | 2 +-
 src/test/regress/sql/errors.sql         | 2 +-
 src/test/regress/sql/groupingsets.sql   | 2 +-
 31 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/contrib/pgcrypto/crypt-des.c b/contrib/pgcrypto/crypt-des.c
index a4aa496..44a5731 100644
--- a/contrib/pgcrypto/crypt-des.c
+++ b/contrib/pgcrypto/crypt-des.c
@@ -416,7 +416,7 @@ des_setkey(const char *key)
 		&& rawkey1 == old_rawkey1)
 	{
 		/*
-		 * Already setup for this key. This optimisation fails on a zero key
+		 * Already setup for this key. This optimization fails on a zero key
 		 * (which is weak and has bad parity anyway) in order to simplify the
 		 * starting conditions.
 		 */
diff --git a/contrib/spi/timetravel.c b/contrib/spi/timetravel.c
index 2733aa2..51f8cb6 100644
--- a/contrib/spi/timetravel.c
+++ b/contrib/spi/timetravel.c
@@ -51,7 +51,7 @@ static EPlan *find_plan(char *ident, EPlan **eplan, int *nplans);
  *			and stop_date eq INFINITY [ and update_user eq current user ]
  *			and all other column values as in new tuple, and insert tuple
  *			with old data and stop_date eq current date
- *			ELSE - skip updation of tuple.
+ *			ELSE - skip UPDATE of tuple.
  *		2.  IF a delete affects tuple with stop_date eq INFINITY
  *			then insert the same tuple with stop_date eq current date
  *			[ and delete_user eq current user ]
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index 0a8edb9..4ef800e 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1612,7 +1612,7 @@ CheckPointTwoPhase(XLogRecPtr redo_horizon)
 	 *
 	 * It's also possible to move I/O out of the lock, but on every error we
 	 * should check whether somebody committed our transaction in different
-	 * backend. Let's leave this optimisation for future, if somebody will
+	 * backend. Let's leave this optimization for future, if somebody will
 	 * spot that this place cause bottleneck.
 	 *
 	 * Note that it isn't possible for there to be a GXACT with a
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 01a63c8..41bcb97 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -2405,7 +2405,7 @@ CopyFrom(CopyState cstate)
 	 * earlier scan or command. This ensures that if this subtransaction
 	 * aborts then the frozen rows won't be visible after xact cleanup. Note
 	 * that the stronger test of exactly which subtransaction created it is
-	 * crucial for correctness of this optimisation.
+	 * crucial for correctness of this optimization.
 	 */
 	if (cstate->freeze)
 	{
@@ -2972,7 +2972,7 @@ BeginCopyFrom(ParseState *pstate,
 				 * the special case of when the default expression is the
 				 * nextval() of a sequence which in this specific case is
 				 * known to be safe for use with the multi-insert
-				 * optimisation. Hence we use this special case function
+				 * optimization. Hence we use this special case function
 				 * checker rather than the standard check for
 				 * contain_volatile_functions().
 				 */
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 3cea220..b3c3d69 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -3162,7 +3162,7 @@ AlterTableGetLockLevel(List *cmds)
 				break;
 
 				/*
-				 * Changing foreign table options may affect optimisation.
+				 * Changing foreign table options may affect optimization.
 				 */
 			case AT_GenericOptions:
 			case AT_AlterColumnGenericOptions:
diff --git a/src/backend/foreign/foreign.c b/src/backend/foreign/foreign.c
index fdb4f71..5a45558 100644
--- a/src/backend/foreign/foreign.c
+++ b/src/backend/foreign/foreign.c
@@ -724,7 +724,7 @@ GetExistingLocalJoinPath(RelOptInfo *joinrel)
 		Path	   *path = (Path *) lfirst(lc);
 		JoinPath   *joinpath = NULL;
 
-		/* Skip parameterised paths. */
+		/* Skip parameterized paths. */
 		if (path->param_info != NULL)
 			continue;
 
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 1e953b4..bef190a 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -4461,7 +4461,7 @@ fix_indexqual_operand(Node *node, IndexOptInfo *index, int indexcol)
 		}
 	}
 
-	/* Ooops... */
+	/* Oops... */
 	elog(ERROR, "index key does not match expected index column");
 	return NULL;				/* keep compiler quiet */
 }
diff --git a/src/backend/parser/parse_collate.c b/src/backend/parser/parse_collate.c
index 52ac722..cc235d4 100644
--- a/src/backend/parser/parse_collate.c
+++ b/src/backend/parser/parse_collate.c
@@ -802,7 +802,7 @@ merge_collation_state(Oid collation,
 					else if (collation != DEFAULT_COLLATION_OID)
 					{
 						/*
-						 * Ooops, we have a conflict.  We cannot throw error
+						 * Oops, we have a conflict.  We cannot throw error
 						 * here, since the conflict could be resolved by a
 						 * later sibling CollateExpr, or the parent might not
 						 * care about collation anyway.  Return enough info to
@@ -821,7 +821,7 @@ merge_collation_state(Oid collation,
 				if (collation != context->collation)
 				{
 					/*
-					 * Ooops, we have a conflict of explicit COLLATE clauses.
+					 * Oops, we have a conflict of explicit COLLATE clauses.
 					 * Here we choose to throw error immediately; that is what
 					 * the SQL standard says to do, and there's no good reason
 					 * to be less strict.
diff --git a/src/backend/parser/parse_param.c b/src/backend/parser/parse_param.c
index 2575e02..20fd83f 100644
--- a/src/backend/parser/parse_param.c
+++ b/src/backend/parser/parse_param.c
@@ -210,7 +210,7 @@ variable_coerce_param_hook(ParseState *pstate, Param *param,
 		}
 		else
 		{
-			/* Ooops */
+			/* Oops */
 			ereport(ERROR,
 					(errcode(ERRCODE_AMBIGUOUS_PARAMETER),
 					 errmsg("inconsistent types deduced for parameter $%d",
diff --git a/src/backend/regex/regc_pg_locale.c b/src/backend/regex/regc_pg_locale.c
index afa3a7d..0121cbb 100644
--- a/src/backend/regex/regc_pg_locale.c
+++ b/src/backend/regex/regc_pg_locale.c
@@ -224,7 +224,7 @@ static const unsigned char pg_char_properties[128] = {
  * pg_set_regex_collation: set collation for these functions to obey
  *
  * This is called when beginning compilation or execution of a regexp.
- * Since there's no need for re-entrancy of regexp operations, it's okay
+ * Since there's no need for reentrancy of regexp operations, it's okay
  * to store the results in static variables.
  */
 void
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index cd14667..c724a0e 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -280,7 +280,7 @@ ProcArrayAdd(PGPROC *proc)
 	if (arrayP->numProcs >= arrayP->maxProcs)
 	{
 		/*
-		 * Ooops, no room.  (This really shouldn't happen, since there is a
+		 * Oops, no room.  (This really shouldn't happen, since there is a
 		 * fixed supply of PGPROC structs too, and so we should have failed
 		 * earlier.)
 		 */
@@ -370,7 +370,7 @@ ProcArrayRemove(PGPROC *proc, TransactionId latestXid)
 		}
 	}
 
-	/* Ooops */
+	/* Oops */
 	LWLockRelease(ProcArrayLock);
 
 	elog(LOG, "failed to find proc %p in ProcArray", proc);
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index ad64a79..4315be4 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -1125,7 +1125,7 @@ SetupLockInTable(LockMethod lockMethodTable, PGPROC *proc,
 														&found);
 	if (!proclock)
 	{
-		/* Ooops, not enough shmem for the proclock */
+		/* Oops, not enough shmem for the proclock */
 		if (lock->nRequested == 0)
 		{
 			/*
@@ -4046,7 +4046,7 @@ lock_twophase_recover(TransactionId xid, uint16 info,
 														&found);
 	if (!proclock)
 	{
-		/* Ooops, not enough shmem for the proclock */
+		/* Oops, not enough shmem for the proclock */
 		if (lock->nRequested == 0)
 		{
 			/*
diff --git a/src/backend/tsearch/dict_thesaurus.c b/src/backend/tsearch/dict_thesaurus.c
index ee23fcf..9a01075 100644
--- a/src/backend/tsearch/dict_thesaurus.c
+++ b/src/backend/tsearch/dict_thesaurus.c
@@ -23,7 +23,7 @@
 
 
 /*
- * Temporay we use TSLexeme.flags for inner use...
+ * Temporary we use TSLexeme.flags for inner use...
  */
 #define DT_USEASIS		0x1000
 
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 8b05e8f..8517d4a 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -4311,7 +4311,7 @@ get_restriction_variable(PlannerInfo *root, List *args, int varRelid,
 		return true;
 	}
 
-	/* Ooops, clause has wrong structure (probably var op var) */
+	/* Oops, clause has wrong structure (probably var op var) */
 	ReleaseVariableStats(*vardata);
 	ReleaseVariableStats(rdata);
 
diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c
index 1b04c09..b891f38 100644
--- a/src/backend/utils/cache/lsyscache.c
+++ b/src/backend/utils/cache/lsyscache.c
@@ -2332,7 +2332,7 @@ get_typavgwidth(Oid typid, int32 typmod)
 	}
 
 	/*
-	 * Ooops, we have no idea ... wild guess time.
+	 * Oops, we have no idea ... wild guess time.
 	 */
 	return 32;
 }
diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c
index dffc927..fa02374 100644
--- a/src/backend/utils/cache/plancache.c
+++ b/src/backend/utils/cache/plancache.c
@@ -621,7 +621,7 @@ RevalidateCachedQuery(CachedPlanSource *plansource)
 			return NIL;
 		}
 
-		/* Ooops, the race case happened.  Release useless locks. */
+		/* Oops, the race case happened.  Release useless locks. */
 		AcquirePlannerLocks(plansource->query_list, false);
 	}
 
@@ -845,7 +845,7 @@ CheckCachedPlan(CachedPlanSource *plansource)
 			return true;
 		}
 
-		/* Ooops, the race case happened.  Release useless locks. */
+		/* Oops, the race case happened.  Release useless locks. */
 		AcquireExecutorLocks(plan->stmt_list, false);
 	}
 
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 40e023c..6e83cbe 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -318,7 +318,7 @@ errstart(int elevel, const char *filename, int lineno,
 	 */
 	if (ErrorContext == NULL)
 	{
-		/* Ooops, hard crash time; very little we can do safely here */
+		/* Oops, hard crash time; very little we can do safely here */
 		write_stderr("error occurred at %s:%d before error message processing is available\n",
 					 filename ? filename : "(unknown file)", lineno);
 		exit(2);
@@ -331,7 +331,7 @@ errstart(int elevel, const char *filename, int lineno,
 	if (recursion_depth++ > 0 && elevel >= ERROR)
 	{
 		/*
-		 * Ooops, error during error processing.  Clear ErrorContext as
+		 * Oops, error during error processing.  Clear ErrorContext as
 		 * discussed at top of file.  We will not return to the original
 		 * error's reporter or handler, so we don't need it.
 		 */
@@ -1302,7 +1302,7 @@ elog_start(const char *filename, int lineno, const char *funcname)
 	/* Make sure that memory context initialization has finished */
 	if (ErrorContext == NULL)
 	{
-		/* Ooops, hard crash time; very little we can do safely here */
+		/* Oops, hard crash time; very little we can do safely here */
 		write_stderr("error occurred at %s:%d before error message processing is available\n",
 					 filename ? filename : "(unknown file)", lineno);
 		exit(2);
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 3976496..8c00da6 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -877,7 +877,7 @@ struct fmgr_security_definer_cache
  * To execute a call, we temporarily replace the flinfo with the cached
  * and looked-up one, while keeping the outer fcinfo (which contains all
  * the actual arguments, etc.) intact.  This is not re-entrant, but then
- * the fcinfo itself can't be used re-entrantly anyway.
+ * the fcinfo itself can't be used reentrantly anyway.
  */
 static Datum
 fmgr_security_definer(PG_FUNCTION_ARGS)
diff --git a/src/backend/utils/hash/dynahash.c b/src/backend/utils/hash/dynahash.c
index d370b72..12b1658 100644
--- a/src/backend/utils/hash/dynahash.c
+++ b/src/backend/utils/hash/dynahash.c
@@ -72,7 +72,7 @@
  * when combined with HASH_DEBUG, these are displayed by hdestroy().
  *
  * Problems & fixes to ejp@ausmelb.oz. WARNING: relies on pre-processor
- * concatenation property, in probably unnecessary code 'optimisation'.
+ * concatenation property, in probably unnecessary code 'optimization'.
  *
  * Modified margo@postgres.berkeley.edu February 1990
  *		added multiple table interface
diff --git a/src/backend/utils/misc/README b/src/backend/utils/misc/README
index 70244ce..6e29438 100644
--- a/src/backend/utils/misc/README
+++ b/src/backend/utils/misc/README
@@ -114,7 +114,7 @@ If a show_hook is provided, it points to a function of the signature
 This hook allows variable-specific computation of the value displayed
 by SHOW (and other SQL features for showing GUC variable values).
 The return value can point to a static buffer, since show functions are
-not used re-entrantly.
+not used reentrantly.
 
 
 Saving/Restoring GUC Variable Values
diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c
index be8e018..feda575 100644
--- a/src/bin/pg_dump/parallel.c
+++ b/src/bin/pg_dump/parallel.c
@@ -92,7 +92,7 @@ struct ParallelSlot
 
 	/* These fields are valid if workerStatus == WRKR_WORKING: */
 	ParallelCompletionPtr callback;		/* function to call on completion */
-	void	   *callback_data;	/* passthru data for it */
+	void	   *callback_data;	/* passthrough data for it */
 
 	ArchiveHandle *AH;			/* Archive data worker is using */
 
diff --git a/src/fe_utils/string_utils.c b/src/fe_utils/string_utils.c
index 08fe765..d1a9ddc 100644
--- a/src/fe_utils/string_utils.c
+++ b/src/fe_utils/string_utils.c
@@ -173,7 +173,7 @@ fmtQualifiedId(int remoteVersion, const char *schema, const char *id)
  * returned by PQserverVersion()) as a string.  This exists mainly to
  * encapsulate knowledge about two-part vs. three-part version numbers.
  *
- * For re-entrancy, caller must supply the buffer the string is put in.
+ * For reentrancy, caller must supply the buffer the string is put in.
  * Recommended size of the buffer is 32 bytes.
  *
  * Returns address of 'buf', as a notational convenience.
diff --git a/src/include/utils/jsonapi.h b/src/include/utils/jsonapi.h
index 6962f1a..8f132d7 100644
--- a/src/include/utils/jsonapi.h
+++ b/src/include/utils/jsonapi.h
@@ -127,7 +127,7 @@ extern JsonLexContext *makeJsonLexContextCstringLen(char *json,
 /*
  * Utility function to check if a string is a valid JSON number.
  *
- * str agrument does not need to be nul-terminated.
+ * str argument does not need to be nul-terminated.
  */
 extern bool IsValidJsonNumber(const char *str, int len);
 
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 685f355..24e8d65 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -2136,7 +2136,7 @@ keep_going:						/* We will come back to here until there is
 				}				/* loop over addresses */
 
 				/*
-				 * Ooops, no more addresses.  An appropriate error message is
+				 * Oops, no more addresses.  An appropriate error message is
 				 * already set up, so just set the right status.
 				 */
 				goto error_return;
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index b551875..9decd53 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -2334,7 +2334,7 @@ PQputCopyEnd(PGconn *conn, const char *errormsg)
 	{
 		if (errormsg)
 		{
-			/* Ooops, no way to do this in 2.0 */
+			/* Oops, no way to do this in 2.0 */
 			printfPQExpBuffer(&conn->errorMessage,
 							  libpq_gettext("function requires at least protocol version 3.0\n"));
 			return -1;
diff --git a/src/pl/plperl/ppport.h b/src/pl/plperl/ppport.h
index 31d06cb..8c23656 100644
--- a/src/pl/plperl/ppport.h
+++ b/src/pl/plperl/ppport.h
@@ -6205,10 +6205,10 @@ DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
     /* UVs are at least 32 bits, so the first 9 decimal digits cannot
        overflow.  */
     UV value = *s - '0';
-    /* This construction seems to be more optimiser friendly.
+    /* This construction seems to be more optimizer friendly.
        (without it gcc does the isDIGIT test and the *s - '0' separately)
        With it gcc on arm is managing 6 instructions (6 cycles) per digit.
-       In theory the optimiser could deduce how far to unroll the loop
+       In theory the optimizer could deduce how far to unroll the loop
        before checking for overflow.  */
     if (++s < send) {
       int digit = *s - '0';
@@ -6606,7 +6606,7 @@ DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *resul
     bool overflowed = FALSE;
 
     for (; len-- && *s; s++) {
-         /* gcc 2.95 optimiser not smart enough to figure that this subtraction
+         /* gcc 2.95 optimizer not smart enough to figure that this subtraction
             out front allows slicker code.  */
         int digit = *s - '0';
         if (digit >= 0 && digit <= 7) {
diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index 6fc3db0..3d32061 100644
--- a/src/pl/plpgsql/src/pl_exec.c
+++ b/src/pl/plpgsql/src/pl_exec.c
@@ -5541,7 +5541,7 @@ exec_eval_simple_expr(PLpgSQL_execstate *estate,
 			exec_check_rw_parameter(expr, expr->rwparam);
 		if (expr->expr_simple_expr == NULL)
 		{
-			/* Ooops, release refcount and fail */
+			/* Oops, release refcount and fail */
 			ReleaseCachedPlan(cplan, true);
 			return false;
 		}
diff --git a/src/pl/plpython/plpy_procedure.c b/src/pl/plpython/plpy_procedure.c
index 2b249b0..e86117c 100644
--- a/src/pl/plpython/plpy_procedure.c
+++ b/src/pl/plpython/plpy_procedure.c
@@ -122,7 +122,7 @@ PLy_procedure_get(Oid fn_oid, Oid fn_rel, bool is_trigger)
 	}
 	PG_CATCH();
 	{
-		/* Do not leave an uninitialised entry in the cache */
+		/* Do not leave an uninitialized entry in the cache */
 		if (use_cache)
 			hash_search(PLy_procedure_cache, &key, HASH_REMOVE, NULL);
 		PG_RE_THROW();
diff --git a/src/pl/plpython/plpy_typeio.c b/src/pl/plpython/plpy_typeio.c
index 06743e4..39516e9 100644
--- a/src/pl/plpython/plpy_typeio.c
+++ b/src/pl/plpython/plpy_typeio.c
@@ -827,7 +827,7 @@ PLyObject_ToComposite(PLyObToDatum *arg, int32 typmod, PyObject *plrv, bool inar
 
 	/*
 	 * This will set up the dummy PLyTypeInfo's output conversion routines,
-	 * since we left is_rowtype as 2. A future optimisation could be caching
+	 * since we left is_rowtype as 2. A future optimization could be caching
 	 * that info instead of looking it up every time a tuple is returned from
 	 * the function.
 	 */
diff --git a/src/test/regress/sql/errors.sql b/src/test/regress/sql/errors.sql
index cd370b4..14bc723 100644
--- a/src/test/regress/sql/errors.sql
+++ b/src/test/regress/sql/errors.sql
@@ -2,7 +2,7 @@
 -- ERRORS
 --
 
--- bad in postquel, but ok in postsql
+-- bad in postquel, but ok in PostgreSQL
 select 1;
 
 
diff --git a/src/test/regress/sql/groupingsets.sql b/src/test/regress/sql/groupingsets.sql
index 71cc0ec..cc557cc 100644
--- a/src/test/regress/sql/groupingsets.sql
+++ b/src/test/regress/sql/groupingsets.sql
@@ -140,7 +140,7 @@ select *
   from (values (1),(2)) v(x),
        lateral (select a, b, sum(v.x) from gstest_data(v.x) group by rollup (a,b)) s;
 
--- min max optimisation should still work with GROUP BY ()
+-- min max optimization should still work with GROUP BY ()
 explain (costs off)
   select min(unique1) from tenk1 GROUP BY ();
 
-- 
2.1.0

