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',
 		'',
