Skip to content

Commit

Permalink
Merge pull request #1 from kaneeldias/main
Browse files Browse the repository at this point in the history
Add MSSQL connector with test cases
  • Loading branch information
daneshk committed Aug 20, 2021
2 parents 3c6f09f + 5456a72 commit 1c8cbc3
Show file tree
Hide file tree
Showing 8 changed files with 233 additions and 2 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: CI

on:
push:
branches:
- main
workflow_dispatch:
pull_request:
branches:
- main

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Ballerina Build
uses: ballerina-platform/ballerina-action/@slbeta1
with:
args:
build -c --skip-tests

26 changes: 26 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Deployment

on:
release:
types: [published]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Ballerina Build
uses: ballerina-platform/ballerina-action/@slbeta1
with:
args:
build -c --skip-tests
- name: Ballerina Push
uses: ballerina-platform/ballerina-action/@slbeta1
with:
args:
push
env:
BALLERINA_CENTRAL_ACCESS_TOKEN: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }}

22 changes: 22 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,25 @@

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

# Target folder of ballerina project
/target/*

# resources folder
/resources/*

# idea files
*.idea
*.iml

# .ballerina files
*.ballerina

# Ignore Gradle project-specific cache directory
.gradle

# Ignore Gradle build output directory
build

#
*.log
16 changes: 16 additions & 0 deletions Ballerina.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[package]
org="ballerinax"
name="mssql.driver"
version="1.1.0"
authors=["Ballerina"]
keywords=["MSSQL", "SQL Server"]
repository="https://github.com/ballerina-platform/module-ballerinax-mssql.driver"
license=["Apache-2.0"]

[[platform.java11.dependency]]
groupId = "com.microsoft.sqlserver"
artifactId = "mssql-jdbc"
version = "9.4.0.jre11"

[build-options]
observabilityIncluded = true
18 changes: 18 additions & 0 deletions Package.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Package overview

This Package bundles the latest MSSQL driver so that the mssql connector can be used in ballerina projects easily.

## Compatibility

Ballerina Language Version **Swan Lake Beta 1**
MSSQL Driver Version **9.4.0.jre11**

## Usage

To add the MSSQL driver dependency the project simply import the module as below,

```ballerina
import ballerina/sql;
import ballerinax/mssql;
import ballerinax/mssql.driver as _;
```
47 changes: 45 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,45 @@
# module-ballerinax-mssql.driver
Ballerina MSSQL DB Driver
Ballerina MSSQL Driver Library
===================

The MSSQL Driver library is one of the external library packages of the <a target="_blank" href="https://ballerina.io
/"> Ballerina</a> language.

This Package bundles the latest MSSQL driver so that the mssql connector can be used in ballerina projects easily.

# Building from the Source
## Setting Up the Prerequisites

1. Download and install Java SE Development Kit (JDK) version 11 (from one of the following locations).

* [Oracle](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)

* [OpenJDK](https://adoptopenjdk.net/)

> **Note:** Set the JAVA_HOME environment variable to the path name of the directory into which you installed JDK.
2. Download and install [Ballerina SL Beta 1](https://ballerina.io/).

## Building the Source

Execute the commands below to build from the source after installing Ballerina Swan Lake Beta 1 version.

1. To build the library:
```shell script
bal build
```

2. To build the module without the tests:
```shell script
bal build --skip-tests
```
# Contributing to Ballerina
As an open source project, Ballerina welcomes contributions from the community.

For more information, go to the [contribution guidelines](https://github.com/ballerina-platform/ballerina-lang/blob/main/CONTRIBUTING.md).

# Code of Conduct
All contributors are encouraged to read the [Ballerina Code of Conduct](https://ballerina.io/code-of-conduct).

# Useful Links
* Chat live with us via our [Slack channel](https://ballerina.io/community/slack/).
* Post all technical questions on Stack Overflow with the [#ballerina](https://stackoverflow.com/questions/tagged/ballerina) tag.
16 changes: 16 additions & 0 deletions client.bal
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright (c) 2021 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
//
// WSO2 Inc. licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except
// in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

66 changes: 66 additions & 0 deletions tests/connection-init-test.bal
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.

// WSO2 Inc. licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except
// in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0

// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

import ballerina/sql;
import ballerinax/java.jdbc;
import ballerina/test;

string url = "jdbc:sqlserver://localhost:1433;";
string user = "sa";
string password = "Test123#";

@test:Config {
groups: ["connection", "connection-init"]
}
function testWithURLParams() returns error? {
jdbc:Client dbClient = check new (url, user, password);
sql:Error? closeResult = dbClient.close();
test:assertExactEquals(closeResult, (), "Initialising connection with params fails.");
}

@test:Config {
groups: ["connection", "connection-init"]
}
function testWithConnectionPool() returns error? {
sql:ConnectionPool connectionPool = {
maxOpenConnections: 25,
maxConnectionLifeTime : 15,
minIdleConnections : 15
};
jdbc:Client dbClient = check new (url = url, user = user, password = password, connectionPool = connectionPool);
sql:Error? closeResult = dbClient.close();
test:assertExactEquals(closeResult, (), "Initialising connection with option max connection pool fails.");
test:assertEquals(connectionPool.maxOpenConnections, 25, "Configured max connection config is wrong.");
test:assertEquals(connectionPool.maxConnectionLifeTime, <decimal>15, "Configured max connection life time second is wrong.");
test:assertEquals(connectionPool.minIdleConnections, 15, "Configured min idle connection is wrong.");
}

@test:Config {
groups: ["connection", "connection-init"]
}
function testWithClosedClient1() returns error? {
jdbc:Client dbClient = check new (url = url, user = user, password = password);
sql:Error? closeResult = dbClient.close();
test:assertExactEquals(closeResult, (), "Initialising connection with connection params fails.");
sql:ExecutionResult|sql:Error result = dbClient->execute(`CREATE TABLE test (id int)`);
if (result is sql:Error) {
string expectedErrorMessage = "SQL Client is already closed, hence further operations are not allowed";
test:assertTrue(result.message().startsWith(expectedErrorMessage),
"Error message does not match, actual :\n'" + result.message() + "'\nExpected : \n" + expectedErrorMessage);
} else {
test:assertFail("Error expected");
}
}

0 comments on commit 1c8cbc3

Please sign in to comment.