syncbase: Enable watching a set of glob patterns.

Watch API was changed to accept one or more CollectionRowPattern
structures, with separate SQL LIKE-style glob patterns for collection
blessing, name, and row key. Helper function allows easily watching
a single prefix (as in old functionality).
Watch method no longer returns an error; the error can be checked on the
returned stream instead, same as in Scan.
Refactored LIKE pattern parsing out of internal query packages into a
separate package.
Collection and row filtering refactored into separate package, can be
used for Scan and other RPCs in the future. Implementation is currently
inefficient, scanning over all collections and over all rows in matched
collections.

MultiPart: 4/4
Change-Id: Ifeb995ef9d2aac5f2853343b7af0a3a4d7dab404
diff --git a/go/src/v.io/x/sensorlog/internal/client/list.go b/go/src/v.io/x/sensorlog/internal/client/list.go
index cab7e19..2cc66a3 100644
--- a/go/src/v.io/x/sensorlog/internal/client/list.go
+++ b/go/src/v.io/x/sensorlog/internal/client/list.go
@@ -13,6 +13,7 @@
 	"v.io/v23/context"
 	wire "v.io/v23/services/syncbase"
 	"v.io/v23/syncbase"
+	"v.io/v23/syncbase/util"
 	"v.io/v23/verror"
 	"v.io/x/sensorlog/internal/sbmodel"
 	"v.io/x/sensorlog/internal/sbmodel/keyutil"
@@ -65,10 +66,9 @@
 
 	// Watch for DataPoints, existing followed by new.
 	// TODO(ivanpi): Check if stream exists.
-	ws, err := db.Watch(ctx, dataCollectionId, dataPrefix, nil)
-	if err != nil {
-		return err
-	}
+	ws := db.Watch(ctx, nil, []wire.CollectionRowPattern{
+		util.RowPrefixPattern(dataCollectionId, dataPrefix),
+	})
 	defer ws.Cancel()
 
 	trans := make([]*dataPoint, 0, 16)
diff --git a/go/src/v.io/x/sensorlog/internal/measure/watcher.go b/go/src/v.io/x/sensorlog/internal/measure/watcher.go
index 284a41c..f209940 100644
--- a/go/src/v.io/x/sensorlog/internal/measure/watcher.go
+++ b/go/src/v.io/x/sensorlog/internal/measure/watcher.go
@@ -10,7 +10,9 @@
 	"fmt"
 
 	"v.io/v23/context"
+	wire "v.io/v23/services/syncbase"
 	"v.io/v23/syncbase"
+	"v.io/v23/syncbase/util"
 	"v.io/x/sensorlog/internal/sbmodel"
 	"v.io/x/sensorlog/internal/sbmodel/keyutil"
 )
@@ -31,10 +33,9 @@
 	watchPrefix := keyutil.Join(devId, "")
 
 	// Watch for StreamDef changes and register samplers as needed.
-	ws, err := db.Watch(ctx, collectionId, watchPrefix, nil)
-	if err != nil {
-		return err
-	}
+	ws := db.Watch(ctx, nil, []wire.CollectionRowPattern{
+		util.RowPrefixPattern(collectionId, watchPrefix),
+	})
 	defer ws.Cancel()
 
 	for ws.Advance() {