From 176c69e59dfbd4b39d520005b712858dff502e45 Mon Sep 17 00:00:00 2001 From: Sida Chen Date: Wed, 6 Mar 2019 16:31:58 -0500 Subject: [PATCH] pgsql: Move namespace to its module --- database/pgsql/{ => namespace}/namespace.go | 30 +++++++++++++++---- .../pgsql/{ => namespace}/namespace_test.go | 17 ++++++----- 2 files changed, 33 insertions(+), 14 deletions(-) rename database/pgsql/{ => namespace}/namespace.go (73%) rename database/pgsql/{ => namespace}/namespace_test.go (67%) diff --git a/database/pgsql/namespace.go b/database/pgsql/namespace/namespace.go similarity index 73% rename from database/pgsql/namespace.go rename to database/pgsql/namespace/namespace.go index 87d25e33..57ba6ccc 100644 --- a/database/pgsql/namespace.go +++ b/database/pgsql/namespace/namespace.go @@ -12,13 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -package pgsql +package namespace import ( "database/sql" + "fmt" "sort" "github.com/coreos/clair/database" + "github.com/coreos/clair/database/pgsql/util" "github.com/coreos/clair/pkg/commonerr" ) @@ -26,8 +28,24 @@ const ( searchNamespaceID = `SELECT id FROM Namespace WHERE name = $1 AND version_format = $2` ) +func queryPersistNamespace(count int) string { + return util.QueryPersist(count, + "namespace", + "namespace_name_version_format_key", + "name", + "version_format") +} + +func querySearchNamespace(nsCount int) string { + return fmt.Sprintf( + `SELECT id, name, version_format + FROM namespace WHERE (name, version_format) IN (%s)`, + util.QueryString(2, nsCount), + ) +} + // PersistNamespaces soi namespaces into database. -func (tx *pgSession) PersistNamespaces(namespaces []database.Namespace) error { +func PersistNamespaces(tx *sql.Tx, namespaces []database.Namespace) error { if len(namespaces) == 0 { return nil } @@ -49,12 +67,12 @@ func (tx *pgSession) PersistNamespaces(namespaces []database.Namespace) error { _, err := tx.Exec(queryPersistNamespace(len(namespaces)), keys...) if err != nil { - return handleError("queryPersistNamespace", err) + return util.HandleError("queryPersistNamespace", err) } return nil } -func (tx *pgSession) findNamespaceIDs(namespaces []database.Namespace) ([]sql.NullInt64, error) { +func FindNamespaceIDs(tx *sql.Tx, namespaces []database.Namespace) ([]sql.NullInt64, error) { if len(namespaces) == 0 { return nil, nil } @@ -69,7 +87,7 @@ func (tx *pgSession) findNamespaceIDs(namespaces []database.Namespace) ([]sql.Nu rows, err := tx.Query(querySearchNamespace(len(namespaces)), keys...) if err != nil { - return nil, handleError("searchNamespace", err) + return nil, util.HandleError("searchNamespace", err) } defer rows.Close() @@ -81,7 +99,7 @@ func (tx *pgSession) findNamespaceIDs(namespaces []database.Namespace) ([]sql.Nu for rows.Next() { err := rows.Scan(&id, &ns.Name, &ns.VersionFormat) if err != nil { - return nil, handleError("searchNamespace", err) + return nil, util.HandleError("searchNamespace", err) } nsMap[ns] = id } diff --git a/database/pgsql/namespace_test.go b/database/pgsql/namespace/namespace_test.go similarity index 67% rename from database/pgsql/namespace_test.go rename to database/pgsql/namespace/namespace_test.go index 8f2af288..2cc9918e 100644 --- a/database/pgsql/namespace_test.go +++ b/database/pgsql/namespace/namespace_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package pgsql +package namespace import ( "testing" @@ -20,25 +20,26 @@ import ( "github.com/stretchr/testify/assert" "github.com/coreos/clair/database" + "github.com/coreos/clair/database/pgsql/testutil" ) func TestPersistNamespaces(t *testing.T) { - datastore, tx := openSessionForTest(t, "PersistNamespaces", false) - defer closeTest(t, datastore, tx) + tx, cleanup := testutil.CreateTestTx(t, "PersistNamespaces") + defer cleanup() ns1 := database.Namespace{} ns2 := database.Namespace{Name: "t", VersionFormat: "b"} // Empty Case - assert.Nil(t, tx.PersistNamespaces([]database.Namespace{})) + assert.Nil(t, PersistNamespaces(tx, []database.Namespace{})) // Invalid Case - assert.NotNil(t, tx.PersistNamespaces([]database.Namespace{ns1})) + assert.NotNil(t, PersistNamespaces(tx, []database.Namespace{ns1})) // Duplicated Case - assert.Nil(t, tx.PersistNamespaces([]database.Namespace{ns2, ns2})) + assert.Nil(t, PersistNamespaces(tx, []database.Namespace{ns2, ns2})) // Existing Case - assert.Nil(t, tx.PersistNamespaces([]database.Namespace{ns2})) + assert.Nil(t, PersistNamespaces(tx, []database.Namespace{ns2})) - nsList := listNamespaces(t, tx) + nsList := testutil.ListNamespaces(t, tx) assert.Len(t, nsList, 1) assert.Equal(t, ns2, nsList[0]) }