Skip to content

Commit

Permalink
Merge a026d00 into 29e894b
Browse files Browse the repository at this point in the history
  • Loading branch information
scull7 committed Jul 8, 2018
2 parents 29e894b + a026d00 commit 696e763
Show file tree
Hide file tree
Showing 21 changed files with 504 additions and 255 deletions.
2 changes: 0 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,3 @@ before_install:
- sudo apt-get -qq update
- sudo apt-get install -y jq
- mysql -e 'CREATE DATABASE IF NOT EXISTS test;'
before_script:
- yarn install:peers
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ and [Named Placeholders](#named-placeholders).
#### Standard Query Method
```reason
let conn
= MySql2.connect(~host=127.0.0.1, ~port=3306, ~user="root", ());
= MySql2.Connection.connect(~host=127.0.0.1, ~port=3306, ~user="root", ());
MySql2.execute(conn, "SHOW DATABASES", None, res => {
switch res {
| `Error(e) => Js.log2("ERROR: ", e)
| `Select(rows, meta) => Js.log3("SELECT: ", rows, meta)
| `Mutation(count, id) => Js.log3("MUTATION: ", count, id)
| `Select(select) => Js.log2("SELECT: ", select)
| `Mutation(mutation) => Js.log2("MUTATION: ", mutation)
}
MySql2.close(conn);
});
Expand All @@ -72,9 +72,9 @@ MySql2.execute(conn, "SHOW DATABASES", None, res => {
##### Named Placeholders
```reason
let conn
= MySql2.connect(~host=127.0.0.1, ~port=3306, ~user="root", ());
= MySql2.Connect.connect(~host=127.0.0.1, ~port=3306, ~user="root", ());
let named = `Named(
let named = MySql2.Params.named(
Json.Encode.object_([
("x", Json.Encode.int(1)),
("y", Json.Encode.int(2)),
Expand All @@ -84,8 +84,8 @@ let named = `Named(
MySql2.execute(conn, "SELECT :x + :y AS result", Some(named), res => {
switch res {
| `Error(e) => Js.log2("ERROR: ", e)
| `Select(rows, meta) => Js.log3("SELECT: ", rows, meta)
| `Mutation(count, id) => Js.log3("MUTATION: ", count, id)
| `Select(select) => Js.log2("SELECT: ", select)
| `Mutation(mutation) => Js.log2("MUTATION: ", mutation)
}
}
MySql2.close(conn);
Expand All @@ -95,17 +95,17 @@ MySql2.execute(conn, "SELECT :x + :y AS result", Some(named), res => {
##### Unnamed Placeholders
```reason
let conn
= MySql2.connect(~host=127.0.0.1, ~port=3306, ~user="root", ());
= MySql2.Connection.connect(~host=127.0.0.1, ~port=3306, ~user="root", ());
let positional = `Positional(
let positional = MySql2.Params.positional(
Belt_Array.map([|5, 6|], Json.Encode.int) |> Json.Encode.jsonArray
);
MySql2.execute(conn, "SELECT 1 + ? + ? AS result", Some(positional), res => {
switch res {
| `Error(e) => Js.log2("ERROR: ", e)
| `Select(rows, meta) => Js.log3("SELECT: ", rows, meta)
| `Mutation(count, id) => Js.log3("MUTATION: ", count, id)
| `Select(rows, meta) => Js.log2("SELECT: ", rows, meta)
| `Mutation(count, id) => Js.log2("MUTATION: ", count, id)
}
}
MySql2.close(conn);
Expand Down
54 changes: 30 additions & 24 deletions __tests__/Test_mysql2_error.re
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
open Jest;

let connect = () =>
MySql2.connect(~host="127.0.0.1", ~port=3306, ~user="root", ());
MySql2.Connection.connect(~host="127.0.0.1", ~port=3306, ~user="root", ());

describe("MySql2 Error Handling", () => {
let conn = connect();

afterAll(() => MySql2.close(conn));
afterAll(() => MySql2.Connection.close(conn));

let accessDeniedTest = "Should respond with an access denied error";
testAsync(
accessDeniedTest,
finish => {
let c = MySql2.connect(~password="s0m3 g@rb@g3 pw", ());
let c = MySql2.Connection.connect(~password="s0m3 g@rb@g3 pw", ());
let sql = "SELECT 1+1 AS result";
MySql2.execute(c, sql, None, res =>
switch (res) {
| `Select(_, _) => fail("unexpected_select_result") |> finish
| `Mutation(_, _) => fail("unexpected_mutation_result") |> finish
| `Select(_) => fail("unexpected_select_result") |> finish
| `Mutation(_) => fail("unexpected_mutation_result") |> finish
| `Error(e) =>
Expect.expect(() =>
raise(e)
Expand All @@ -36,8 +36,8 @@ describe("MySql2 Error Handling", () => {
let sql = "SELECT invalid, AS result";
MySql2.execute(conn, sql, None, res =>
switch (res) {
| `Select(_, _) => fail("unexpected_select_result") |> finish
| `Mutation(_, _) => fail("unexpected_mutation_result") |> finish
| `Select(_) => fail("unexpected_select_result") |> finish
| `Mutation(_) => fail("unexpected_mutation_result") |> finish
| `Error(e) =>
Expect.expect(() =>
raise(e)
Expand All @@ -51,41 +51,47 @@ describe("MySql2 Error Handling", () => {

test("Should parse out an empty error with defaults", () => {
/* Use raw JS here toe retrieve a garbage object */
let e = [%raw {| (function () { return { message: "IDKWTM" } })() |} ];
let e = [%raw {| (function () { return { message: "IDKWTM" } })() |}];
let actual = MySql2_error.fromJs(e);

Expect.expect(() => raise(actual))
Expect.expect(() =>
raise(actual)
)
|> Expect.toThrowMessage("Failure,-2,UNKNOWN - 99999 (99999) - IDKWTM");
});

test("Should return a defaulted error", () => {
/* Use raw JS here toe retrieve a garbage object */
let e = [%raw {| (function () { return {} })()|} ];
let e = [%raw {| (function () { return {} })()|}];
let actual = MySql2_error.fromJs(e);

Expect.expect(() => raise(actual))
Expect.expect(() =>
raise(actual)
)
|> Expect.toThrowMessage("UNKNOWN - 99999 (99999) - EMPTY_MESSAGE");
});

test("should give appropriate message when only a sqlState is given", () =>{
test("should give appropriate message when only a sqlState is given", () => {
/* Use raw JS here toe retrieve a garbage object */
let e = [%raw {| (function () { return { sqlState: "test" } })()|} ];
let e = [%raw {| (function () { return { sqlState: "test" } })()|}];
let actual = MySql2_error.fromJs(e);

Expect.expect(() => raise(actual))

Expect.expect(() =>
raise(actual)
)
|> Expect.toThrowMessage(
"UNKNOWN - 99999 (99999) - EMPTY_MESSAGE - (test)"
);
"UNKNOWN - 99999 (99999) - EMPTY_MESSAGE - (test)",
);
});

test("should give appropriate message when only a sqlMessage is given", () =>{
test("should give appropriate message when only a sqlMessage is given", () => {
/* Use raw JS here toe retrieve a garbage object */
let e = [%raw {| (function () { return { sqlMessage: "test" } })()|} ];
let e = [%raw {| (function () { return { sqlMessage: "test" } })()|}];
let actual = MySql2_error.fromJs(e);
Expect.expect(() => raise(actual))
|> Expect.toThrowMessage(
"UNKNOWN - 99999 (99999) - EMPTY_MESSAGE - test"
);

Expect.expect(() =>
raise(actual)
)
|> Expect.toThrowMessage("UNKNOWN - 99999 (99999) - EMPTY_MESSAGE - test");
});
});
30 changes: 30 additions & 0 deletions __tests__/Test_mysql2_id.re
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
open Jest;

describe("MySql2_id", () => {
describe("toJson", () =>
test("it should convert an id to a JSON string", () =>
MySql2_id.fromJson(42.0 |. Js.Json.number)
|. MySql2_id.toJson
|. Js.Json.decodeString
|. Belt.Option.getExn
|> Expect.expect
|> Expect.toBe("42")
)
);

describe("fromJson", () => {
test("should fail when given a JSON boolean", () => {
let fn = () => Js.Json.boolean(true) |. MySql2_id.fromJson;

Expect.expect(fn)
|> Expect.toThrowMessage("unexpected_identifier_value");
});

test("should fail when given a JSON array", () => {
let fn = () => Js.Json.array([||]) |. MySql2_id.fromJson;

Expect.expect(fn)
|> Expect.toThrowMessage("unexpected_identifier_value");
});
});
});
31 changes: 31 additions & 0 deletions __tests__/Test_mysql2_response.re
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
open Jest;

describe("MySql2_response", () =>
describe("Select", () => {
let test_meta =
Json.Encode.(
object_([
("catalog", "catalog" |. string),
("schema", "schema" |. string),
("name", "name" |. string),
("orgName", "orgName" |. string),
("table", "table" |. string),
("orgTable", "orgTable" |. string),
("characterSet", 1 |. int),
("columnLength", 2 |. int),
("columnType", 3 |. int),
("flags", 4 |. int),
("decimals", 5 |. int),
])
);

describe("count", () =>
test("count should return 0 when rows is empty", () =>
MySql2_response.Select.make([||], [|test_meta|])
|. MySql2_response.Select.count
|. Expect.expect
|> Expect.toBe(0)
)
);
})
);
14 changes: 8 additions & 6 deletions __tests__/parse_response.re
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
open Jest;

module Response = MySql2_response;

describe("MySql2.parseResponse", () => {
test("Should return an error when given an unexpected boolean.", () => {
let invalid = Js.Json.boolean(true);
let message =
switch (MySql2.parseResponse(invalid, [||])) {
| `Select(_, _) => Failure("invalid_select_result")
| `Mutation(_, _) => Failure("invalid_mutation_result")
switch (Response.fromDriverResponse(invalid, [||])) {
| `Select(_) => Failure("unexpected_select_result")
| `Mutation(_) => Failure("unexpected_mutation_result")
| `Error(e) => e
};
Expect.expect(() =>
Expand All @@ -17,9 +19,9 @@ describe("MySql2.parseResponse", () => {
test("Should return an error when given an unexpected string", () => {
let invalid = Js.Json.string("invalid");
let message =
switch (MySql2.parseResponse(invalid, [||])) {
| `Select(_, _) => Failure("invalid_select_result")
| `Mutation(_, _) => Failure("invalid_mutation_result")
switch (Response.fromDriverResponse(invalid, [||])) {
| `Select(_) => Failure("invalid_select_result")
| `Mutation(_) => Failure("invalid_mutation_result")
| `Error(e) => e
};
Expect.expect(() =>
Expand Down
Loading

0 comments on commit 696e763

Please sign in to comment.