blob: 1a3c187af5672d209b2fe2c568cc0bc642fb04fc [file] [log] [blame]
// **********************************************************************
// @@@ START COPYRIGHT @@@
//
// 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.
//
// @@@ END COPYRIGHT @@@
// **********************************************************************
// ===========================================================================
// ===== The HiveClient_JNI class implements access to the Java
// ===== HiveClient class.
// ===========================================================================
#ifndef HIVE_CLIENT_H
#define HIVE_CLIENT_H
#include <list>
#include "JavaObjectInterface.h"
typedef enum {
HVC_OK = JOI_OK
,HVC_FIRST = JOI_LAST
,HVC_DONE = HVC_FIRST
,HVC_ERROR_INIT_PARAM
,HVC_ERROR_INIT_EXCEPTION
,HVC_ERROR_CLOSE_EXCEPTION
,HVC_ERROR_EXISTS_PARAM
,HVC_ERROR_EXISTS_EXCEPTION
,HVC_ERROR_GET_REDEFTIME_PARAM
,HVC_ERROR_GET_REDEFTIME_EXCEPTION
,HVC_ERROR_GET_ALLSCH_EXCEPTION
,HVC_ERROR_GET_ALLTBL_PARAM
,HVC_ERROR_GET_ALLTBL_EXCEPTION
,HVC_ERROR_EXECUTE_HIVE_SQL_PARAM
,HVC_ERROR_EXECUTE_HIVE_SQL_EXCEPTION
,HVC_ERROR_GET_HVT_INFO_PARAM
,HVC_ERROR_GET_HVT_INFO_EXCEPTION
,HVC_ERROR_GET_HIVE_TABLE_INFO_ERROR
,HVC_ERROR_POPULATE_SDS_ERROR
,HVC_LAST
} HVC_RetCode;
class HiveClient_JNI : public JavaObjectInterface
{
public:
static HiveClient_JNI* newInstance(NAHeap *heap, HVC_RetCode &retCode);
static HiveClient_JNI* getInstance();
static void deleteInstance();
// Destructor
virtual ~HiveClient_JNI();
// Initialize JVM and all the JNI configuration.
// Must be called.
HVC_RetCode init();
HVC_RetCode initConnection();
bool isConnected()
{
return isConnected_;
}
HVC_RetCode close();
static HVC_RetCode exists(const char* schName, const char* tabName);
HVC_RetCode getHiveTableInfo(const char* schName, const char* tabName, NABoolean readPartnInfo);
static HVC_RetCode getHiveTableParameters(const char *schName, const char *tabName,
Text& hiveParamsStr);
static HVC_RetCode getRedefTime(const char* schName, const char* tabName,
Int64& redefTime);
static HVC_RetCode getAllSchemas(NAHeap *heap, LIST(Text *)& schNames);
static HVC_RetCode getAllTables(NAHeap *heap, const char* schName, LIST(Text *)& tblNames);
static HVC_RetCode executeHiveSQL(const char* hiveSQL);
// Get the error description.
static char* getErrorText(HVC_RetCode errEnum);
static void logIt(const char* str);
void setTableInfo(jobjectArray tableInfo, jobjectArray colInfo, jobjectArray partKeyInfo,
jobjectArray bucketCols, jobjectArray sortCols, jintArray sortColsOrder, jobjectArray paramsKeys, jobjectArray paramsValue,
jobjectArray partNames, jobjectArray partKeyValues);
void cleanupTableInfo();
HVC_RetCode getHiveTableDesc(NAHeap *heap, hive_tbl_desc *&hiveTableDesc);
private:
// Private Default constructor
HiveClient_JNI(NAHeap *heap)
: JavaObjectInterface(heap)
, isConnected_(FALSE)
{
tableInfo_ = NULL;
colInfo_ = NULL;
partKeyInfo_ = NULL;
bucketCols_ = NULL;
sortCols_ = NULL;
sortColsOrder_ = NULL;
paramsKeys_ = NULL;
paramsValues_ = NULL;
partNames_ = NULL;
partKeyValues_ = NULL;
}
private:
HVC_RetCode populateSD(NAHeap *heap, Int64 creationTs, hive_sd_desc* &sd);
HVC_RetCode populateColumns(NAHeap *heap, hive_column_desc* &columns);
HVC_RetCode populatePartKeyColumns(NAHeap *heap, hive_pkey_desc* &partKeyDesc);
HVC_RetCode populateSortColumns(NAHeap *heap, hive_skey_desc* &sortKeyDesc);
HVC_RetCode populateBucketColumns(NAHeap *heap, hive_bkey_desc* &bucketKeyDesc);
HVC_RetCode populateTableParams(NAHeap *heap, hive_sd_desc *sd, hive_tblparams_desc* &tblparamsDesc);
enum JAVA_METHODS {
JM_CTOR = 0
,JM_INIT
,JM_CLOSE
,JM_EXISTS
,JM_GET_RDT
,JM_GET_ASH
,JM_GET_ATL
,JM_EXEC_HIVE_SQL
,JM_GET_HVT_INFO
,JM_LAST
};
static jclass javaClass_;
static JavaMethodInit* JavaMethods_;
static bool javaMethodsInitialized_;
// this mutex protects both JaveMethods_ and javaClass_ initialization
static pthread_mutex_t javaMethodsInitMutex_;
bool isConnected_;
jobjectArray tableInfo_;
jobjectArray colInfo_;
jobjectArray partKeyInfo_;
jobjectArray bucketCols_;
jobjectArray sortCols_;
jintArray sortColsOrder_;
jobjectArray paramsKeys_;
jobjectArray paramsValues_;
jobjectArray partNames_;
jobjectArray partKeyValues_;
};
#endif