diff --git a/src/backend/nodes/read.c b/src/backend/nodes/read.c
index ef12ecf7347fdebfcf83e7207e09f9129fd95b78..a3b314386bae9c3151ebb9d9fbba7d9ea028cf63 100644
--- a/src/backend/nodes/read.c
+++ b/src/backend/nodes/read.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/read.c,v 1.7 1998/01/06 18:52:18 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/read.c,v 1.8 1998/01/07 08:07:58 momjian Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -94,7 +94,9 @@ nodeTokenType(char *token, int length)
 
 		retval = (*token != '.') ? T_Integer : T_Float;
 	}
-	else if (isalpha(*token) || *token == '_')
+		/* make "" == NULL, not T_String.  Is this a problem? 1998/1/7 bjm */
+	else if (isalpha(*token) || *token == '_' || 
+			 (token[0] == '\"' && token[1] == '\"'))
 		retval = ATOM_TOKEN;
 	else if (*token == '(')
 		retval = LEFT_PAREN;
@@ -147,8 +149,8 @@ lsptok(char *string, int *length)
 	{
 		for (local_str++; *local_str != '\"'; (*length)++, local_str++)
 			;
-		if (*length == 2)
-			*length -= 2;	/* if "", return zero length */
+		if (*length == 1)
+			*length = 0;	/* if "", return zero length */
 		else
 			(*length)++;
 		local_str++;
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 6a7a15280ac1a14345815c2c4ff9970e841848b2..3b43849f131c55647593cb3c8c7fb698fd328e5e 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.15 1998/01/06 23:19:49 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.16 1998/01/07 08:08:02 momjian Exp $
  *
  * NOTES
  *	  Most of the read functions for plan nodes are tested. (In fact, they
@@ -187,7 +187,6 @@ _readSortClause()
 	local_node = makeNode(SortClause);
 
 	token = lsptok(NULL, &length);		/* skip the :resdom */
-	token = lsptok(NULL, &length);		/* get resdom */
 	local_node->resdom = nodeRead(true);
 
 	token = lsptok(NULL, &length);		/* skip :opoid */
@@ -211,7 +210,6 @@ _readGroupClause()
 	local_node = makeNode(GroupClause);
 
 	token = lsptok(NULL, &length);		/* skip the :entry */
-	token = lsptok(NULL, &length);		/* get entry */
 	local_node->entry = nodeRead(true);
 
 	token = lsptok(NULL, &length);		/* skip :grpOpoid */
diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c
index 3dccd1bf50f924ae51c6aae29e9fc6fe36c57265..37ffb52ef3328634cb25b84b53eecfa484acaa91 100644
--- a/src/backend/rewrite/rewriteDefine.c
+++ b/src/backend/rewrite/rewriteDefine.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.10 1998/01/05 03:32:44 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.11 1998/01/07 08:08:08 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -115,7 +115,7 @@ InsertRule(char *rulname,
 		is_instead = "t";
 
 	if (evqual == NULL)
-		evqual = "nil";
+		evqual = "\"\"";
 
 	if (IsDefinedRewriteRule(rulname))
 		elog(ABORT, "Attempt to insert rule '%s' failed: already exists",
@@ -245,7 +245,7 @@ DefineQueryRewrite(RuleStmt *stmt)
 							eslot_string,
 							event_qualP,
 							true,
-							"nil");
+							"\"\"");
 		prs2_addToRelation(ev_relid, ruleId, event_type, event_attno, TRUE,
 						   event_qual, NIL);