add tests for currently alter table and read table
diff --git a/data/data.go b/data/data.go
index 8eded28..2b6420d 100644
--- a/data/data.go
+++ b/data/data.go
@@ -64,7 +64,7 @@
 }
 
 func (d *ApidDb) SetMaxIdleConns(n int) {
-	 d.db.SetMaxIdleConns(n)
+	d.db.SetMaxIdleConns(n)
 }
 
 func (d *ApidDb) SetMaxOpenConns(n int) {
diff --git a/data/data_test.go b/data/data_test.go
index f17511b..91d3257 100644
--- a/data/data_test.go
+++ b/data/data_test.go
@@ -119,10 +119,10 @@
 		finished := make(chan bool, count)
 
 		for i := 0; i < count; i++ {
-			go func() {
-				write(db, i)
+			go func(j int) {
+				write(db, j)
 				finished <- true
-			}()
+			}(i)
 		}
 
 		for i := 0; i < count; i++ {
@@ -131,6 +131,92 @@
 			Expect(db.Stats().OpenConnections).To(Equal(1))
 		}
 	}, 10)
+
+	It("should handle concurrent read & write", func() {
+		db, err := apid.Data().DBForID("test_read_write")
+		db.SetMaxOpenConns(10)
+		db.SetMaxIdleConns(10)
+		Expect(err).NotTo(HaveOccurred())
+		setup(db)
+		finished := make(chan bool, 2*count)
+
+		for i := 0; i < count; i++ {
+			go func(j int) {
+				write(db, j)
+				finished <- true
+			}(i)
+			go func() {
+				read(db)
+				finished <- true
+			}()
+		}
+
+		for i := 0; i < 2*count; i++ {
+			<-finished
+		}
+	}, 10)
+
+	It("should handle concurrent alter table by seralizing them", func() {
+		db, err := apid.Data().DBForID("test_alter")
+		db.SetMaxOpenConns(10)
+		db.SetMaxIdleConns(10)
+		Expect(err).NotTo(HaveOccurred())
+		setup(db)
+		alterCount := 50
+		finished := make(chan bool, alterCount)
+
+		for i := 0; i < alterCount; i++ {
+			go func(j int) {
+				alter(db, j)
+				finished <- true
+			}(i)
+		}
+
+		for i := 0; i < alterCount; i++ {
+			<-finished
+			Expect(db.Stats().OpenConnections).To(Equal(1))
+		}
+	}, 10)
+
+	It("should handle seralized read & alter table", func() {
+		db, err := apid.Data().DBForID("test_read_alter")
+		db.SetMaxOpenConns(10)
+		db.SetMaxIdleConns(10)
+		Expect(err).NotTo(HaveOccurred())
+		setup(db)
+		alterCount := 50
+		for i := 0; i < alterCount; i++ {
+			alter(db, i)
+			read(db)
+		}
+	}, 10)
+
+	It("should handle concurrent read & alter table", func() {
+		db, err := apid.Data().DBForID("test_conn_read_alter")
+		db.SetMaxOpenConns(10)
+		db.SetMaxIdleConns(10)
+		Expect(err).NotTo(HaveOccurred())
+		setup(db)
+		alterCount := 50
+		finished := make(chan bool, count+alterCount)
+		for i := 0; i < alterCount; i++ {
+			go func(j int) {
+				alter(db, j)
+				finished <- true
+			}(i)
+		}
+
+		for i := 0; i < count; i++ {
+			go func() {
+				read(db)
+				finished <- true
+			}()
+		}
+
+		for i := 0; i < count+alterCount; i++ {
+			<-finished
+		}
+	}, 10)
 })
 
 func setup(db apid.DB) {
@@ -174,3 +260,18 @@
 	//Expect(err).Should(Succeed())
 	fmt.Print("+")
 }
+
+func alter(db apid.DB, i int) {
+	defer GinkgoRecover()
+	// DB INSERT as a txn
+	tx, err := db.Begin()
+	Expect(err).Should(Succeed())
+	defer tx.Rollback()
+	prep, err := tx.Prepare("ALTER TABLE test_1 ADD COLUMN colname_" + strconv.Itoa(i) + " text DEFAULT ''")
+	Expect(err).Should(Succeed())
+	_, err = prep.Exec()
+	Expect(err).Should(Succeed())
+	Expect(prep.Close()).Should(Succeed())
+	Expect(tx.Commit()).Should(Succeed())
+	fmt.Print("+")
+}