pkg/mem/store.go (97 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mem import ( "github.com/hashicorp/go-memdb" ) var DB *memdb.MemDB const ( GatewayTable = "Gateway" RouteTable = "Route" UpstreamTable = "Upstream" PluginTable = "Plugin" ) func init() { if db, err := NewDB(); err != nil { panic(err) } else { DB = db } } func NewDB() (*memdb.MemDB, error) { var schema = &memdb.DBSchema{ Tables: map[string]*memdb.TableSchema{ GatewayTable: gatewaySchema, RouteTable: routeSchema, UpstreamTable: upstreamSchema, PluginTable: pluginSchema, }, } if memDB, err := memdb.NewMemDB(schema); err != nil { return nil, err } else { return memDB, nil } } var gatewaySchema = &memdb.TableSchema{ Name: GatewayTable, Indexes: map[string]*memdb.IndexSchema{ "id": { Name: "id", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "FullName"}, }, "name": { Name: "name", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "Name"}, AllowMissing: true, }, }, } var routeSchema = &memdb.TableSchema{ Name: RouteTable, Indexes: map[string]*memdb.IndexSchema{ "id": { Name: "id", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "FullName"}, }, "name": { Name: "name", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "Name"}, AllowMissing: true, }, }, } var upstreamSchema = &memdb.TableSchema{ Name: UpstreamTable, Indexes: map[string]*memdb.IndexSchema{ "id": { Name: "id", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "FullName"}, }, "name": { Name: "name", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "Name"}, AllowMissing: true, }, }, } var pluginSchema = &memdb.TableSchema{ Name: PluginTable, Indexes: map[string]*memdb.IndexSchema{ "id": { Name: "id", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "FullName"}, }, "name": { Name: "name", Unique: true, Indexer: &memdb.StringFieldIndex{Field: "Name"}, AllowMissing: true, }, }, }