[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

classic Classic list List threaded Threaded
51 messages Options
123
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
Github user xubo245 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228699782
 
    --- Diff: store/CSDK/main.cpp ---
    @@ -484,6 +485,264 @@ bool readPerformanceFromS3(JNIEnv *env, char *argv[]) {
         reader.close();
     }
     
    +/**
    + * test write data to local disk
    + *
    + * @param env  jni env
    + * @return
    + */
    +bool writeToLocal(JNIEnv *env, char *path) {
    +
    +    char *jsonSchema = "[{stringField:string},{shortField:short},{intField:int},{longField:long},{doubleField:double},{boolField:boolean},{dateField:date},{timeField:timestamp},{floatField:float},{arrayField:array}]";
    +
    +    CarbonWriter carbonWriterClass;
    +    carbonWriterClass.builder(env);
    +    carbonWriterClass.outputPath(path);
    +    carbonWriterClass.withCsvInput(jsonSchema);
    +    carbonWriterClass.build();
    +
    +    int rowNum = 10;
    +    int size = 10;
    +    long longValue = 0;
    +    double doubleValue = 0;
    +    float floatValue = 0;
    +    jclass objClass = env->FindClass("java/lang/String");
    +    for (int i = 0; i < rowNum; ++i) {
    +        jobjectArray arr = env->NewObjectArray(size, objClass, 0);
    +        char ctrInt[10];
    +        gcvt(i, 10, ctrInt);
    +
    +        char a[15] = "robot";
    +        strcat(a, ctrInt);
    +        jobject stringField = env->NewStringUTF(a);
    +        env->SetObjectArrayElement(arr, 0, stringField);
    +
    +        char ctrShort[10];
    +        gcvt(i % 10000, 10, ctrShort);
    +        jobject shortField = env->NewStringUTF(ctrShort);
    +        env->SetObjectArrayElement(arr, 1, shortField);
    +
    +        jobject intField = env->NewStringUTF(ctrInt);
    +        env->SetObjectArrayElement(arr, 2, intField);
    +
    +
    +        char ctrLong[10];
    +        gcvt(longValue, 10, ctrLong);
    +        longValue = longValue + 2;
    +        jobject longField = env->NewStringUTF(ctrLong);
    +        env->SetObjectArrayElement(arr, 3, longField);
    +
    +        char ctrDouble[10];
    +        gcvt(doubleValue, 10, ctrDouble);
    +        doubleValue = doubleValue + 2;
    +        jobject doubleField = env->NewStringUTF(ctrDouble);
    +        env->SetObjectArrayElement(arr, 4, doubleField);
    +
    +        jobject boolField = env->NewStringUTF("true");
    +        env->SetObjectArrayElement(arr, 5, boolField);
    +
    +        jobject dateField = env->NewStringUTF(" 2019-03-02");
    +        env->SetObjectArrayElement(arr, 6, dateField);
    +
    +        jobject timeField = env->NewStringUTF("2019-02-12 03:03:34");
    +        env->SetObjectArrayElement(arr, 7, timeField);
    +
    +        char ctrFloat[10];
    +        gcvt(floatValue, 10, ctrFloat);
    +        floatValue = floatValue + 2;
    +        jobject floatField = env->NewStringUTF(ctrFloat);
    +        env->SetObjectArrayElement(arr, 8, floatField);
    +
    +        jobject arrayField = env->NewStringUTF("Hello#World#From#Carbon");
    +        env->SetObjectArrayElement(arr, 9, arrayField);
    +
    +
    +        carbonWriterClass.write(arr);
    +
    +        env->DeleteLocalRef(stringField);
    +        env->DeleteLocalRef(shortField);
    +        env->DeleteLocalRef(intField);
    +        env->DeleteLocalRef(longField);
    +        env->DeleteLocalRef(doubleField);
    +        env->DeleteLocalRef(floatField);
    +        env->DeleteLocalRef(dateField);
    +        env->DeleteLocalRef(timeField);
    +        env->DeleteLocalRef(boolField);
    +        env->DeleteLocalRef(arrayField);
    +        env->DeleteLocalRef(arr);
    +    }
    +    carbonWriterClass.close();
    +
    +    CarbonReader carbonReader;
    +    carbonReader.builder(env, path);
    +    carbonReader.build();
    +    int i = 0;
    +    CarbonRow carbonRow(env);
    --- End diff --
   
    I don't understand. Can you explain detail?


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user xubo245 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228699788
 
    --- Diff: store/CSDK/main.cpp ---
    @@ -484,6 +485,264 @@ bool readPerformanceFromS3(JNIEnv *env, char *argv[]) {
         reader.close();
     }
     
    +/**
    + * test write data to local disk
    + *
    + * @param env  jni env
    + * @return
    + */
    +bool writeToLocal(JNIEnv *env, char *path) {
    +
    +    char *jsonSchema = "[{stringField:string},{shortField:short},{intField:int},{longField:long},{doubleField:double},{boolField:boolean},{dateField:date},{timeField:timestamp},{floatField:float},{arrayField:array}]";
    +
    +    CarbonWriter carbonWriterClass;
    +    carbonWriterClass.builder(env);
    +    carbonWriterClass.outputPath(path);
    +    carbonWriterClass.withCsvInput(jsonSchema);
    +    carbonWriterClass.build();
    +
    +    int rowNum = 10;
    +    int size = 10;
    +    long longValue = 0;
    +    double doubleValue = 0;
    +    float floatValue = 0;
    +    jclass objClass = env->FindClass("java/lang/String");
    +    for (int i = 0; i < rowNum; ++i) {
    +        jobjectArray arr = env->NewObjectArray(size, objClass, 0);
    +        char ctrInt[10];
    +        gcvt(i, 10, ctrInt);
    +
    +        char a[15] = "robot";
    +        strcat(a, ctrInt);
    +        jobject stringField = env->NewStringUTF(a);
    +        env->SetObjectArrayElement(arr, 0, stringField);
    +
    +        char ctrShort[10];
    +        gcvt(i % 10000, 10, ctrShort);
    +        jobject shortField = env->NewStringUTF(ctrShort);
    +        env->SetObjectArrayElement(arr, 1, shortField);
    +
    +        jobject intField = env->NewStringUTF(ctrInt);
    +        env->SetObjectArrayElement(arr, 2, intField);
    +
    +
    +        char ctrLong[10];
    +        gcvt(longValue, 10, ctrLong);
    +        longValue = longValue + 2;
    +        jobject longField = env->NewStringUTF(ctrLong);
    +        env->SetObjectArrayElement(arr, 3, longField);
    +
    +        char ctrDouble[10];
    +        gcvt(doubleValue, 10, ctrDouble);
    +        doubleValue = doubleValue + 2;
    +        jobject doubleField = env->NewStringUTF(ctrDouble);
    +        env->SetObjectArrayElement(arr, 4, doubleField);
    +
    +        jobject boolField = env->NewStringUTF("true");
    +        env->SetObjectArrayElement(arr, 5, boolField);
    +
    +        jobject dateField = env->NewStringUTF(" 2019-03-02");
    +        env->SetObjectArrayElement(arr, 6, dateField);
    +
    +        jobject timeField = env->NewStringUTF("2019-02-12 03:03:34");
    +        env->SetObjectArrayElement(arr, 7, timeField);
    +
    +        char ctrFloat[10];
    +        gcvt(floatValue, 10, ctrFloat);
    +        floatValue = floatValue + 2;
    +        jobject floatField = env->NewStringUTF(ctrFloat);
    +        env->SetObjectArrayElement(arr, 8, floatField);
    +
    +        jobject arrayField = env->NewStringUTF("Hello#World#From#Carbon");
    +        env->SetObjectArrayElement(arr, 9, arrayField);
    +
    +
    +        carbonWriterClass.write(arr);
    +
    +        env->DeleteLocalRef(stringField);
    +        env->DeleteLocalRef(shortField);
    +        env->DeleteLocalRef(intField);
    +        env->DeleteLocalRef(longField);
    +        env->DeleteLocalRef(doubleField);
    +        env->DeleteLocalRef(floatField);
    +        env->DeleteLocalRef(dateField);
    +        env->DeleteLocalRef(timeField);
    +        env->DeleteLocalRef(boolField);
    +        env->DeleteLocalRef(arrayField);
    +        env->DeleteLocalRef(arr);
    +    }
    +    carbonWriterClass.close();
    +
    +    CarbonReader carbonReader;
    +    carbonReader.builder(env, path);
    +    carbonReader.build();
    +    int i = 0;
    +    CarbonRow carbonRow(env);
    +    while (carbonReader.hasNext()) {
    +        jobject row = carbonReader.readNextCarbonRow();
    +        i++;
    +        carbonRow.setCarbonRow(row);
    +        printf("%s\t%d\t%ld\t", carbonRow.getString(0), carbonRow.getInt(1), carbonRow.getLong(2));
    +        jobjectArray array1 = carbonRow.getArray(3);
    +        jsize length = env->GetArrayLength(array1);
    +        int j = 0;
    +        for (j = 0; j < length; j++) {
    +            jobject element = env->GetObjectArrayElement(array1, j);
    +            char *str = (char *) env->GetStringUTFChars((jstring) element, JNI_FALSE);
    +            printf("%s\t", str);
    +        }
    +        printf("%d\t", carbonRow.getShort(4));
    +        printf("%d\t", carbonRow.getInt(5));
    +        printf("%ld\t", carbonRow.getLong(6));
    +        printf("%lf\t", carbonRow.getDouble(7));
    +        bool bool1 = carbonRow.getBoolean(8);
    +        if (bool1) {
    +            printf("true\t");
    +        } else {
    +            printf("false\t");
    +        }
    +        printf("%f\t\n", carbonRow.getFloat(9));
    +        env->DeleteLocalRef(row);
    +    }
    +    carbonReader.close();
    +}
    +
    +/**
    + * test write data to S3
    + *
    + * @param env  jni env
    + * @return
    + */
    +bool writeToS3(JNIEnv *env, char *path, char *argv[]) {
    +    printf("test write data ro S3");
    +    char *jsonSchema = "[{stringField:string},{shortField:short},{intField:int},{longField:long},{doubleField:double},{boolField:boolean},{dateField:date},{timeField:timestamp},{floatField:float},{arrayField:array}]";
    +
    +    char *args[3];
    +    // "your access key"
    +    args[0] = argv[1];
    +    // "your secret key"
    +    args[1] = argv[2];
    +    // "your endPoint"
    +    args[2] = argv[3];
    +
    +    CarbonWriter carbonWriterClass;
    +    carbonWriterClass.builder(env);
    +    carbonWriterClass.outputPath(path);
    +    carbonWriterClass.withHadoopConf("fs.s3a.access.key", argv[1]);
    +    carbonWriterClass.withHadoopConf("fs.s3a.secret.key", argv[2]);
    +    carbonWriterClass.withHadoopConf("fs.s3a.endpoint", argv[3]);
    +    carbonWriterClass.withCsvInput(jsonSchema);
    +    carbonWriterClass.build();
    +
    +    int rowNum = 10;
    +    int size = 10;
    +    long longValue = 0;
    +    double doubleValue = 0;
    +    float floatValue = 0;
    +    jclass objClass = env->FindClass("java/lang/String");
    +    for (int i = 0; i < rowNum; ++i) {
    +        jobjectArray arr = env->NewObjectArray(size, objClass, 0);
    +        char ctrInt[10];
    +        gcvt(i, 10, ctrInt);
    +
    +        char a[15] = "robot";
    +        strcat(a, ctrInt);
    +        jobject stringField = env->NewStringUTF(a);
    +        env->SetObjectArrayElement(arr, 0, stringField);
    +
    +        char ctrShort[10];
    +        gcvt(i % 10000, 10, ctrShort);
    +        jobject shortField = env->NewStringUTF(ctrShort);
    +        env->SetObjectArrayElement(arr, 1, shortField);
    +
    +        jobject intField = env->NewStringUTF(ctrInt);
    +        env->SetObjectArrayElement(arr, 2, intField);
    +
    +
    +        char ctrLong[10];
    +        gcvt(longValue, 10, ctrLong);
    +        longValue = longValue + 2;
    +        jobject longField = env->NewStringUTF(ctrLong);
    +        env->SetObjectArrayElement(arr, 3, longField);
    +
    +        char ctrDouble[10];
    +        gcvt(doubleValue, 10, ctrDouble);
    +        doubleValue = doubleValue + 2;
    +        jobject doubleField = env->NewStringUTF(ctrDouble);
    +        env->SetObjectArrayElement(arr, 4, doubleField);
    +
    +        jobject boolField = env->NewStringUTF("true");
    +        env->SetObjectArrayElement(arr, 5, boolField);
    +
    +        jobject dateField = env->NewStringUTF(" 2019-03-02");
    +        env->SetObjectArrayElement(arr, 6, dateField);
    +
    +        jobject timeField = env->NewStringUTF("2019-02-12 03:03:34");
    +        env->SetObjectArrayElement(arr, 7, timeField);
    +
    +        char ctrFloat[10];
    +        gcvt(floatValue, 10, ctrFloat);
    +        floatValue = floatValue + 2;
    +        jobject floatField = env->NewStringUTF(ctrFloat);
    +        env->SetObjectArrayElement(arr, 8, floatField);
    +
    +        jobject arrayField = env->NewStringUTF("Hello#World#From#Carbon");
    +        env->SetObjectArrayElement(arr, 9, arrayField);
    +
    +
    +        carbonWriterClass.write(arr);
    +
    +        env->DeleteLocalRef(stringField);
    +        env->DeleteLocalRef(shortField);
    +        env->DeleteLocalRef(intField);
    +        env->DeleteLocalRef(longField);
    +        env->DeleteLocalRef(doubleField);
    +        env->DeleteLocalRef(floatField);
    +        env->DeleteLocalRef(dateField);
    +        env->DeleteLocalRef(timeField);
    +        env->DeleteLocalRef(boolField);
    +        env->DeleteLocalRef(arrayField);
    +        env->DeleteLocalRef(arr);
    +    }
    +    carbonWriterClass.close();
    +
    +    CarbonReader carbonReader;
    +    carbonReader.builder(env, path);
    +    carbonReader.withHadoopConf("fs.s3a.access.key", argv[1]);
    +    carbonReader.withHadoopConf("fs.s3a.secret.key", argv[2]);
    +    carbonReader.withHadoopConf("fs.s3a.endpoint", argv[3]);
    +    carbonReader.build();
    +    int i = 0;
    +    CarbonRow carbonRow(env);
    --- End diff --
   
    I don't understand. Can you explain detail?


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user ajantha-bhat commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228700880
 
    --- Diff: store/CSDK/src/CarbonWriter.cpp ---
    @@ -0,0 +1,161 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF 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.
    + */
    +
    +#include <stdexcept>
    +#include "CarbonWriter.h"
    +
    +void CarbonWriter::builder(JNIEnv *env) {
    +    if (env == NULL) {
    +        throw std::runtime_error("JNIEnv parameter can't be NULL.");
    +    }
    +    jniEnv = env;
    +    carbonWriter = env->FindClass("org/apache/carbondata/sdk/file/CarbonWriter");
    +    if (carbonWriter == NULL) {
    +        throw std::runtime_error("Can't find the class in java: org/apache/carbondata/sdk/file/CarbonWriter");
    +    }
    +    jmethodID carbonWriterBuilderID = env->GetStaticMethodID(carbonWriter, "builder",
    +        "()Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (carbonWriterBuilderID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: carbonWriterBuilder");
    +    }
    +    carbonWriterBuilderObject = env->CallStaticObjectMethod(carbonWriter, carbonWriterBuilderID);
    +}
    +
    +bool CarbonWriter::checkBuilder() {
    +    if (carbonWriterBuilderObject == NULL) {
    +        throw std::runtime_error("carbonWriterBuilder Object can't be NULL. Please call builder method first.");
    +    }
    +}
    +
    +void CarbonWriter::outputPath(char *path) {
    +    if (path == NULL) {
    +        throw std::runtime_error("path parameter can't be NULL.");
    +    }
    +    checkBuilder();
    --- End diff --
   
    This logic is required for carbon Reader also in CarbonReader.cpp
    for API which is called after builder. please add


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user CarbonDataQA commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    Build Success with Spark 2.1.0, Please check CI http://136.243.101.176:8080/job/ApacheCarbonPRBuilder2.1/1077/



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user ajantha-bhat commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228700968
 
    --- Diff: store/CSDK/src/CarbonWriter.cpp ---
    @@ -0,0 +1,161 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF 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.
    + */
    +
    +#include <stdexcept>
    +#include "CarbonWriter.h"
    +
    +void CarbonWriter::builder(JNIEnv *env) {
    +    if (env == NULL) {
    +        throw std::runtime_error("JNIEnv parameter can't be NULL.");
    +    }
    +    jniEnv = env;
    +    carbonWriter = env->FindClass("org/apache/carbondata/sdk/file/CarbonWriter");
    +    if (carbonWriter == NULL) {
    +        throw std::runtime_error("Can't find the class in java: org/apache/carbondata/sdk/file/CarbonWriter");
    +    }
    +    jmethodID carbonWriterBuilderID = env->GetStaticMethodID(carbonWriter, "builder",
    +        "()Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (carbonWriterBuilderID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: carbonWriterBuilder");
    +    }
    +    carbonWriterBuilderObject = env->CallStaticObjectMethod(carbonWriter, carbonWriterBuilderID);
    +}
    +
    +bool CarbonWriter::checkBuilder() {
    +    if (carbonWriterBuilderObject == NULL) {
    +        throw std::runtime_error("carbonWriterBuilder Object can't be NULL. Please call builder method first.");
    +    }
    +}
    +
    +void CarbonWriter::outputPath(char *path) {
    +    if (path == NULL) {
    +        throw std::runtime_error("path parameter can't be NULL.");
    +    }
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "outputPath",
    +        "(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: outputPath");
    +    }
    +    jstring jPath = jniEnv->NewStringUTF(path);
    +    jvalue args[1];
    +    args[0].l = jPath;
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +}
    +
    +void CarbonWriter::withCsvInput(char *jsonSchema) {
    +    if (jsonSchema == NULL) {
    +        throw std::runtime_error("jsonSchema parameter can't be NULL.");
    +    }
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "withCsvInput",
    +        "(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: withCsvInput");
    +    }
    +    jstring jPath = jniEnv->NewStringUTF(jsonSchema);
    +    jvalue args[1];
    +    args[0].l = jPath;
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +    if (jniEnv->ExceptionCheck()) {
    +        throw jniEnv->ExceptionOccurred();
    +    }
    +};
    +
    +void CarbonWriter::withHadoopConf(char *key, char *value) {
    +    if (key == NULL) {
    +        throw std::runtime_error("key parameter can't be NULL.");
    +    }
    +    if (value == NULL) {
    +        throw std::runtime_error("value parameter can't be NULL.");
    +    }
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "withHadoopConf",
    +        "(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: withHadoopConf");
    +    }
    +    jvalue args[2];
    +    args[0].l = jniEnv->NewStringUTF(key);
    +    args[1].l = jniEnv->NewStringUTF(value);
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +}
    +
    +void CarbonWriter::writtenBy(char *appName) {
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "writtenBy",
    +        "(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: writtenBy");
    +    }
    +    jvalue args[1];
    +    args[0].l = jniEnv->NewStringUTF(appName);
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +}
    +
    +void CarbonWriter::build() {
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "build",
    +        "()Lorg/apache/carbondata/sdk/file/CarbonWriter;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: build");
    +    }
    +    carbonWriterObject = jniEnv->CallObjectMethod(carbonWriterBuilderObject, methodID);
    +
    +    if (jniEnv->ExceptionCheck()) {
    +        throw jniEnv->ExceptionOccurred();
    +    }
    +}
    +
    +void CarbonWriter::write(jobject obj) {
    +    if (carbonWriterObject == NULL) {
    +        throw std::runtime_error("Please call build first.");
    +    }
    +    if (writeID == NULL) {
    +        carbonWriter = jniEnv->GetObjectClass(carbonWriterObject);
    +        writeID = jniEnv->GetMethodID(carbonWriter, "write", "(Ljava/lang/Object;)V");
    +        if (writeID == NULL) {
    +            throw std::runtime_error("Can't find the method in java: write");
    +        }
    +    }
    +    jvalue args[1];
    +    args[0].l = obj;
    +    jniEnv->CallBooleanMethodA(carbonWriterObject, writeID, args);
    +    if (jniEnv->ExceptionCheck()) {
    +        throw jniEnv->ExceptionOccurred();
    +    }
    +};
    +
    +jboolean CarbonWriter::close() {
    --- End diff --
   
    return values not changed. This is void.


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user ajantha-bhat commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228701158
 
    --- Diff: store/CSDK/test/main.cpp ---
    @@ -210,6 +212,288 @@ bool tryCatchException(JNIEnv *env) {
         }
         printf("\nfinished handle exception\n");
     }
    +
    +/**
    + * test write data to local disk
    + *
    + * @param env  jni env
    + * @param path file path
    + * @param argc argument counter
    + * @param argv argument vector
    + * @return true or throw exception
    + */
    +bool testWriteData(JNIEnv *env, char *path, int argc, char *argv[]) {
    +
    +    char *jsonSchema = "[{stringField:string},{shortField:short},{intField:int},{longField:long},{doubleField:double},{boolField:boolean},{dateField:date},{timeField:timestamp},{floatField:float},{arrayField:array}]";
    +    try {
    +        CarbonWriter writer;
    +        writer.builder(env);
    +        if (argc > 3) {
    +            writer.withHadoopConf("fs.s3a.access.key", argv[1]);
    +            writer.withHadoopConf("fs.s3a.secret.key", argv[2]);
    +            writer.withHadoopConf("fs.s3a.endpoint", argv[3]);
    +        }
    +        writer.outputPath(path);
    +        writer.withCsvInput(jsonSchema);
    +        writer.writtenBy("CSDK");
    +        writer.build();
    +
    +        int rowNum = 10;
    +        int size = 10;
    +        long longValue = 0;
    +        double doubleValue = 0;
    +        float floatValue = 0;
    +        jclass objClass = env->FindClass("java/lang/String");
    +        for (int i = 0; i < rowNum; ++i) {
    +            jobjectArray arr = env->NewObjectArray(size, objClass, 0);
    +            char ctrInt[10];
    +            gcvt(i, 10, ctrInt);
    +
    +            char a[15] = "robot";
    +            strcat(a, ctrInt);
    +            jobject stringField = env->NewStringUTF(a);
    +            env->SetObjectArrayElement(arr, 0, stringField);
    +
    +            char ctrShort[10];
    +            gcvt(i % 10000, 10, ctrShort);
    +            jobject shortField = env->NewStringUTF(ctrShort);
    +            env->SetObjectArrayElement(arr, 1, shortField);
    +
    +            jobject intField = env->NewStringUTF(ctrInt);
    +            env->SetObjectArrayElement(arr, 2, intField);
    +
    +
    +            char ctrLong[10];
    +            gcvt(longValue, 10, ctrLong);
    +            longValue = longValue + 2;
    +            jobject longField = env->NewStringUTF(ctrLong);
    +            env->SetObjectArrayElement(arr, 3, longField);
    +
    +            char ctrDouble[10];
    +            gcvt(doubleValue, 10, ctrDouble);
    +            doubleValue = doubleValue + 2;
    +            jobject doubleField = env->NewStringUTF(ctrDouble);
    +            env->SetObjectArrayElement(arr, 4, doubleField);
    +
    +            jobject boolField = env->NewStringUTF("true");
    +            env->SetObjectArrayElement(arr, 5, boolField);
    +
    +            jobject dateField = env->NewStringUTF(" 2019-03-02");
    +            env->SetObjectArrayElement(arr, 6, dateField);
    +
    +            jobject timeField = env->NewStringUTF("2019-02-12 03:03:34");
    +            env->SetObjectArrayElement(arr, 7, timeField);
    +
    +            char ctrFloat[10];
    +            gcvt(floatValue, 10, ctrFloat);
    +            floatValue = floatValue + 2;
    +            jobject floatField = env->NewStringUTF(ctrFloat);
    +            env->SetObjectArrayElement(arr, 8, floatField);
    +
    +            jobject arrayField = env->NewStringUTF("Hello#World#From#Carbon");
    +            env->SetObjectArrayElement(arr, 9, arrayField);
    +
    +
    +            writer.write(arr);
    +
    +            env->DeleteLocalRef(stringField);
    +            env->DeleteLocalRef(shortField);
    +            env->DeleteLocalRef(intField);
    +            env->DeleteLocalRef(longField);
    +            env->DeleteLocalRef(doubleField);
    +            env->DeleteLocalRef(floatField);
    +            env->DeleteLocalRef(dateField);
    +            env->DeleteLocalRef(timeField);
    +            env->DeleteLocalRef(boolField);
    +            env->DeleteLocalRef(arrayField);
    +            env->DeleteLocalRef(arr);
    +        }
    +        writer.close();
    +
    +        CarbonReader carbonReader;
    +        carbonReader.builder(env, path);
    +        carbonReader.build();
    +        int i = 0;
    +        CarbonRow carbonRow(env);
    +        while (carbonReader.hasNext()) {
    +            jobject row = carbonReader.readNextRow();
    +            i++;
    +            carbonRow.setCarbonRow(row);
    +            printf("%s\t%d\t%ld\t", carbonRow.getString(0), carbonRow.getInt(1), carbonRow.getLong(2));
    +            jobjectArray array1 = carbonRow.getArray(3);
    +            jsize length = env->GetArrayLength(array1);
    +            int j = 0;
    +            for (j = 0; j < length; j++) {
    +                jobject element = env->GetObjectArrayElement(array1, j);
    +                char *str = (char *) env->GetStringUTFChars((jstring) element, JNI_FALSE);
    +                printf("%s\t", str);
    +            }
    +            printf("%d\t", carbonRow.getShort(4));
    +            printf("%d\t", carbonRow.getInt(5));
    +            printf("%ld\t", carbonRow.getLong(6));
    +            printf("%lf\t", carbonRow.getDouble(7));
    +            bool bool1 = carbonRow.getBoolean(8);
    +            if (bool1) {
    +                printf("true\t");
    +            } else {
    +                printf("false\t");
    +            }
    +            printf("%f\t\n", carbonRow.getFloat(9));
    +            env->DeleteLocalRef(row);
    +        }
    +        carbonReader.close();
    +    } catch (jthrowable ex) {
    +        env->ExceptionDescribe();
    +        env->ExceptionClear();
    +    }
    +}
    +
    +/**
    + * test write data to S3
    + *
    + * @param env  jni env
    + * @return
    + */
    +bool writeToS3(JNIEnv *env, char *path, char *argv[]) {
    --- End diff --
   
    Just in FAQ document, add how to use writer and reader with S3a environment. In that just Mention about withHadoopConf() API .
    No need to add each time test case for s3 and normal. Only difference between this s3 test case and above testcase is calling withHadoopConf().
   
    @KanakaKumar @jackylk  check this.
   
    I see lot of duplicate test code for reader and writer in the name of s3 example. This is Redundant and to maintain and refactor in future.


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user CarbonDataQA commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    Build Failed  with Spark 2.3.1, Please check CI http://136.243.101.176:8080/job/carbondataprbuilder2.3/9342/



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user CarbonDataQA commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    Build Success with Spark 2.2.1, Please check CI http://95.216.28.178:8080/job/ApacheCarbonPRBuilder1/1290/



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user xubo245 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228705283
 
    --- Diff: store/CSDK/src/CarbonWriter.cpp ---
    @@ -0,0 +1,161 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF 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.
    + */
    +
    +#include <stdexcept>
    +#include "CarbonWriter.h"
    +
    +void CarbonWriter::builder(JNIEnv *env) {
    +    if (env == NULL) {
    +        throw std::runtime_error("JNIEnv parameter can't be NULL.");
    +    }
    +    jniEnv = env;
    +    carbonWriter = env->FindClass("org/apache/carbondata/sdk/file/CarbonWriter");
    +    if (carbonWriter == NULL) {
    +        throw std::runtime_error("Can't find the class in java: org/apache/carbondata/sdk/file/CarbonWriter");
    +    }
    +    jmethodID carbonWriterBuilderID = env->GetStaticMethodID(carbonWriter, "builder",
    +        "()Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (carbonWriterBuilderID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: carbonWriterBuilder");
    +    }
    +    carbonWriterBuilderObject = env->CallStaticObjectMethod(carbonWriter, carbonWriterBuilderID);
    +}
    +
    +bool CarbonWriter::checkBuilder() {
    +    if (carbonWriterBuilderObject == NULL) {
    +        throw std::runtime_error("carbonWriterBuilder Object can't be NULL. Please call builder method first.");
    +    }
    +}
    +
    +void CarbonWriter::outputPath(char *path) {
    +    if (path == NULL) {
    +        throw std::runtime_error("path parameter can't be NULL.");
    +    }
    +    checkBuilder();
    --- End diff --
   
    ok, done


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user xubo245 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228705294
 
    --- Diff: store/CSDK/src/CarbonWriter.cpp ---
    @@ -0,0 +1,161 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF 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.
    + */
    +
    +#include <stdexcept>
    +#include "CarbonWriter.h"
    +
    +void CarbonWriter::builder(JNIEnv *env) {
    +    if (env == NULL) {
    +        throw std::runtime_error("JNIEnv parameter can't be NULL.");
    +    }
    +    jniEnv = env;
    +    carbonWriter = env->FindClass("org/apache/carbondata/sdk/file/CarbonWriter");
    +    if (carbonWriter == NULL) {
    +        throw std::runtime_error("Can't find the class in java: org/apache/carbondata/sdk/file/CarbonWriter");
    +    }
    +    jmethodID carbonWriterBuilderID = env->GetStaticMethodID(carbonWriter, "builder",
    +        "()Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (carbonWriterBuilderID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: carbonWriterBuilder");
    +    }
    +    carbonWriterBuilderObject = env->CallStaticObjectMethod(carbonWriter, carbonWriterBuilderID);
    +}
    +
    +bool CarbonWriter::checkBuilder() {
    +    if (carbonWriterBuilderObject == NULL) {
    +        throw std::runtime_error("carbonWriterBuilder Object can't be NULL. Please call builder method first.");
    +    }
    +}
    +
    +void CarbonWriter::outputPath(char *path) {
    +    if (path == NULL) {
    +        throw std::runtime_error("path parameter can't be NULL.");
    +    }
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "outputPath",
    +        "(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: outputPath");
    +    }
    +    jstring jPath = jniEnv->NewStringUTF(path);
    +    jvalue args[1];
    +    args[0].l = jPath;
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +}
    +
    +void CarbonWriter::withCsvInput(char *jsonSchema) {
    +    if (jsonSchema == NULL) {
    +        throw std::runtime_error("jsonSchema parameter can't be NULL.");
    +    }
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "withCsvInput",
    +        "(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: withCsvInput");
    +    }
    +    jstring jPath = jniEnv->NewStringUTF(jsonSchema);
    +    jvalue args[1];
    +    args[0].l = jPath;
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +    if (jniEnv->ExceptionCheck()) {
    +        throw jniEnv->ExceptionOccurred();
    +    }
    +};
    +
    +void CarbonWriter::withHadoopConf(char *key, char *value) {
    +    if (key == NULL) {
    +        throw std::runtime_error("key parameter can't be NULL.");
    +    }
    +    if (value == NULL) {
    +        throw std::runtime_error("value parameter can't be NULL.");
    +    }
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "withHadoopConf",
    +        "(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: withHadoopConf");
    +    }
    +    jvalue args[2];
    +    args[0].l = jniEnv->NewStringUTF(key);
    +    args[1].l = jniEnv->NewStringUTF(value);
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +}
    +
    +void CarbonWriter::writtenBy(char *appName) {
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "writtenBy",
    +        "(Ljava/lang/String;)Lorg/apache/carbondata/sdk/file/CarbonWriterBuilder;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: writtenBy");
    +    }
    +    jvalue args[1];
    +    args[0].l = jniEnv->NewStringUTF(appName);
    +    carbonWriterBuilderObject = jniEnv->CallObjectMethodA(carbonWriterBuilderObject, methodID, args);
    +}
    +
    +void CarbonWriter::build() {
    +    checkBuilder();
    +    jclass carbonWriterBuilderClass = jniEnv->GetObjectClass(carbonWriterBuilderObject);
    +    jmethodID methodID = jniEnv->GetMethodID(carbonWriterBuilderClass, "build",
    +        "()Lorg/apache/carbondata/sdk/file/CarbonWriter;");
    +    if (methodID == NULL) {
    +        throw std::runtime_error("Can't find the method in java: build");
    +    }
    +    carbonWriterObject = jniEnv->CallObjectMethod(carbonWriterBuilderObject, methodID);
    +
    +    if (jniEnv->ExceptionCheck()) {
    +        throw jniEnv->ExceptionOccurred();
    +    }
    +}
    +
    +void CarbonWriter::write(jobject obj) {
    +    if (carbonWriterObject == NULL) {
    +        throw std::runtime_error("Please call build first.");
    +    }
    +    if (writeID == NULL) {
    +        carbonWriter = jniEnv->GetObjectClass(carbonWriterObject);
    +        writeID = jniEnv->GetMethodID(carbonWriter, "write", "(Ljava/lang/Object;)V");
    +        if (writeID == NULL) {
    +            throw std::runtime_error("Can't find the method in java: write");
    +        }
    +    }
    +    jvalue args[1];
    +    args[0].l = obj;
    +    jniEnv->CallBooleanMethodA(carbonWriterObject, writeID, args);
    +    if (jniEnv->ExceptionCheck()) {
    +        throw jniEnv->ExceptionOccurred();
    +    }
    +};
    +
    +jboolean CarbonWriter::close() {
    --- End diff --
   
    ok, done


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user xubo245 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228705323
 
    --- Diff: store/CSDK/test/main.cpp ---
    @@ -210,6 +212,288 @@ bool tryCatchException(JNIEnv *env) {
         }
         printf("\nfinished handle exception\n");
     }
    +
    +/**
    + * test write data to local disk
    + *
    + * @param env  jni env
    + * @param path file path
    + * @param argc argument counter
    + * @param argv argument vector
    + * @return true or throw exception
    + */
    +bool testWriteData(JNIEnv *env, char *path, int argc, char *argv[]) {
    +
    +    char *jsonSchema = "[{stringField:string},{shortField:short},{intField:int},{longField:long},{doubleField:double},{boolField:boolean},{dateField:date},{timeField:timestamp},{floatField:float},{arrayField:array}]";
    +    try {
    +        CarbonWriter writer;
    +        writer.builder(env);
    +        if (argc > 3) {
    +            writer.withHadoopConf("fs.s3a.access.key", argv[1]);
    +            writer.withHadoopConf("fs.s3a.secret.key", argv[2]);
    +            writer.withHadoopConf("fs.s3a.endpoint", argv[3]);
    +        }
    +        writer.outputPath(path);
    +        writer.withCsvInput(jsonSchema);
    +        writer.writtenBy("CSDK");
    +        writer.build();
    +
    +        int rowNum = 10;
    +        int size = 10;
    +        long longValue = 0;
    +        double doubleValue = 0;
    +        float floatValue = 0;
    +        jclass objClass = env->FindClass("java/lang/String");
    +        for (int i = 0; i < rowNum; ++i) {
    +            jobjectArray arr = env->NewObjectArray(size, objClass, 0);
    +            char ctrInt[10];
    +            gcvt(i, 10, ctrInt);
    +
    +            char a[15] = "robot";
    +            strcat(a, ctrInt);
    +            jobject stringField = env->NewStringUTF(a);
    +            env->SetObjectArrayElement(arr, 0, stringField);
    +
    +            char ctrShort[10];
    +            gcvt(i % 10000, 10, ctrShort);
    +            jobject shortField = env->NewStringUTF(ctrShort);
    +            env->SetObjectArrayElement(arr, 1, shortField);
    +
    +            jobject intField = env->NewStringUTF(ctrInt);
    +            env->SetObjectArrayElement(arr, 2, intField);
    +
    +
    +            char ctrLong[10];
    +            gcvt(longValue, 10, ctrLong);
    +            longValue = longValue + 2;
    +            jobject longField = env->NewStringUTF(ctrLong);
    +            env->SetObjectArrayElement(arr, 3, longField);
    +
    +            char ctrDouble[10];
    +            gcvt(doubleValue, 10, ctrDouble);
    +            doubleValue = doubleValue + 2;
    +            jobject doubleField = env->NewStringUTF(ctrDouble);
    +            env->SetObjectArrayElement(arr, 4, doubleField);
    +
    +            jobject boolField = env->NewStringUTF("true");
    +            env->SetObjectArrayElement(arr, 5, boolField);
    +
    +            jobject dateField = env->NewStringUTF(" 2019-03-02");
    +            env->SetObjectArrayElement(arr, 6, dateField);
    +
    +            jobject timeField = env->NewStringUTF("2019-02-12 03:03:34");
    +            env->SetObjectArrayElement(arr, 7, timeField);
    +
    +            char ctrFloat[10];
    +            gcvt(floatValue, 10, ctrFloat);
    +            floatValue = floatValue + 2;
    +            jobject floatField = env->NewStringUTF(ctrFloat);
    +            env->SetObjectArrayElement(arr, 8, floatField);
    +
    +            jobject arrayField = env->NewStringUTF("Hello#World#From#Carbon");
    +            env->SetObjectArrayElement(arr, 9, arrayField);
    +
    +
    +            writer.write(arr);
    +
    +            env->DeleteLocalRef(stringField);
    +            env->DeleteLocalRef(shortField);
    +            env->DeleteLocalRef(intField);
    +            env->DeleteLocalRef(longField);
    +            env->DeleteLocalRef(doubleField);
    +            env->DeleteLocalRef(floatField);
    +            env->DeleteLocalRef(dateField);
    +            env->DeleteLocalRef(timeField);
    +            env->DeleteLocalRef(boolField);
    +            env->DeleteLocalRef(arrayField);
    +            env->DeleteLocalRef(arr);
    +        }
    +        writer.close();
    +
    +        CarbonReader carbonReader;
    +        carbonReader.builder(env, path);
    +        carbonReader.build();
    +        int i = 0;
    +        CarbonRow carbonRow(env);
    +        while (carbonReader.hasNext()) {
    +            jobject row = carbonReader.readNextRow();
    +            i++;
    +            carbonRow.setCarbonRow(row);
    +            printf("%s\t%d\t%ld\t", carbonRow.getString(0), carbonRow.getInt(1), carbonRow.getLong(2));
    +            jobjectArray array1 = carbonRow.getArray(3);
    +            jsize length = env->GetArrayLength(array1);
    +            int j = 0;
    +            for (j = 0; j < length; j++) {
    +                jobject element = env->GetObjectArrayElement(array1, j);
    +                char *str = (char *) env->GetStringUTFChars((jstring) element, JNI_FALSE);
    +                printf("%s\t", str);
    +            }
    +            printf("%d\t", carbonRow.getShort(4));
    +            printf("%d\t", carbonRow.getInt(5));
    +            printf("%ld\t", carbonRow.getLong(6));
    +            printf("%lf\t", carbonRow.getDouble(7));
    +            bool bool1 = carbonRow.getBoolean(8);
    +            if (bool1) {
    +                printf("true\t");
    +            } else {
    +                printf("false\t");
    +            }
    +            printf("%f\t\n", carbonRow.getFloat(9));
    +            env->DeleteLocalRef(row);
    +        }
    +        carbonReader.close();
    +    } catch (jthrowable ex) {
    +        env->ExceptionDescribe();
    +        env->ExceptionClear();
    +    }
    +}
    +
    +/**
    + * test write data to S3
    + *
    + * @param env  jni env
    + * @return
    + */
    +bool writeToS3(JNIEnv *env, char *path, char *argv[]) {
    --- End diff --
   
    removed writeToS3.


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user CarbonDataQA commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    Build Success with Spark 2.1.0, Please check CI http://136.243.101.176:8080/job/ApacheCarbonPRBuilder2.1/1084/



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user CarbonDataQA commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    Build Success with Spark 2.1.0, Please check CI http://136.243.101.176:8080/job/ApacheCarbonPRBuilder2.1/1086/



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user CarbonDataQA commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    Build Success with Spark 2.2.1, Please check CI http://95.216.28.178:8080/job/ApacheCarbonPRBuilder1/1298/



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user CarbonDataQA commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    Build Success with Spark 2.3.1, Please check CI http://136.243.101.176:8080/job/carbondataprbuilder2.3/9350/



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata issue #2837: [CARBONDATA-3000] Provide C++ interface for writing ...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user ajantha-bhat commented on the issue:

    https://github.com/apache/carbondata/pull/2837
 
    LGTM


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user jackylk commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228715336
 
    --- Diff: store/CSDK/src/CarbonReader.h ---
    @@ -40,6 +40,19 @@ class CarbonReader {
          */
         jobject carbonReaderObject;
     
    +    /**
    +     * check whether has called builder
    --- End diff --
   
    can you improve this comment, suggest you write like "Return true if ...."


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user jackylk commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228715343
 
    --- Diff: store/CSDK/src/CarbonReader.h ---
    @@ -40,6 +40,19 @@ class CarbonReader {
          */
         jobject carbonReaderObject;
     
    +    /**
    +     * check whether has called builder
    +     *
    +     * @return true or throw exception
    +     */
    +    bool checkBuilder();
    +
    +    /**
    +     * check reader and whether has called build
    --- End diff --
   
    can you improve this comment, suggest you write like "Return true if ...."


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user xubo245 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228716774
 
    --- Diff: store/CSDK/src/CarbonReader.h ---
    @@ -40,6 +40,19 @@ class CarbonReader {
          */
         jobject carbonReaderObject;
     
    +    /**
    +     * check whether has called builder
    --- End diff --
   
    ok, done


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] carbondata pull request #2837: [CARBONDATA-3000] Provide C++ interface for w...

qiuchenjian-2
In reply to this post by qiuchenjian-2
Github user xubo245 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2837#discussion_r228716777
 
    --- Diff: store/CSDK/src/CarbonReader.h ---
    @@ -40,6 +40,19 @@ class CarbonReader {
          */
         jobject carbonReaderObject;
     
    +    /**
    +     * check whether has called builder
    +     *
    +     * @return true or throw exception
    +     */
    +    bool checkBuilder();
    +
    +    /**
    +     * check reader and whether has called build
    --- End diff --
   
    ok, done


---
123