Skip to content

Commit 2f34968

Browse files
committed
Merge pull request vert-x#11 from campudus/fix_fields_order
result values have the same order as result columNames
2 parents 345c95f + 1f339a5 commit 2f34968

File tree

4 files changed

+36
-10
lines changed

4 files changed

+36
-10
lines changed

src/main/scala/io/vertx/asyncsql/database/ConnectionHandler.scala

+9-5
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,20 @@ trait ConnectionHandler extends ScalaBusMod with VertxScalaHelpers {
122122
val fields = (new JsonArray() /: resultSet.columnNames) { (arr, name) =>
123123
arr.addString(name)
124124
}
125-
val rows = (new JsonArray() /: resultSet) { (arr, rowData) =>
126-
arr.add(rowDataToJsonArray(rowData))
127-
}
125+
126+
val rows = Json.arr((for {
127+
rowData <- resultSet
128+
} yield Json.arr((for {
129+
columnName <- resultSet.columnNames
130+
} yield {
131+
rowData(columnName)
132+
}): _*)): _*)
133+
128134
result.putArray("fields", fields)
129135
result.putArray("results", rows)
130136
case None =>
131137
}
132138

133139
Ok(result)
134140
}
135-
136-
private def rowDataToJsonArray(rowData: RowData): JsonArray = Json.arr(rowData.toList: _*)
137141
}

src/test/scala/io/vertx/asyncsql/test/BaseSqlTests.scala

+20-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import scala.collection.JavaConversions.iterableAsScalaIterable
44
import scala.concurrent.Future
55

66
import org.vertx.scala.core.json.{ Json, JsonArray }
7-
import org.vertx.testtools.VertxAssert.{ assertEquals, assertTrue }
7+
import org.vertx.testtools.VertxAssert._
88

99
trait BaseSqlTests { this: SqlTestVerticle =>
1010

@@ -39,7 +39,7 @@ trait BaseSqlTests { this: SqlTestVerticle =>
3939
}
4040

4141
def multipleFields(): Unit = asyncTest {
42-
expectOk(raw("SELECT 1, 0")) map { reply =>
42+
expectOk(raw("SELECT 1 a, 0 b")) map { reply =>
4343
val res = reply.getArray("results")
4444
assertEquals(1, res.size())
4545
val firstElem = res.get[JsonArray](0)
@@ -48,6 +48,24 @@ trait BaseSqlTests { this: SqlTestVerticle =>
4848
}
4949
}
5050

51+
def multipleFieldsOrder(): Unit = typeTestInsert {
52+
import scala.collection.JavaConverters._
53+
expectOk(raw("SELECT is_male, age, email, money, name FROM some_test WHERE is_male = true")) map { reply =>
54+
val receivedFields = reply.getArray("fields")
55+
val results = reply.getArray("results").get[JsonArray](0)
56+
57+
assertEquals(1, reply.getNumber("rows"))
58+
59+
val columnNamesList = receivedFields.asScala.toList
60+
61+
assertEquals("Mr. Test", results.get(columnNamesList.indexOf("name")))
62+
assertEquals("test@example.com", results.get(columnNamesList.indexOf("email")))
63+
assertEquals(15, results.get(columnNamesList.indexOf("age")))
64+
assertEquals(true, results.get(columnNamesList.indexOf("is_male")))
65+
assertEquals(167.31, results.get(columnNamesList.indexOf("money")), 0.1)
66+
}
67+
}
68+
5169
def createAndDropTable(): Unit = asyncTest {
5270
createTable("some_test") flatMap (_ => dropTable("some_test")) map { reply =>
5371
assertEquals(0, reply.getNumber("rows"))

src/test/scala/io/vertx/asyncsql/test/mysql/MySqlTest.scala

+5-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ CREATE TABLE """ + tableName + """ (
3131
@Test
3232
override def multipleFields(): Unit = super.multipleFields()
3333
@Test
34+
override def multipleFieldsOrder(): Unit = super.multipleFieldsOrder()
35+
@Test
3436
override def createAndDropTable(): Unit = super.createAndDropTable()
3537
@Test
3638
override def insertCorrect(): Unit = super.insertCorrect()
@@ -49,8 +51,8 @@ CREATE TABLE """ + tableName + """ (
4951
@Test
5052
override def preparedSelect(): Unit = super.preparedSelect()
5153

52-
// @Ignore("not working currently")
53-
// @Test
54-
// override def transaction(): Unit = super.transaction()
54+
// @Ignore("not working currently")
55+
// @Test
56+
// override def transaction(): Unit = super.transaction()
5557

5658
}

src/test/scala/io/vertx/asyncsql/test/postgresql/PostgreSqlTest.scala

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class PostgreSqlTest extends SqlTestVerticle with BaseSqlTests {
1717
@Test
1818
override def multipleFields(): Unit = super.multipleFields()
1919
@Test
20+
override def multipleFieldsOrder(): Unit = super.multipleFieldsOrder()
21+
@Test
2022
override def createAndDropTable(): Unit = super.createAndDropTable()
2123
@Test
2224
override def insertCorrect(): Unit = super.insertCorrect()

0 commit comments

Comments
 (0)