Merge pull request #5 from 30x/XAPID-1061
add support for null string cols in DB
diff --git a/data.go b/data.go
index 0a3ea83..9c801ca 100644
--- a/data.go
+++ b/data.go
@@ -18,6 +18,7 @@
"sync"
"github.com/30x/apid-core"
+ "reflect"
)
var (
@@ -105,7 +106,7 @@
WHERE a.resource_blob_id NOT IN
(SELECT b.id FROM apid_blob_available as b)
)
- WHERE id != ''
+ WHERE id IS NOT NULL AND id != ''
;
`)
if err != nil {
@@ -148,14 +149,14 @@
FROM metadata_runtime_entity_metadata as a
INNER JOIN apid_blob_available as b
ON a.resource_blob_id = b.id
- WHERE a.resource_blob_id != ""
+ WHERE a.resource_blob_id IS NOT NULL AND a.resource_blob_id != ""
INTERSECT
SELECT
a.id
FROM metadata_runtime_entity_metadata as a
INNER JOIN apid_blob_available as b
ON a.bean_blob_id = b.id
- WHERE a.resource_blob_id != ""
+ WHERE a.resource_blob_id IS NOT NULL AND a.resource_blob_id != ""
UNION
SELECT
@@ -163,7 +164,7 @@
FROM metadata_runtime_entity_metadata as a
INNER JOIN apid_blob_available as b
ON a.bean_blob_id = b.id
- WHERE a.resource_blob_id = ""
+ WHERE a.resource_blob_id IS NULL OR a.resource_blob_id = ""
)
;
`)
@@ -230,28 +231,34 @@
return
}
-func dataDeploymentsFromRow(rows *sql.Rows) (deployments []DataDeployment, err error) {
+func dataDeploymentsFromRow(rows *sql.Rows) ([]DataDeployment, error) {
+ tmp, err := structFromRows(reflect.TypeOf((*DataDeployment)(nil)).Elem(), rows)
+ if err != nil {
+ return nil, err
+ }
+ return tmp.([]DataDeployment), nil
+}
+
+func structFromRows(t reflect.Type, rows *sql.Rows) (interface{}, error) {
+ num := t.NumField()
+ cols := make([]interface{}, num)
+ slice := reflect.New(reflect.SliceOf(t)).Elem()
+ for i := range cols {
+ cols[i] = new(sql.NullString)
+ }
for rows.Next() {
- dep := DataDeployment{}
- err = rows.Scan(
- &dep.ID,
- &dep.OrgID,
- &dep.EnvID,
- &dep.BlobID,
- &dep.BlobResourceID,
- &dep.Type,
- &dep.Name,
- &dep.Revision,
- &dep.Path,
- &dep.Created,
- &dep.CreatedBy,
- &dep.Updated,
- &dep.UpdatedBy,
- )
+ v := reflect.New(t).Elem()
+ err := rows.Scan(cols...)
if err != nil {
return nil, err
}
- deployments = append(deployments, dep)
+ for i := range cols {
+ p := cols[i].(*sql.NullString)
+ if p.Valid {
+ v.Field(i).SetString(p.String)
+ }
+ }
+ slice = reflect.Append(slice, v)
}
- return
+ return slice.Interface(), nil
}
diff --git a/data_test.go b/data_test.go
index 6be7da7..b3abc2f 100644
--- a/data_test.go
+++ b/data_test.go
@@ -189,7 +189,7 @@
'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
'',
'gcs:SHA-512:39ca7ae89bb9468af34df8bc873748b4035210c91bcc01359c092c1d51364b5f3df06bc69a40621acfaa46791af9ea41bc0f3429a84738ba1a7c8d394859601a',
- '',
+ NULL,
'ORGANIZATION',
'Org1',
'',