syncbase/syncQL: remove: Type(v) = "<short-type-name>" support.

Remove special case code for:
  Type(v) = "<short-type_name>"
As such, the string comparison will work like all other string
comparisons in query language expressions.

The new idiom to specify the short type name in an expression is:
  Type(v) like "%.<short-type-name>"

In addition to the desirable property that it works like other
string comparisons, it avoids the mess created when one actually
wants the compare to be on the full type (i.e., including path).
For example, given the following type:
type FooBarBaz struct {
	A foo.Baz,
	B foo.bar.Baz
}
the following expression will now compare false:
Type(v.A) = Type(v.B)

Previsously, the alternate short name would have resulted in the
above expression evaluating to true.

No longer a multi-part change.

Change-Id: Ic2586a28b75d9d91169ac548d2310a210273c981
diff --git a/v23/syncbase/nosql/client_test.go b/v23/syncbase/nosql/client_test.go
index bd60315..2171ed2 100644
--- a/v23/syncbase/nosql/client_test.go
+++ b/v23/syncbase/nosql/client_test.go
@@ -84,7 +84,7 @@
 		t.Fatalf("tb.Put() failed: %v", err)
 	}
 
-	tu.CheckExec(t, ctx, d, "select k, v.Name from tb where Type(v) = \"Baz\"",
+	tu.CheckExec(t, ctx, d, "select k, v.Name from tb where Type(v) like \"%.Baz\"",
 		[]string{"k", "v.Name"},
 		[][]*vdl.Value{
 			[]*vdl.Value{vdl.ValueOf("baz"), vdl.ValueOf(baz.Name)},
@@ -111,7 +111,7 @@
 			[]*vdl.Value{vdl.ValueOf("baz"), vdl.ValueOf(baz)},
 		})
 
-	tu.CheckExec(t, ctx, d, "select k, v from tb where Type(v) = \"Bar\"",
+	tu.CheckExec(t, ctx, d, "select k, v from tb where Type(v) like \"%.Bar\"",
 		[]string{"k", "v"},
 		[][]*vdl.Value{
 			[]*vdl.Value{vdl.ValueOf("bar"), vdl.ValueOf(bar)},
@@ -123,7 +123,7 @@
 			[]*vdl.Value{vdl.ValueOf("bar"), vdl.ValueOf(bar)},
 		})
 
-	tu.CheckExec(t, ctx, d, "select k, v from tb where Type(v) = \"Baz\"",
+	tu.CheckExec(t, ctx, d, "select k, v from tb where Type(v) like \"%.Baz\"",
 		[]string{"k", "v"},
 		[][]*vdl.Value{
 			[]*vdl.Value{vdl.ValueOf("baz"), vdl.ValueOf(baz)},
diff --git a/v23/syncbase/nosql/exec_test/exec_test.go b/v23/syncbase/nosql/exec_test/exec_test.go
index 645b575..e8b10dc 100644
--- a/v23/syncbase/nosql/exec_test/exec_test.go
+++ b/v23/syncbase/nosql/exec_test/exec_test.go
@@ -229,7 +229,7 @@
 	basic := []execSelectTest{
 		{
 			// Select values for all customer records.
-			"select v from Customer where Type(v) = \"Customer\"",
+			"select v from Customer where Type(v) like \"%.Customer\"",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{customerEntries[0].value},
@@ -329,7 +329,7 @@
 		},
 		{
 			// Select keys & values for all customer records.
-			"select k, v from Customer where Type(v) = \"Customer\"",
+			"select k, v from Customer where Type(v) like \"%.Customer\"",
 			[]string{"k", "v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(customerEntries[0].key), customerEntries[0].value},
@@ -339,7 +339,7 @@
 		},
 		{
 			// Select keys & names for all customer records.
-			"select k, v.Name from Customer where Type(v) = \"Customer\"",
+			"select k, v.Name from Customer where Type(v) like \"%.Customer\"",
 			[]string{"k", "v.Name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(customerEntries[0].key), vdl.ValueOf("John Smith")},
@@ -368,7 +368,7 @@
 		},
 		{
 			// Select keys & values fo all invoice records.
-			"select k, v from Customer where Type(v) = \"Invoice\"",
+			"select k, v from Customer where Type(v) like \"%.Invoice\"",
 			[]string{"k", "v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(customerEntries[1].key), customerEntries[1].value},
@@ -382,7 +382,7 @@
 		},
 		{
 			// Select key, cust id, invoice number and amount for $88 invoices.
-			"select k, v.CustId as ID, v.InvoiceNum as InvoiceNumber, v.Amount as Amt from Customer where Type(v) = \"Invoice\" and v.Amount = 88",
+			"select k, v.CustId as ID, v.InvoiceNum as InvoiceNumber, v.Amount as Amt from Customer where Type(v) like \"%.Invoice\" and v.Amount = 88",
 			[]string{"k", "ID", "InvoiceNumber", "Amt"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(customerEntries[3].key), vdl.ValueOf(int64(1)), vdl.ValueOf(int64(1005)), vdl.ValueOf(int64(88))},
@@ -510,7 +510,7 @@
 		},
 		{
 			// Select id, name for customers whose last name is Masterson.
-			"select v.Id as ID, v.Name as Name from Customer where Type(v) = \"Customer\" and v.Name like \"%Masterson\"",
+			"select v.Id as ID, v.Name as Name from Customer where Type(v) like \"%.Customer\" and v.Name like \"%Masterson\"",
 			[]string{"ID", "Name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(int64(2)), vdl.ValueOf("Bat Masterson")},
@@ -518,7 +518,7 @@
 		},
 		{
 			// Select records where v.Address.City is "Collins" or type is Invoice.
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\"",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\"",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{customerEntries[1].value},
@@ -547,7 +547,7 @@
 		},
 		{
 			// Select customer name for customer Id (i.e., key) "001".
-			"select v.Name as Name from Customer where Type(v) = \"Customer\" and k = \"001\"",
+			"select v.Name as Name from Customer where Type(v) like \"%.Customer\" and k = \"001\"",
 			[]string{"Name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf("John Smith")},
@@ -596,7 +596,7 @@
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Limit 3
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" limit 3",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" limit 3",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{customerEntries[1].value},
@@ -607,7 +607,7 @@
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Offset 5
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" offset 5",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" offset 5",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{customerEntries[6].value},
@@ -624,21 +624,21 @@
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Offset 8
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" offset 8",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" offset 8",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Offset 23
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" offset 23",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" offset 23",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
 		{
 			// Select records where v.Address.City = "Collins" is 84 or type is Invoice.
 			// Limit 3 Offset 2
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" limit 3 offset 2",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" limit 3 offset 2",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{customerEntries[3].value},
@@ -649,7 +649,7 @@
 		{
 			// Select records where v.Address.City = "Collins" or (type is Invoice and v.InvoiceNum is not nil).
 			// Limit 3 Offset 2
-			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) = \"Invoice\" and v.InvoiceNum is not nil) limit 3 offset 2",
+			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) like \"%.Invoice\" and v.InvoiceNum is not nil) limit 3 offset 2",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{customerEntries[3].value},
@@ -660,14 +660,14 @@
 		{
 			// Select records where v.Address.City = "Collins" or (type is Invoice and v.InvoiceNum is nil).
 			// Limit 3 Offset 2
-			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) = \"Invoice\" and v.InvoiceNum is nil) limit 3 offset 2",
+			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) like \"%.Invoice\" and v.InvoiceNum is nil) limit 3 offset 2",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
 		// Test functions.
 		{
 			// Select invoice records where date is 2015-03-17
-			"select v from Customer where Type(v) = \"Invoice\" and YMD(v.InvoiceDate, \"America/Los_Angeles\") = Date(\"2015-03-17 PDT\")",
+			"select v from Customer where Type(v) like \"%.Invoice\" and YMD(v.InvoiceDate, \"America/Los_Angeles\") = Date(\"2015-03-17 PDT\")",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{customerEntries[5].value},
@@ -763,7 +763,7 @@
 		// Test string functions in where clause.
 		{
 			// Select invoices shipped to Any street -- using LowerCase.
-			"select k from Customer where Type(v) = \"Invoice\" and LowerCase(v.ShipTo.Street) like \"%any%\"",
+			"select k from Customer where Type(v) like \"%.Invoice\" and LowerCase(v.ShipTo.Street) like \"%any%\"",
 			[]string{"k"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(customerEntries[5].key)},
@@ -774,7 +774,7 @@
 		},
 		{
 			// Select invoices shipped to Any street -- using UpperCase.
-			"select k from Customer where Type(v) = \"Invoice\" and UpperCase(v.ShipTo.Street) like \"%ANY%\"",
+			"select k from Customer where Type(v) like \"%.Invoice\" and UpperCase(v.ShipTo.Street) like \"%ANY%\"",
 			[]string{"k"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(customerEntries[5].key)},
@@ -820,7 +820,7 @@
 		},
 		// LowerCase function
 		{
-			"select LowerCase(v.Name) as name from Customer where Type(v) = \"Customer\"",
+			"select LowerCase(v.Name) as name from Customer where Type(v) like \"%.Customer\"",
 			[]string{"name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf("john smith")},
@@ -830,7 +830,7 @@
 		},
 		// UpperCase function
 		{
-			"select UpperCase(v.Name) as NAME from Customer where Type(v) = \"Customer\"",
+			"select UpperCase(v.Name) as NAME from Customer where Type(v) like \"%.Customer\"",
 			[]string{"NAME"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf("JOHN SMITH")},
@@ -840,7 +840,7 @@
 		},
 		// YMDHMS function
 		{
-			"select k, YMDHMS(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMDHMS(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMDHMS",
@@ -851,7 +851,7 @@
 		},
 		// YMDHM function
 		{
-			"select k, YMDHM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMDHM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMDHM",
@@ -862,7 +862,7 @@
 		},
 		// YMDH function
 		{
-			"select k, YMDH(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMDH(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMDH",
@@ -873,7 +873,7 @@
 		},
 		// YMD function
 		{
-			"select k, YMD(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMD(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMD",
@@ -884,7 +884,7 @@
 		},
 		// YM function
 		{
-			"select k, YM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YM",
@@ -895,7 +895,7 @@
 		},
 		// Y function
 		{
-			"select k, Y(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"001001\"",
+			"select k, Y(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"001001\"",
 			[]string{
 				"k",
 				"Y",
@@ -906,7 +906,7 @@
 		},
 		// Nested functions
 		{
-			"select Y(YM(YMD(YMDH(YMDHM(YMDHMS(v.InvoiceDate, \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\")  from Customer where Type(v) = \"Invoice\" and k = \"001001\"",
+			"select Y(YM(YMD(YMDH(YMDHM(YMDHMS(v.InvoiceDate, \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\")  from Customer where Type(v) like \"%.Invoice\" and k = \"001001\"",
 			[]string{"Y"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(t2015)},
@@ -914,7 +914,7 @@
 		},
 		// Bad arg to function.  Expression is false.
 		{
-			"select v from Customer where Type(v) = \"Invoice\" and YMD(v.InvoiceDate, v.Foo) = v.InvoiceDate",
+			"select v from Customer where Type(v) like \"%.Invoice\" and YMD(v.InvoiceDate, v.Foo) = v.InvoiceDate",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
diff --git a/v23/syncbase/nosql/internal/query/conversions/conversions.go b/v23/syncbase/nosql/internal/query/conversions/conversions.go
index 547fe40..12a1dcd 100644
--- a/v23/syncbase/nosql/internal/query/conversions/conversions.go
+++ b/v23/syncbase/nosql/internal/query/conversions/conversions.go
@@ -32,8 +32,6 @@
 		c.Str = strconv.FormatInt(o.Int, 10)
 	case query_parser.TypStr:
 		c.Str = o.Str
-		c.HasAltStr = o.HasAltStr // true for type = expressions
-		c.AltStr = o.AltStr
 		c.Regex = o.Regex         // non-empty for rhs of like expressions
 		c.CompRegex = o.CompRegex // non-nil for rhs of like expressions
 	case query_parser.TypUint:
diff --git a/v23/syncbase/nosql/internal/query/eval.go b/v23/syncbase/nosql/internal/query/eval.go
index 1ab48c0..02364f8 100644
--- a/v23/syncbase/nosql/internal/query/eval.go
+++ b/v23/syncbase/nosql/internal/query/eval.go
@@ -303,26 +303,10 @@
 	}
 }
 
-// Return AltStr if available, else Str.
-// Must be called with an operand of type TypStr.
-func favorAltStr(strOp *query_parser.Operand) string {
-	if !strOp.HasAltStr {
-		return strOp.Str
-	}
-	return strOp.AltStr
-}
-
 func compareStrings(lhsValue, rhsValue *query_parser.Operand, oper *query_parser.BinaryOperator) bool {
 	switch oper.Type {
 	case query_parser.Equal:
-		r := lhsValue.Str == rhsValue.Str
-		// If either side has an AltStr, compare AltStr.
-		// If both have AltStr, compare altStr to AltStr.
-		if !r && lhsValue.HasAltStr || rhsValue.HasAltStr {
-			// Handle special case for Type functions (which have AltStr)
-			r = favorAltStr(lhsValue) == favorAltStr(rhsValue)
-		}
-		return r
+		return lhsValue.Str == rhsValue.Str
 	case query_parser.NotEqual:
 		return lhsValue.Str != rhsValue.Str
 	case query_parser.LessThan:
@@ -426,7 +410,6 @@
 	case vdl.Enum:
 		newOp.Type = query_parser.TypStr
 		newOp.Str = value.EnumLabel()
-		newOp.HasAltStr = false
 	case vdl.Int16, vdl.Int32, vdl.Int64:
 		newOp.Type = query_parser.TypInt
 		newOp.Int = value.Int()
@@ -439,7 +422,6 @@
 	case vdl.String:
 		newOp.Type = query_parser.TypStr
 		newOp.Str = value.RawString()
-		newOp.HasAltStr = false
 	case vdl.Complex64, vdl.Complex128:
 		newOp.Type = query_parser.TypComplex
 		newOp.Complex = value.Complex()
diff --git a/v23/syncbase/nosql/internal/query/query_functions/query_functions.go b/v23/syncbase/nosql/internal/query/query_functions/query_functions.go
index 285d875..2919ad2 100644
--- a/v23/syncbase/nosql/internal/query/query_functions/query_functions.go
+++ b/v23/syncbase/nosql/internal/query/query_functions/query_functions.go
@@ -161,13 +161,6 @@
 	return &o
 }
 
-func makeStrOpWithAlt(off int64, s string, alt string) *query_parser.Operand {
-	o := makeStrOp(off, s)
-	o.HasAltStr = true
-	o.AltStr = alt
-	return o
-}
-
 func makeComplexOp(off int64, c complex128) *query_parser.Operand {
 	var o query_parser.Operand
 	o.Off = off
diff --git a/v23/syncbase/nosql/internal/query/query_functions/str_funcs.go b/v23/syncbase/nosql/internal/query/query_functions/str_funcs.go
index 77b6eac..38d74aa 100644
--- a/v23/syncbase/nosql/internal/query/query_functions/str_funcs.go
+++ b/v23/syncbase/nosql/internal/query/query_functions/str_funcs.go
@@ -36,5 +36,5 @@
 	}
 	t := args[0].Object.Type()
 	pkg, name := vdl.SplitIdent(t.Name())
-	return makeStrOpWithAlt(off, pkg+"."+name, name), nil
+	return makeStrOp(off, pkg+"."+name), nil
 }
diff --git a/v23/syncbase/nosql/internal/query/query_parser/doc.go b/v23/syncbase/nosql/internal/query/query_parser/doc.go
index 3676075..488ef23 100644
--- a/v23/syncbase/nosql/internal/query/query_parser/doc.go
+++ b/v23/syncbase/nosql/internal/query/query_parser/doc.go
@@ -80,5 +80,5 @@
 //   | <float_literal>
 //
 // Example:
-// select v.foo.bar, v.baz[2] from foobarbaz where Type(v) = "Customer" and (v.foo = 42 and v.bar not like "abc%) or (k >= "100" and  k < "200")
+// select v.Foo.Far, v.Baz[2] from Foobarbaz where Type(v) like "%.Customer" and (v.Foo = 42 and v.Bar not like "abc%) or (k >= "100" and  k < "200")
 package query_parser
diff --git a/v23/syncbase/nosql/internal/query/query_parser/query_parser.go b/v23/syncbase/nosql/internal/query/query_parser/query_parser.go
index 342860a..af213d2 100644
--- a/v23/syncbase/nosql/internal/query/query_parser/query_parser.go
+++ b/v23/syncbase/nosql/internal/query/query_parser/query_parser.go
@@ -121,8 +121,6 @@
 	Time      time.Time
 	Prefix    string // Computed by checker for Like expressions
 	Regex     string // Computed by checker for Like expressions
-	HasAltStr bool   // set true when evaluating type = expressions
-	AltStr    string // set when evaluating type = expressions
 	Uint      uint64
 	CompRegex *regexp.Regexp
 	Expr      *Expression
diff --git a/v23/syncbase/nosql/internal/query/test/query_test.go b/v23/syncbase/nosql/internal/query/test/query_test.go
index 0d4cce7..f2bf178 100644
--- a/v23/syncbase/nosql/internal/query/test/query_test.go
+++ b/v23/syncbase/nosql/internal/query/test/query_test.go
@@ -446,7 +446,7 @@
 	basic := []execSelectTest{
 		{
 			// Select values for all customer records.
-			"select v from Customer where Type(v) = \"Customer\"",
+			"select v from Customer where Type(v) like \"%.Customer\"",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[0].value},
@@ -456,7 +456,7 @@
 		},
 		{
 			// Select values for all customer records.
-			"select v from Customer where Type(v) not like \"%Customer\"",
+			"select v from Customer where Type(v) not like \"%.Customer\"",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[1].value},
@@ -484,7 +484,7 @@
 		},
 		{
 			// All customers have a v.Credit with type CreditReport.
-			"select v from Customer where Type(v.Credit) = \"CreditReport\"",
+			"select v from Customer where Type(v.Credit) like \"%.CreditReport\"",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[0].value},
@@ -494,7 +494,7 @@
 		},
 		{
 			// Only customer "001" has an equifax report.
-			"select v from Customer where Type(v.Credit.Report.EquifaxReport) = \"EquifaxCreditReport\"",
+			"select v from Customer where Type(v.Credit.Report.EquifaxReport) like \"%.EquifaxCreditReport\"",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[0].value},
@@ -536,7 +536,7 @@
 		},
 		{
 			// Print the types of every cusomer's v.Credit.Report.EquifaxReport
-			"select Type(v.Credit.Report.EquifaxReport) from Customer where Type(v) = \"Customer\"",
+			"select Type(v.Credit.Report.EquifaxReport) from Customer where Type(v) like \"%.Customer\"",
 			[]string{"Type"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf("v.io/syncbase/v23/syncbase/nosql/internal/query/test.EquifaxCreditReport")},
@@ -636,7 +636,7 @@
 		},
 		{
 			// Select keys & values for all customer records.
-			"select k, v from Customer where \"Customer\" = Type(v)",
+			"select k, v from Customer where \"v.io/syncbase/v23/syncbase/nosql/internal/query/test.Customer\" = Type(v)",
 			[]string{"k", "v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(custTable.rows[0].key), custTable.rows[0].value},
@@ -646,7 +646,7 @@
 		},
 		{
 			// Select keys & names for all customer records.
-			"select k, v.Name from Customer where Type(v) = \"Customer\"",
+			"select k, v.Name from Customer where Type(v) like \"%.Customer\"",
 			[]string{"k", "v.Name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(custTable.rows[0].key), vdl.ValueOf("John Smith")},
@@ -675,7 +675,7 @@
 		},
 		{
 			// Select keys & values fo all invoice records.
-			"select k, v from Customer where Type(v) = \"Invoice\"",
+			"select k, v from Customer where Type(v) like \"%.Invoice\"",
 			[]string{"k", "v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(custTable.rows[1].key), custTable.rows[1].value},
@@ -689,7 +689,7 @@
 		},
 		{
 			// Select key, cust id, invoice number and amount for $88 invoices.
-			"select k, v.CustId as ID, v.InvoiceNum as InvoiceNumber, v.Amount as Amt from Customer where Type(v) = \"Invoice\" and v.Amount = 88",
+			"select k, v.CustId as ID, v.InvoiceNum as InvoiceNumber, v.Amount as Amt from Customer where Type(v) like \"%.Invoice\" and v.Amount = 88",
 			[]string{"k", "ID", "InvoiceNumber", "Amt"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(custTable.rows[3].key), vdl.ValueOf(int64(1)), vdl.ValueOf(int64(1005)), vdl.ValueOf(int64(88))},
@@ -817,7 +817,7 @@
 		},
 		{
 			// Select id, name for customers whose last name is Masterson.
-			"select v.Id as ID, v.Name as Name from Customer where Type(v) = \"Customer\" and v.Name like \"%Masterson\"",
+			"select v.Id as ID, v.Name as Name from Customer where Type(v) like \"%.Customer\" and v.Name like \"%Masterson\"",
 			[]string{"ID", "Name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(int64(2)), vdl.ValueOf("Bat Masterson")},
@@ -825,7 +825,7 @@
 		},
 		{
 			// Select records where v.Address.City is "Collins" or type is Invoice.
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\"",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\"",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[1].value},
@@ -944,7 +944,7 @@
 		},
 		{
 			// Select customer name for customer Id (i.e., key) "001".
-			"select v.Name as Name from Customer where Type(v) = \"Customer\" and k = \"001\"",
+			"select v.Name as Name from Customer where Type(v) like \"%.Customer\" and k = \"001\"",
 			[]string{"Name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf("John Smith")},
@@ -993,7 +993,7 @@
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Limit 3
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" limit 3",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" limit 3",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[1].value},
@@ -1004,7 +1004,7 @@
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Offset 5
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" offset 5",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" offset 5",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[6].value},
@@ -1021,21 +1021,21 @@
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Offset 8
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" offset 8",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" offset 8",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
 		{
 			// Select records where v.Address.City = "Collins" or type is Invoice.
 			// Offset 23
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" offset 23",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" offset 23",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
 		{
 			// Select records where v.Address.City = "Collins" is 84 or type is Invoice.
 			// Limit 3 Offset 2
-			"select v from Customer where v.Address.City = \"Collins\" or Type(v) = \"Invoice\" limit 3 offset 2",
+			"select v from Customer where v.Address.City = \"Collins\" or Type(v) like \"%.Invoice\" limit 3 offset 2",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[3].value},
@@ -1046,7 +1046,7 @@
 		{
 			// Select records where v.Address.City = "Collins" or (type is Invoice and v.InvoiceNum is not nil).
 			// Limit 3 Offset 2
-			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) = \"Invoice\" and v.InvoiceNum is not nil) limit 3 offset 2",
+			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) like \"%.Invoice\" and v.InvoiceNum is not nil) limit 3 offset 2",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[3].value},
@@ -1057,14 +1057,14 @@
 		{
 			// Select records where v.Address.City = "Collins" or (type is Invoice and v.InvoiceNum is nil).
 			// Limit 3 Offset 2
-			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) = \"Invoice\" and v.InvoiceNum is nil) limit 3 offset 2",
+			"select v from Customer where v.Address.City = \"Collins\" or (Type(v) like \"%.Invoice\" and v.InvoiceNum is nil) limit 3 offset 2",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
 		// Test functions.
 		{
 			// Select invoice records where date is 2015-03-17
-			"select v from Customer where Type(v) = \"Invoice\" and YMD(v.InvoiceDate, \"America/Los_Angeles\") = Date(\"2015-03-17 PDT\")",
+			"select v from Customer where Type(v) like \"%.Invoice\" and YMD(v.InvoiceDate, \"America/Los_Angeles\") = Date(\"2015-03-17 PDT\")",
 			[]string{"v"},
 			[][]*vdl.Value{
 				[]*vdl.Value{custTable.rows[5].value},
@@ -1160,7 +1160,7 @@
 		// Test string functions in where clause.
 		{
 			// Select invoices shipped to Any street -- using LowerCase.
-			"select k from Customer where Type(v) = \"Invoice\" and LowerCase(v.ShipTo.Street) like \"%any%\"",
+			"select k from Customer where Type(v) like \"%.Invoice\" and LowerCase(v.ShipTo.Street) like \"%any%\"",
 			[]string{"k"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(custTable.rows[5].key)},
@@ -1171,7 +1171,7 @@
 		},
 		{
 			// Select invoices shipped to Any street -- using UpperCase.
-			"select k from Customer where Type(v) = \"Invoice\" and UpperCase(v.ShipTo.Street) like \"%ANY%\"",
+			"select k from Customer where Type(v) like \"%.Invoice\" and UpperCase(v.ShipTo.Street) like \"%ANY%\"",
 			[]string{"k"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(custTable.rows[5].key)},
@@ -1217,7 +1217,7 @@
 		},
 		// LowerCase function
 		{
-			"select LowerCase(v.Name) as name from Customer where Type(v) = \"Customer\"",
+			"select LowerCase(v.Name) as name from Customer where Type(v) like \"%.Customer\"",
 			[]string{"name"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf("john smith")},
@@ -1227,7 +1227,7 @@
 		},
 		// UpperCase function
 		{
-			"select UpperCase(v.Name) as NAME from Customer where Type(v) = \"Customer\"",
+			"select UpperCase(v.Name) as NAME from Customer where Type(v) like \"%.Customer\"",
 			[]string{"NAME"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf("JOHN SMITH")},
@@ -1237,7 +1237,7 @@
 		},
 		// YMDHMS function
 		{
-			"select k, YMDHMS(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMDHMS(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMDHMS",
@@ -1248,7 +1248,7 @@
 		},
 		// YMDHM function
 		{
-			"select k, YMDHM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMDHM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMDHM",
@@ -1259,7 +1259,7 @@
 		},
 		// YMDH function
 		{
-			"select k, YMDH(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMDH(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMDH",
@@ -1270,7 +1270,7 @@
 		},
 		// YMD function
 		{
-			"select k, YMD(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YMD(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YMD",
@@ -1281,7 +1281,7 @@
 		},
 		// YM function
 		{
-			"select k, YM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"002003\"",
+			"select k, YM(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"002003\"",
 			[]string{
 				"k",
 				"YM",
@@ -1292,7 +1292,7 @@
 		},
 		// Y function
 		{
-			"select k, Y(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) = \"Invoice\" and k = \"001001\"",
+			"select k, Y(v.InvoiceDate, \"America/Los_Angeles\") from Customer where Type(v) like \"%.Invoice\" and k = \"001001\"",
 			[]string{
 				"k",
 				"Y",
@@ -1303,7 +1303,7 @@
 		},
 		// Nested functions
 		{
-			"select Y(YM(YMD(YMDH(YMDHM(YMDHMS(v.InvoiceDate, \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\")  from Customer where Type(v) = \"Invoice\" and k = \"001001\"",
+			"select Y(YM(YMD(YMDH(YMDHM(YMDHMS(v.InvoiceDate, \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\"), \"America/Los_Angeles\")  from Customer where Type(v) like \"%.Invoice\" and k = \"001001\"",
 			[]string{"Y"},
 			[][]*vdl.Value{
 				[]*vdl.Value{vdl.ValueOf(t2015)},
@@ -1311,7 +1311,7 @@
 		},
 		// Bad arg to function.  Expression is false.
 		{
-			"select v from Customer where Type(v) = \"Invoice\" and YMD(v.InvoiceDate, v.Foo) = v.InvoiceDate",
+			"select v from Customer where Type(v) like \"%.Invoice\" and YMD(v.InvoiceDate, v.Foo) = v.InvoiceDate",
 			[]string{"v"},
 			[][]*vdl.Value{},
 		},
@@ -2011,7 +2011,7 @@
 		},
 		{
 			// All selected rows will have key prefix of "abc".
-			"select k, v from Customer where Type(v) = \"Foo.Bar\" and k like \"abc%\"",
+			"select k, v from Customer where Type(v) like \"%.Foo.Bar\" and k like \"abc%\"",
 			&query_db.KeyRanges{
 				query_db.KeyRange{"abc", plusOne("abc")},
 			},
@@ -2019,7 +2019,7 @@
 		},
 		{
 			// Need all keys
-			"select k, v from Customer where Type(v) = \"Foo.Bar\" or k like \"abc%\"",
+			"select k, v from Customer where Type(v) like \"%.Foo.Bar\" or k like \"abc%\"",
 			&query_db.KeyRanges{
 				query_db.KeyRange{"", ""},
 			},
@@ -2035,7 +2035,7 @@
 		},
 		{
 			// All selected rows will have key prefix of "foo".
-			"select k, v from Customer where Type(v) = \"Foo.Bar\" and k like \"foo_bar\"",
+			"select k, v from Customer where Type(v) like \"%.Foo.Bar\" and k like \"foo_bar\"",
 			&query_db.KeyRanges{
 				query_db.KeyRange{"foo", plusOne("foo")},
 			},
@@ -2205,7 +2205,7 @@
 		},
 		{
 			// Need value (i.e., its type) to determine if row should be selected.
-			"select k, v from Customer where k = \"xyz\" or Type(v) = \"foo.Bar\"",
+			"select k, v from Customer where k = \"xyz\" or Type(v) like \"%.foo.Bar\"",
 			"wxyz",
 			query.FETCH_VALUE,
 		},
@@ -2249,7 +2249,7 @@
 			custTable.rows[0].key, custTable.rows[0].value, true,
 		},
 		{
-			"select k, v from Customer where Type(v) = \"Customer\"",
+			"select k, v from Customer where Type(v) like \"%.Customer\"",
 			numTable.rows[0].key, custTable.rows[0].value, true,
 		},
 		{
@@ -2484,7 +2484,7 @@
 func TestProjection(t *testing.T) {
 	basic := []projectionTest{
 		{
-			"select k, v from Customer where Type(v) = \"Customer\"",
+			"select k, v from Customer where Type(v) like \"%.Customer\"",
 			"123456", custTable.rows[0].value,
 			[]*vdl.Value{
 				vdl.ValueOf("123456"),
@@ -2492,7 +2492,7 @@
 			},
 		},
 		{
-			"select k, v, v.Name, v.Id, v.Active, v.Credit.Agency, v.Credit.Report.EquifaxReport.Rating, v.Address.Street, v.Address.City, v.Address.State, v.Address.Zip from Customer where Type(v) = \"Customer\"",
+			"select k, v, v.Name, v.Id, v.Active, v.Credit.Agency, v.Credit.Report.EquifaxReport.Rating, v.Address.Street, v.Address.City, v.Address.State, v.Address.Zip from Customer where Type(v) like \"%.Customer\"",
 			custTable.rows[0].key, custTable.rows[0].value,
 			[]*vdl.Value{
 				vdl.ValueOf(custTable.rows[0].key),
@@ -2538,7 +2538,7 @@
 func TestExecSelectSingleRow(t *testing.T) {
 	basic := []execSelectSingleRowTest{
 		{
-			"select k, v from Customer where Type(v) = \"Customer\"",
+			"select k, v from Customer where Type(v) like \"%.Customer\"",
 			"123456", custTable.rows[0].value,
 			[]*vdl.Value{
 				vdl.ValueOf("123456"),
@@ -2546,7 +2546,7 @@
 			},
 		},
 		{
-			"select k, v from Customer where Type(v) = \"Customer\" and k like \"123%\"",
+			"select k, v from Customer where Type(v) like \"%.Customer\" and k like \"123%\"",
 			"123456", custTable.rows[0].value,
 			[]*vdl.Value{
 				vdl.ValueOf("123456"),
@@ -2554,12 +2554,12 @@
 			},
 		},
 		{
-			"select k, v from Customer where Type(v) = \"Invoice\" and k like \"123%\"",
+			"select k, v from Customer where Type(v) like \"%.Invoice\" and k like \"123%\"",
 			"123456", custTable.rows[0].value,
 			[]*vdl.Value{},
 		},
 		{
-			"select k, v from Customer where Type(v) = \"Customer\" and k like \"456%\"",
+			"select k, v from Customer where Type(v) like \"%.Customer\" and k like \"456%\"",
 			"123456", custTable.rows[0].value,
 			[]*vdl.Value{},
 		},
@@ -2576,7 +2576,7 @@
 			[]*vdl.Value{},
 		},
 		{
-			"select k, v, v.Name, v.Id, v.Active, v.Credit.Report.EquifaxReport.Rating, v.Credit.Report.ExperianReport.Rating, v.Credit.Report.TransUnionReport.Rating, v.Address.Street, v.Address.City, v.Address.State, v.Address.Zip from Customer where Type(v) = \"Customer\"",
+			"select k, v, v.Name, v.Id, v.Active, v.Credit.Report.EquifaxReport.Rating, v.Credit.Report.ExperianReport.Rating, v.Credit.Report.TransUnionReport.Rating, v.Address.Street, v.Address.City, v.Address.State, v.Address.Zip from Customer where Type(v) like \"%.Customer\"",
 			custTable.rows[0].key, custTable.rows[0].value,
 			[]*vdl.Value{
 				vdl.ValueOf(custTable.rows[0].key),