11package sql
22
33import (
4+ "strings"
45 "sync"
56
67 "gopkg.in/src-d/go-errors.v1"
78)
89
9- var ErrExistingView = errors .NewKind ("the view %s.%s already exists in the registry" )
10- var ErrNonExistingView = errors .NewKind ("the view %s.%s does not exist in the registry" )
10+ var (
11+ ErrExistingView = errors .NewKind ("the view %s.%s already exists in the registry" )
12+ ErrNonExistingView = errors .NewKind ("the view %s.%s does not exist in the registry" )
13+ )
1114
1215type View struct {
1316 Name string
@@ -18,6 +21,11 @@ type viewKey struct {
1821 dbName , viewName string
1922}
2023
24+ // Creates a viewKey ensuring both names are lowercase
25+ func newViewKey (databaseName , viewName string ) viewKey {
26+ return viewKey {strings .ToLower (databaseName ), strings .ToLower (viewName )}
27+ }
28+
2129type ViewRegistry struct {
2230 mutex sync.RWMutex
2331 views map [viewKey ]View
@@ -33,7 +41,7 @@ func (registry *ViewRegistry) Register(database string, view View) error {
3341 registry .mutex .Lock ()
3442 defer registry .mutex .Unlock ()
3543
36- key := viewKey { database , view .Name }
44+ key := newViewKey ( database , view .Name )
3745
3846 if _ , ok := registry .views [key ]; ok {
3947 return ErrExistingView .New (database , view .Name )
@@ -43,8 +51,10 @@ func (registry *ViewRegistry) Register(database string, view View) error {
4351 return nil
4452}
4553
54+ // Deletes the view specified by the pair {databaseName, viewName}, returning
55+ // an error if it does not exist
4656func (registry * ViewRegistry ) Delete (databaseName , viewName string ) error {
47- key := viewKey { databaseName , viewName }
57+ key := newViewKey ( databaseName , viewName )
4858
4959 if _ , ok := registry .views [key ]; ! ok {
5060 return ErrNonExistingView .New (databaseName , viewName )
@@ -58,7 +68,7 @@ func (registry *ViewRegistry) View(databaseName, viewName string) (*View, error)
5868 registry .mutex .RLock ()
5969 defer registry .mutex .RUnlock ()
6070
61- key := viewKey { databaseName , viewName }
71+ key := newViewKey ( databaseName , viewName )
6272
6373 if view , ok := registry .views [key ]; ok {
6474 return & view , nil
0 commit comments