diff --git a/src/main/scala/io/vertx/asyncsql/database/ConnectionHandler.scala b/src/main/scala/io/vertx/asyncsql/database/ConnectionHandler.scala index 74a6beb..85690da 100644 --- a/src/main/scala/io/vertx/asyncsql/database/ConnectionHandler.scala +++ b/src/main/scala/io/vertx/asyncsql/database/ConnectionHandler.scala @@ -122,9 +122,15 @@ trait ConnectionHandler extends ScalaBusMod with VertxScalaHelpers { val fields = (new JsonArray() /: resultSet.columnNames) { (arr, name) => arr.addString(name) } - val rows = (new JsonArray() /: resultSet) { (arr, rowData) => - arr.add(rowDataToJsonArray(rowData)) - } + + val rows = Json.arr((for { + rowData <- resultSet + } yield Json.arr((for { + columnName <- resultSet.columnNames + } yield { + rowData(columnName) + }): _*)): _*) + result.putArray("fields", fields) result.putArray("results", rows) case None => @@ -132,6 +138,4 @@ trait ConnectionHandler extends ScalaBusMod with VertxScalaHelpers { Ok(result) } - - private def rowDataToJsonArray(rowData: RowData): JsonArray = Json.arr(rowData.toList: _*) } \ No newline at end of file diff --git a/src/test/scala/io/vertx/asyncsql/test/BaseSqlTests.scala b/src/test/scala/io/vertx/asyncsql/test/BaseSqlTests.scala index 7beec1f..e2825d0 100644 --- a/src/test/scala/io/vertx/asyncsql/test/BaseSqlTests.scala +++ b/src/test/scala/io/vertx/asyncsql/test/BaseSqlTests.scala @@ -4,7 +4,7 @@ import scala.collection.JavaConversions.iterableAsScalaIterable import scala.concurrent.Future import org.vertx.scala.core.json.{ Json, JsonArray } -import org.vertx.testtools.VertxAssert.{ assertEquals, assertTrue } +import org.vertx.testtools.VertxAssert._ trait BaseSqlTests { this: SqlTestVerticle => @@ -39,7 +39,7 @@ trait BaseSqlTests { this: SqlTestVerticle => } def multipleFields(): Unit = asyncTest { - expectOk(raw("SELECT 1, 0")) map { reply => + expectOk(raw("SELECT 1 a, 0 b")) map { reply => val res = reply.getArray("results") assertEquals(1, res.size()) val firstElem = res.get[JsonArray](0) @@ -48,6 +48,24 @@ trait BaseSqlTests { this: SqlTestVerticle => } } + def multipleFieldsOrder(): Unit = typeTestInsert { + import scala.collection.JavaConverters._ + expectOk(raw("SELECT is_male, age, email, money, name FROM some_test WHERE is_male = true")) map { reply => + val receivedFields = reply.getArray("fields") + val results = reply.getArray("results").get[JsonArray](0) + + assertEquals(1, reply.getNumber("rows")) + + val columnNamesList = receivedFields.asScala.toList + + assertEquals("Mr. Test", results.get(columnNamesList.indexOf("name"))) + assertEquals("test@example.com", results.get(columnNamesList.indexOf("email"))) + assertEquals(15, results.get(columnNamesList.indexOf("age"))) + assertEquals(true, results.get(columnNamesList.indexOf("is_male"))) + assertEquals(167.31, results.get(columnNamesList.indexOf("money")), 0.1) + } + } + def createAndDropTable(): Unit = asyncTest { createTable("some_test") flatMap (_ => dropTable("some_test")) map { reply => assertEquals(0, reply.getNumber("rows")) diff --git a/src/test/scala/io/vertx/asyncsql/test/mysql/MySqlTest.scala b/src/test/scala/io/vertx/asyncsql/test/mysql/MySqlTest.scala index 15c1ffb..810b357 100644 --- a/src/test/scala/io/vertx/asyncsql/test/mysql/MySqlTest.scala +++ b/src/test/scala/io/vertx/asyncsql/test/mysql/MySqlTest.scala @@ -31,6 +31,8 @@ CREATE TABLE """ + tableName + """ ( @Test override def multipleFields(): Unit = super.multipleFields() @Test + override def multipleFieldsOrder(): Unit = super.multipleFieldsOrder() + @Test override def createAndDropTable(): Unit = super.createAndDropTable() @Test override def insertCorrect(): Unit = super.insertCorrect() @@ -49,8 +51,8 @@ CREATE TABLE """ + tableName + """ ( @Test override def preparedSelect(): Unit = super.preparedSelect() -// @Ignore("not working currently") -// @Test -// override def transaction(): Unit = super.transaction() + // @Ignore("not working currently") + // @Test + // override def transaction(): Unit = super.transaction() } \ No newline at end of file diff --git a/src/test/scala/io/vertx/asyncsql/test/postgresql/PostgreSqlTest.scala b/src/test/scala/io/vertx/asyncsql/test/postgresql/PostgreSqlTest.scala index 64897f1..57aa6eb 100644 --- a/src/test/scala/io/vertx/asyncsql/test/postgresql/PostgreSqlTest.scala +++ b/src/test/scala/io/vertx/asyncsql/test/postgresql/PostgreSqlTest.scala @@ -17,6 +17,8 @@ class PostgreSqlTest extends SqlTestVerticle with BaseSqlTests { @Test override def multipleFields(): Unit = super.multipleFields() @Test + override def multipleFieldsOrder(): Unit = super.multipleFieldsOrder() + @Test override def createAndDropTable(): Unit = super.createAndDropTable() @Test override def insertCorrect(): Unit = super.insertCorrect()