diff --git a/.github/workflows/dev-stg-release.yml b/.github/workflows/dev-stg-release.yml index 8e4284e1..26c6f0d0 100644 --- a/.github/workflows/dev-stg-release.yml +++ b/.github/workflows/dev-stg-release.yml @@ -36,7 +36,7 @@ jobs: ./gradlew build - name: Ballerina Build - uses: ballerina-platform/ballerina-action/@master + uses: ballerina-platform/ballerina-action/@2201.1.0 with: args: pack mongodb @@ -46,7 +46,7 @@ jobs: - name: Push to Staging if: github.event.inputs.bal_central_environment == 'STAGE' - uses: ballerina-platform/ballerina-action/@master + uses: ballerina-platform/ballerina-action/@2201.1.0 with: args: push @@ -57,7 +57,7 @@ jobs: - name: Push to Dev if: github.event.inputs.bal_central_environment == 'DEV' - uses: ballerina-platform/ballerina-action/@master + uses: ballerina-platform/ballerina-action/@2201.1.0 with: args: push diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 06815434..f19a6ca7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,7 +28,7 @@ jobs: ./gradlew build - name: Ballerina Build - uses: ballerina-platform/ballerina-action/@master + uses: ballerina-platform/ballerina-action/@2201.1.0 with: args: pack mongodb @@ -37,7 +37,7 @@ jobs: JAVA_OPTS: -DBALLERINA_DEV_COMPILE_BALLERINA_ORG=true - name: Ballerina Push - uses: ballerina-platform/ballerina-action/@master + uses: ballerina-platform/ballerina-action/@2201.1.0 with: args: push diff --git a/gradle.properties b/gradle.properties index d8291759..fa2cdba8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ group=org.ballerinalang.mongodb -version=3.3.0 -ballerinaLangVersion=2201.0.3 +version=3.3.1 +ballerinaLangVersion=2201.1.0 diff --git a/mongodb-native/build.gradle b/mongodb-native/build.gradle index e77a5723..3052f524 100644 --- a/mongodb-native/build.gradle +++ b/mongodb-native/build.gradle @@ -27,6 +27,8 @@ dependencies { compile (group: 'org.ballerinalang', name: 'ballerina-runtime', version: project.ballerinaLangVersion) { transitive = true } + compile group: 'org.ballerinalang', name: 'value', version: project.ballerinaLangVersion + compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.3' compile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.8.2' dist group: 'org.mongodb', name: 'mongo-java-driver', version: '3.8.2' } diff --git a/mongodb-native/src/main/java/org/ballerinalang/mongodb/RecordIteratorUtils.java b/mongodb-native/src/main/java/org/ballerinalang/mongodb/RecordIteratorUtils.java index a2d7baf4..95564436 100644 --- a/mongodb-native/src/main/java/org/ballerinalang/mongodb/RecordIteratorUtils.java +++ b/mongodb-native/src/main/java/org/ballerinalang/mongodb/RecordIteratorUtils.java @@ -19,13 +19,20 @@ import static io.ballerina.runtime.api.utils.StringUtils.fromString; +import com.fasterxml.jackson.databind.ObjectMapper; import com.mongodb.client.MongoCursor; +import io.ballerina.runtime.api.PredefinedTypes; +import io.ballerina.runtime.api.creators.TypeCreator; +import io.ballerina.runtime.api.creators.ValueCreator; +import io.ballerina.runtime.api.types.RecordType; +import io.ballerina.runtime.api.types.UnionType; +import io.ballerina.runtime.api.values.BTypedesc; +import org.ballerinalang.langlib.value.FromJsonStringWithType; import org.bson.Document; import io.ballerina.runtime.api.creators.ErrorCreator; import io.ballerina.runtime.api.values.BObject; -import io.ballerina.runtime.internal.JsonParser; /** * This class provides functionality for the `RecordIterator` to iterate through the MongoCursor. @@ -38,9 +45,18 @@ public RecordIteratorUtils() { public static Object nextResult(BObject recordIterator) { MongoCursor results = (MongoCursor) recordIterator.getNativeData( - MongoDBConstants.RESULT_SET_NATIVE_DATA_FIELD); + MongoDBConstants.RESULT_SET_NATIVE_DATA_FIELD); + RecordType recordType = (RecordType) recordIterator.getNativeData(MongoDBConstants.RECORD_TYPE_DATA_FIELD); if (results.hasNext()) { - return JsonParser.parse(results.next().toJson()); + try { + String result = new ObjectMapper().writeValueAsString(results.next()); + UnionType responseType = TypeCreator.createUnionType(recordType, PredefinedTypes.TYPE_ERROR, + PredefinedTypes.TYPE_NULL); + BTypedesc responseTypedescValue = ValueCreator.createTypedescValue(responseType); + return FromJsonStringWithType.fromJsonStringWithType(fromString(result), responseTypedescValue); + } catch (Exception e) { + return ErrorCreator.createError(fromString("Error while iterating elements"), e); + } } else { return null; } @@ -48,7 +64,7 @@ public static Object nextResult(BObject recordIterator) { public static Object closeResult(BObject recordIterator) { MongoCursor results = (MongoCursor) recordIterator.getNativeData( - MongoDBConstants.RESULT_SET_NATIVE_DATA_FIELD); + MongoDBConstants.RESULT_SET_NATIVE_DATA_FIELD); if (results != null) { try { results.close(); diff --git a/mongodb/Ballerina.toml b/mongodb/Ballerina.toml index 3dcb8408..9b5c96ae 100644 --- a/mongodb/Ballerina.toml +++ b/mongodb/Ballerina.toml @@ -1,8 +1,8 @@ [package] -distribution = "2201.0.3" +distribution = "2201.1.0" org = "ballerinax" name = "mongodb" -version = "3.3.0" +version = "3.3.1" license= ["Apache-2.0"] authors = ["Ballerina"] keywords = ["IT Operations/Databases", "Cost/Freemium"] @@ -10,7 +10,22 @@ icon = "icon.png" repository = "https://github.com/ballerina-platform/module-ballerinax-mongodb" [[platform.java11.dependency]] -path = "../mongodb-native/build/libs/mongodb-native-3.3.0.jar" +path = "../mongodb-native/build/libs/mongodb-native-3.3.1.jar" groupId = "org.ballerinalang" artifactId = "mongodb-native" -version = "3.3.0" +version = "3.3.1" + +[[platform.java11.dependency]] +groupId = "com.fasterxml.jackson.core" +artifactId = "jackson-core" +version = "2.13.3" + +[[platform.java11.dependency]] +groupId = "com.fasterxml.jackson.core" +artifactId = "jackson-annotations" +version = "2.13.3" + +[[platform.java11.dependency]] +groupId = "com.fasterxml.jackson.core" +artifactId = "jackson-databind" +version = "2.13.3" diff --git a/mongodb/Dependencies.toml b/mongodb/Dependencies.toml index 6ea3fa64..7f2b2760 100644 --- a/mongodb/Dependencies.toml +++ b/mongodb/Dependencies.toml @@ -9,7 +9,7 @@ dependencies-toml-version = "2" [[package]] org = "ballerina" name = "crypto" -version = "2.2.0" +version = "2.2.2" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "time"} @@ -21,9 +21,10 @@ modules = [ [[package]] org = "ballerina" name = "file" -version = "1.2.0" +version = "1.2.2" scope = "testOnly" dependencies = [ + {org = "ballerina", name = "io"}, {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "log"}, {org = "ballerina", name = "os"}, @@ -37,7 +38,7 @@ modules = [ [[package]] org = "ballerina" name = "io" -version = "1.2.1" +version = "1.2.2" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"}, @@ -64,7 +65,7 @@ dependencies = [ [[package]] org = "ballerina" name = "log" -version = "2.2.0" +version = "2.2.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "io"}, @@ -79,7 +80,7 @@ modules = [ [[package]] org = "ballerina" name = "observe" -version = "1.0.1" +version = "1.0.5" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"} @@ -88,7 +89,7 @@ dependencies = [ [[package]] org = "ballerina" name = "os" -version = "1.2.0" +version = "1.2.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"} @@ -100,7 +101,7 @@ modules = [ [[package]] org = "ballerina" name = "regex" -version = "1.2.0" +version = "1.2.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"} @@ -121,7 +122,7 @@ modules = [ [[package]] org = "ballerina" name = "time" -version = "2.2.0" +version = "2.2.2" dependencies = [ {org = "ballerina", name = "jballerina.java"} ] @@ -129,7 +130,7 @@ dependencies = [ [[package]] org = "ballerinax" name = "mongodb" -version = "3.3.0" +version = "3.3.1" dependencies = [ {org = "ballerina", name = "crypto"}, {org = "ballerina", name = "file"}, diff --git a/mongodb/Package.md b/mongodb/Package.md index 09a63507..73f9f823 100644 --- a/mongodb/Package.md +++ b/mongodb/Package.md @@ -10,7 +10,7 @@ The MongoDB connector allows you to connect to a MongoDB database from Ballerina | | Version | |---------------------------|-----------------------------| -| Ballerina Language | Swan Lake 2201.0.3 | +| Ballerina Language | Swan Lake 2201.1.0 | | Mongo DB | 4.2.0 | ## Report issues diff --git a/mongodb/errors.bal b/mongodb/errors.bal index 6c41c2f6..aad4c8f2 100644 --- a/mongodb/errors.bal +++ b/mongodb/errors.bal @@ -29,4 +29,4 @@ public type DatabaseError distinct error; public type ApplicationError distinct error; # Represents a database or application level error returned from the MongoDB client remote functions. -public type Error DatabaseError|ApplicationError; +public type Error DatabaseError|ApplicationError|error; diff --git a/mongodb/tests/main_test.bal b/mongodb/tests/main_test.bal index 99be6580..0b06b771 100644 --- a/mongodb/tests/main_test.bal +++ b/mongodb/tests/main_test.bal @@ -152,6 +152,7 @@ public function testFindData() returns error? { stream result = check mongoClient->find(COLLECTION_NAME,filter = findDoc); check result.forEach(function(Movie data){ log:printInfo(data.year.toString()); + test:assertTrue(data is Movie); test:assertEquals(data.year,"2019","Querying year 2019 filter failed"); }); log:printInfo("Querying year 2019 filter tested successfully");