diff --git a/org.talend.commons.runtime/src/messages.properties b/org.talend.commons.runtime/src/messages.properties
index 3b09e5bbf2..c987fa7d76 100644
--- a/org.talend.commons.runtime/src/messages.properties
+++ b/org.talend.commons.runtime/src/messages.properties
@@ -8,6 +8,8 @@ DB2ForZosResultSet.unknowCloumn=Invalid argument\: unknown column name
SybaseResultSet.outofRange=\ is out of range.
SybaseResultSet.parameterIndex=Invalid argument\: parameter index
SybaseResultSet.unknowCloumn=Invalid argument\: unknown column name
+AbstractFakeResultSet.unknowCloumn=Invalid argument\: {0} is unknown column name
+AbstractFakeResultSet.parameterIndexOutOfRange=Invalid argument\: parameter index {0} is out of range
EntryLocation.returnTableName={tableName={0}, columnName={1}}
ExceptionHandler.Parameter.BeNull=ex param cannot be null
ExtensionImplementationProviders.ExtensionPointError=Extension point must authoriez a single instance
diff --git a/org.talend.commons.runtime/src/org/talend/commons/utils/database/AbstractFakeDatabaseMetaData.java b/org.talend.commons.runtime/src/org/talend/commons/utils/database/AbstractFakeDatabaseMetaData.java
new file mode 100644
index 0000000000..c7f75592f4
--- /dev/null
+++ b/org.talend.commons.runtime/src/org/talend/commons/utils/database/AbstractFakeDatabaseMetaData.java
@@ -0,0 +1,54 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.utils.database;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.talend.fakejdbc.FakeDatabaseMetaData;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ *
+ * $Id: talend.epf 55206 2011-02-15 17:32:14Z mhirt $
+ *
+ */
+public abstract class AbstractFakeDatabaseMetaData extends FakeDatabaseMetaData {
+
+ protected static final String[] TABLE_META = { "ID", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE", "REMARKS" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+
+ protected static final String[] COLUMN_META = { "TABLE_NAME", "COLUMN_NAME", "TYPE_NAME", "COLUMN_SIZE", "DECIMAL_DIGITS", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ "NUM_PREC_RADIX", "IS_NULLABLE", "REMARKS", "COLUMN_DEF" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+ private Connection connection;
+
+ /**
+ *
+ * DOC ggu AbstractFakeDatabaseMetaData constructor comment.
+ *
+ * @param connection
+ */
+ public AbstractFakeDatabaseMetaData(Connection connection) {
+ this.connection = connection;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeDatabaseMetaData#getConnection()
+ */
+ @Override
+ public Connection getConnection() throws SQLException {
+ return connection;
+ }
+}
diff --git a/org.talend.commons.runtime/src/org/talend/commons/utils/database/AbstractFakeResultSet.java b/org.talend.commons.runtime/src/org/talend/commons/utils/database/AbstractFakeResultSet.java
new file mode 100644
index 0000000000..bc3fa29cea
--- /dev/null
+++ b/org.talend.commons.runtime/src/org/talend/commons/utils/database/AbstractFakeResultSet.java
@@ -0,0 +1,137 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.utils.database;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.talend.commons.i18n.internal.Messages;
+import org.talend.commons.utils.TalendDBUtils;
+import org.talend.fakejdbc.FakeResultSet;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ *
+ * $Id: talend.epf 55206 2011-02-15 17:32:14Z mhirt $
+ *
+ */
+public abstract class AbstractFakeResultSet extends FakeResultSet {
+
+ private String[] tableMeta = new String[0];
+
+ private List data = new ArrayList();;
+
+ int index = -1;
+
+ public AbstractFakeResultSet() {
+ super();
+ }
+
+ public void setMetadata(String[] tableMeta) {
+ this.tableMeta = tableMeta;
+
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeResultSet#next()
+ */
+ @Override
+ public boolean next() throws SQLException {
+ if (data == null || data.size() == 0 || index >= data.size() - 1) {
+ return false;
+ }
+ index++;
+ return true;
+ }
+
+ protected int indexOf(String string, String[] search) {
+ for (int i = 0; i < search.length; i++) {
+ if (search[i].equals(string)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeResultSet#getString(java.lang.String)
+ */
+ @Override
+ public String getString(String columnLabel) throws SQLException {
+ int columnIndex = indexOf(columnLabel, tableMeta);
+
+ if (columnIndex == -1) {
+ throw new SQLException(Messages.getString("AbstractFakeResultSet.unknowCloumn", columnLabel)); //$NON-NLS-1$
+ }
+
+ return getString(columnIndex + 1);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeResultSet#getInt(java.lang.String)
+ */
+ @Override
+ public int getInt(String columnLabel) throws SQLException {
+ String str = getString(columnLabel);
+ if (columnLabel.equals("TYPE_NAME")) {
+ int index = TalendDBUtils.convertToJDBCType(str);
+ return index;
+ } else if (columnLabel.equals("IS_NULLABLE")) {
+ if (str.equals("N")) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else {
+ return Integer.parseInt(str);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeResultSet#getBoolean(java.lang.String)
+ */
+ @Override
+ public boolean getBoolean(String columnLabel) throws SQLException {
+ String str = getString(columnLabel);
+ return Boolean.parseBoolean(str);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeResultSet#getString(int)
+ */
+ @Override
+ public String getString(int columnIndex) throws SQLException {
+ String[] row = data.get(index);
+ columnIndex--;
+
+ if (columnIndex < 0 || columnIndex > row.length) {
+ throw new SQLException(Messages.getString("AbstractFakeResultSet.parameterIndexOutOfRange", columnIndex)); //$NON-NLS-1$
+ }
+ return row[columnIndex];
+ }
+}
diff --git a/org.talend.commons.runtime/src/org/talend/commons/utils/database/EmbeddedHiveResultSet.java b/org.talend.commons.runtime/src/org/talend/commons/utils/database/EmbeddedHiveResultSet.java
new file mode 100644
index 0000000000..d711745e2a
--- /dev/null
+++ b/org.talend.commons.runtime/src/org/talend/commons/utils/database/EmbeddedHiveResultSet.java
@@ -0,0 +1,66 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.utils.database;
+
+import java.sql.SQLException;
+import java.sql.Types;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ *
+ * $Id: talend.epf 55206 2011-02-15 17:32:14Z mhirt $
+ *
+ */
+public class EmbeddedHiveResultSet extends AbstractFakeResultSet {
+
+ /**
+ * DOC ggu EmbeddedHiveResultSet constructor comment.
+ */
+ public EmbeddedHiveResultSet() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.AbstractFakeResultSet#getInt(java.lang.String)
+ */
+ @Override
+ public int getInt(String columnLabel) throws SQLException {
+ if ("DATA_TYPE".equals(columnLabel)) {
+ String sqlType = getString("TYPE_NAME");
+ if (sqlType.trim().equalsIgnoreCase("TINYINT") || sqlType.trim().equalsIgnoreCase("SMALLINT")) { //$NON-NLS-1$
+ return Types.SMALLINT;
+ } else if (sqlType.trim().equalsIgnoreCase("INT")) { //$NON-NLS-1$
+ return Types.INTEGER;
+ } else if (sqlType.trim().equalsIgnoreCase("BIGINT")) { //$NON-NLS-1$
+ return Types.BIGINT;
+ } else if (sqlType.trim().equalsIgnoreCase("BOOLEAN")) { //$NON-NLS-1$
+ return Types.BOOLEAN;
+ } else if (sqlType.trim().equalsIgnoreCase("FLOAT")) { //$NON-NLS-1$
+ return Types.FLOAT;
+ } else if (sqlType.trim().equalsIgnoreCase("DOUBLE")) { //$NON-NLS-1$
+ return Types.DOUBLE;
+ } else if (sqlType.trim().equalsIgnoreCase("STRING")) { //$NON-NLS-1$
+ return Types.VARCHAR;
+ } else if (sqlType.trim().equalsIgnoreCase("BINARY")) { //$NON-NLS-1$
+ return Types.BINARY;
+ } else if (sqlType.trim().equalsIgnoreCase("TIMESTAMP")) { //$NON-NLS-1$
+ return Types.TIMESTAMP;
+ }
+ }
+ // TODO Auto-generated method stub
+ return super.getInt(columnLabel);
+ }
+
+}
diff --git a/org.talend.commons.runtime/src/org/talend/commons/utils/database/HiveDatabaseMetaData.java b/org.talend.commons.runtime/src/org/talend/commons/utils/database/HiveDatabaseMetaData.java
new file mode 100644
index 0000000000..9b000e36dc
--- /dev/null
+++ b/org.talend.commons.runtime/src/org/talend/commons/utils/database/HiveDatabaseMetaData.java
@@ -0,0 +1,42 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.utils.database;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.talend.fakejdbc.FakeDatabaseMetaData;
+
+/**
+ *
+ * Created by Marvin Wang on Nov 29, 2012.
+ */
+public class HiveDatabaseMetaData extends FakeDatabaseMetaData {
+
+ private Connection connection;
+
+ private DatabaseMetaData metaData;
+
+ public HiveDatabaseMetaData(Connection connection) throws SQLException {
+ this.connection = connection;
+ metaData = connection.getMetaData();
+ }
+
+ @Override
+ public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException {
+ return this.metaData.getTables(catalog, schemaPattern, tableNamePattern, types);
+ }
+
+}
diff --git a/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/HiveConfKeysForTalend.java b/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/HiveConfKeysForTalend.java
index 5cd4d93568..38ed566b07 100644
--- a/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/HiveConfKeysForTalend.java
+++ b/org.talend.core.runtime/src/main/java/org/talend/core/database/conn/HiveConfKeysForTalend.java
@@ -40,7 +40,10 @@ public enum HiveConfKeysForTalend {
HIVE_CONF_KEY_HIVE_METASTORE_URI("hive.metastore.uris"), //$NON-NLS-1$
- HIVE_CONF_KEY_HIVE_METASTORE_EXECUTE_SETUGI("hive.metastore.execute.setugi"); //$NON-NLS-1$
+ HIVE_CONF_KEY_HIVE_METASTORE_EXECUTE_SETUGI("hive.metastore.execute.setugi"), //$NON-NLS-1$
+
+ HIVE_CONF_KEY_TALEND_HIVE_MODE("talend.hive.mode"), //$NON-NLS-1$
+ ;
private String key;
diff --git a/org.talend.metadata.managment.ui/src/main/java/org/talend/repository/ui/utils/ManagerConnection.java b/org.talend.metadata.managment.ui/src/main/java/org/talend/repository/ui/utils/ManagerConnection.java
index 108b57b5fa..97a722755a 100644
--- a/org.talend.metadata.managment.ui/src/main/java/org/talend/repository/ui/utils/ManagerConnection.java
+++ b/org.talend.metadata.managment.ui/src/main/java/org/talend/repository/ui/utils/ManagerConnection.java
@@ -168,6 +168,7 @@ public class ManagerConnection {
} catch (Exception e) {
isValide = false;
messageException = e.getMessage();
+ ExceptionHandler.process(e);
}
return isValide;
}
@@ -182,6 +183,9 @@ public class ManagerConnection {
private List fetchJarRequiredByMetastoreDB(IMetadataConnection metadataConn) {
String jars = (String) metadataConn.getParameter(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_DRIVER_JAR);
List requiredJars = new ArrayList();
+ if (jars == null) {
+ return requiredJars;
+ }
if (jars.contains(";")) { //$NON-NLS-1$
String[] splittedPath = jars.split(";"); //$NON-NLS-1$
for (String jarName : splittedPath) {
diff --git a/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/DBConnectionFillerImpl.java b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/DBConnectionFillerImpl.java
index 98698ae5eb..3459d54e2e 100644
--- a/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/DBConnectionFillerImpl.java
+++ b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/DBConnectionFillerImpl.java
@@ -48,6 +48,7 @@ import org.talend.core.model.metadata.builder.database.ExtractMetaDataFromDataBa
import org.talend.core.model.metadata.builder.database.ExtractMetaDataFromDataBase.ETableTypes;
import org.talend.core.model.metadata.builder.database.ExtractMetaDataUtils;
import org.talend.core.model.metadata.builder.database.TableInfoParameters;
+import org.talend.core.model.metadata.builder.database.hive.EmbeddedHiveDataBaseMetadata;
import org.talend.core.model.metadata.builder.util.DatabaseConstant;
import org.talend.core.model.metadata.builder.util.MetadataConnectionUtils;
import org.talend.core.repository.model.ProxyRepositoryFactory;
@@ -1342,7 +1343,8 @@ public class DBConnectionFillerImpl extends MetadataFillerImpl {
// Null able
int nullable = 0;
- if (dbJDBCMetadata instanceof DB2ForZosDataBaseMetadata || dbJDBCMetadata instanceof TeradataDataBaseMetadata) {
+ if (dbJDBCMetadata instanceof DB2ForZosDataBaseMetadata || dbJDBCMetadata instanceof TeradataDataBaseMetadata
+ || dbJDBCMetadata instanceof EmbeddedHiveDataBaseMetadata) {
String isNullable = columns.getString("IS_NULLABLE");//$NON-NLS-1$
if (!isNullable.equals("Y")) { //$NON-NLS-1$
nullable = 1;
diff --git a/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/ExtractMetaDataUtils.java b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/ExtractMetaDataUtils.java
index ecfc0dd0c6..bffe996c4b 100644
--- a/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/ExtractMetaDataUtils.java
+++ b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/ExtractMetaDataUtils.java
@@ -53,6 +53,7 @@ import org.talend.core.IManagementService;
import org.talend.core.IService;
import org.talend.core.database.EDatabase4DriverClassName;
import org.talend.core.database.EDatabaseTypeName;
+import org.talend.core.database.conn.HiveConfKeysForTalend;
import org.talend.core.database.conn.template.EDatabaseConnTemplate;
import org.talend.core.database.conn.version.EDatabaseVersion4Drivers;
import org.talend.core.model.general.Project;
@@ -61,6 +62,7 @@ import org.talend.core.model.metadata.MetadataConnection;
import org.talend.core.model.metadata.builder.ConvertionHelper;
import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
import org.talend.core.model.metadata.builder.connection.MetadataColumn;
+import org.talend.core.model.metadata.builder.database.hive.EmbeddedHiveDataBaseMetadata;
import org.talend.core.model.metadata.builder.util.MetadataConnectionUtils;
import org.talend.core.model.metadata.types.JavaTypesManager;
import org.talend.core.prefs.ITalendCorePrefConstants;
@@ -172,6 +174,10 @@ public class ExtractMetaDataUtils {
DatabaseMetaData dbMetaData = null;
if (conn != null) {
try {
+ // FIXME, maybe, it's not good way, need check later.
+ final boolean isHiveEmbedded = Boolean.parseBoolean(System
+ .getProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_TALEND_HIVE_MODE.getKey()));
+
// MOD sizhaoliu 2012-5-21 TDQ-4884
if (MSSQL_CONN_CLASS.equals(conn.getClass().getName())) {
dbMetaData = createJtdsDatabaseMetaData(conn);
@@ -187,6 +193,8 @@ public class ExtractMetaDataUtils {
} else if (EDatabaseTypeName.SYBASEASE.getDisplayName().equals(dbType)
|| SYBASE_DATABASE_PRODUCT_NAME.equals(dbType)) {
dbMetaData = createSybaseFakeDatabaseMetaData(conn);
+ } else if (EDatabaseTypeName.HIVE.getDisplayName().equals(dbType) && isHiveEmbedded) {
+ dbMetaData = new EmbeddedHiveDataBaseMetadata(conn);
} else {
dbMetaData = conn.getMetaData();
}
@@ -202,12 +210,17 @@ public class ExtractMetaDataUtils {
}
public static boolean needFakeDatabaseMetaData(String dbType, boolean isSqlMode) {
+ // FIXME, maybe, it's not good way, need check later.
+ final boolean isHiveEmbedded = Boolean.parseBoolean(System
+ .getProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_TALEND_HIVE_MODE.getKey()));
if (EDatabaseTypeName.IBMDB2ZOS.getXmlName().equals(dbType)) {
return true;
} else if (EDatabaseTypeName.TERADATA.getXmlName().equals(dbType) && isSqlMode) {
return true;
} else if (EDatabaseTypeName.SAS.getXmlName().equals(dbType)) {
return true;
+ } else if (EDatabaseTypeName.HIVE.getDisplayName().equals(dbType) && isHiveEmbedded) {
+ return true;
}
return false;
}
diff --git a/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/JavaSqlFactory.java b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/JavaSqlFactory.java
index b5ccc51aca..7dffd8773e 100644
--- a/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/JavaSqlFactory.java
+++ b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/JavaSqlFactory.java
@@ -29,6 +29,7 @@ import org.talend.core.model.metadata.builder.connection.MDMConnection;
import org.talend.core.model.metadata.builder.database.dburl.SupportDBUrlStore;
import org.talend.core.model.metadata.builder.database.dburl.SupportDBUrlType;
import org.talend.core.model.metadata.builder.util.MetadataConnectionUtils;
+import org.talend.core.model.metadata.connection.hive.HiveConnVersionInfo;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.cwm.helper.ConnectionHelper;
import org.talend.cwm.helper.SwitchHelpers;
@@ -353,8 +354,8 @@ public final class JavaSqlFactory {
}
/**
- * Just for hive pre-setup, some configurations are required to set up to the properties of system. Added by Marvin
- * Wang on Nov 22, 2012.(Just a reminder: TDQ-6462)
+ * Just for hive pre-setup, some configurations are required to set up to the properties of system. It is just for
+ * Hive embedded mode.Added by Marvin Wang on Nov 22, 2012.(Just a reminder: TDQ-6462)
*
* @param conn
*/
@@ -363,11 +364,11 @@ public final class JavaSqlFactory {
DatabaseConnection dbConn = (DatabaseConnection) conn;
// TODO with thrift way, we must enable the two parameters below whereas in JDBC way, we don't need it.
// If metastore is local or not.
- // System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_HIVE_METASTORE_LOCAL.getKey(), "false"); //$NON-NLS-1$
+ System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_HIVE_METASTORE_LOCAL.getKey(), "false"); //$NON-NLS-1$
// metastore uris
- // String thriftURL = "thrift://" + dbConn.getServerName() + ":" + dbConn.getPort(); //$NON-NLS-1$//$NON-NLS-2$
- // System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_HIVE_METASTORE_URI.getKey(), thriftURL);
+ String thriftURL = "thrift://" + dbConn.getServerName() + ":" + dbConn.getPort(); //$NON-NLS-1$//$NON-NLS-2$
+ System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_HIVE_METASTORE_URI.getKey(), thriftURL);
System.setProperty("hive.metastore.warehouse.dir", "/user/hive/warehouse"); //$NON-NLS-1$ //$NON-NLS-2$
// ugi
System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_HIVE_METASTORE_EXECUTE_SETUGI.getKey(), "true"); //$NON-NLS-1$
@@ -380,19 +381,27 @@ public final class JavaSqlFactory {
System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_MAPRED_JOB_TRACKER.getKey(),
dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_JOB_TRACKER_URL));
+ // hive mode for talend
+ String hiveMode = dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_HIVE_MODE);
+ if (HiveConnVersionInfo.MODE_EMBEDDED.getKey().equals(hiveMode)) {
+ System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_TALEND_HIVE_MODE.getKey(), "true"); //$NON-NLS-1$
+ } else {
+ System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_TALEND_HIVE_MODE.getKey(), "false"); //$NON-NLS-1$
+ }
// For metastore infos.
// url
- System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_URL.getKey(),
- dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_URL));
- // user name
- System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_USERNAME.getKey(),
- dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_USERNAME));
- // password
- System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_PASSWORD.getKey(),
- dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_PASSWORD));
- // driver name
- System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_DRIVERNAME.getKey(), dbConn.getParameters()
- .get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_DRIVER_NAME));
+ // System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_URL.getKey(),
+ // dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_URL));
+ // // user name
+ // System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_USERNAME.getKey(),
+ // dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_USERNAME));
+ // // password
+ // System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_PASSWORD.getKey(),
+ // dbConn.getParameters().get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_PASSWORD));
+ // // driver name
+ // System.setProperty(HiveConfKeysForTalend.HIVE_CONF_KEY_JDO_CONNECTION_DRIVERNAME.getKey(),
+ // dbConn.getParameters()
+ // .get(ConnParameterKeys.CONN_PARA_KEY_METASTORE_CONN_DRIVER_NAME));
}
}
diff --git a/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/hive/EmbeddedHiveDataBaseMetadata.java b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/hive/EmbeddedHiveDataBaseMetadata.java
new file mode 100644
index 0000000000..0e71f493b5
--- /dev/null
+++ b/org.talend.metadata.managment/src/main/java/org/talend/core/model/metadata/builder/database/hive/EmbeddedHiveDataBaseMetadata.java
@@ -0,0 +1,258 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.core.model.metadata.builder.database.hive;
+
+import java.lang.reflect.Method;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.talend.commons.utils.database.AbstractFakeDatabaseMetaData;
+import org.talend.commons.utils.database.EmbeddedHiveResultSet;
+import org.talend.core.database.EDatabaseTypeName;
+import org.talend.core.model.metadata.builder.database.HotClassLoader;
+import org.talend.core.model.metadata.builder.database.JDBCDriverLoader;
+import org.talend.utils.sql.metadata.constants.GetTable;
+import org.talend.utils.sql.metadata.constants.MetaDataConstants;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ *
+ * $Id: talend.epf 55206 2011-02-15 17:32:14Z mhirt $
+ *
+ */
+@SuppressWarnings({ "unchecked", "rawtypes" })
+public class EmbeddedHiveDataBaseMetadata extends AbstractFakeDatabaseMetaData {
+
+ private static final String TABLE_TYPE = "TABLE";
+
+ private static final String HIVE_SCHEMA_DEFAULT = "default";
+
+ private Object hiveObject;
+
+ /**
+ * DOC ggu HiveDataBaseMetadata constructor comment.
+ */
+ public EmbeddedHiveDataBaseMetadata(Connection connection) {
+ super(connection);
+
+ }
+
+ private void init() throws SQLException {
+ // System.setProperty("hive.metastore.uris", "thrift://192.168.30.128:9083");
+ // System.setProperty("hive.metastore.local", "false");
+ if (hiveObject == null) {
+ JDBCDriverLoader loader = new JDBCDriverLoader();
+ HotClassLoader classLoader = loader.getHotClassLoaderFromCache(EDatabaseTypeName.HIVE.getXmlName(), "EMBEDDED");
+
+ try {
+ Class calss = Class.forName("org.apache.hadoop.hive.ql.metadata.Hive", true, classLoader); //$NON-NLS-1$
+ Method closeCurrentMethod = calss.getDeclaredMethod("closeCurrent"); //$NON-NLS-1$
+ closeCurrentMethod.invoke(null);
+
+ Method hiveGetMethod = calss.getDeclaredMethod("get"); //$NON-NLS-1$
+
+ hiveObject = hiveGetMethod.invoke(null);
+ } catch (Exception e) {
+ throw new SQLException(e);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeDatabaseMetaData#getSchemas()
+ */
+ @Override
+ public ResultSet getSchemas() throws SQLException {
+ return new EmbeddedHiveResultSet();
+ }
+
+ @Override
+ public String getDatabaseProductName() throws SQLException {
+ // TODO Auto-generated method stub
+ return EDatabaseTypeName.HIVE.getDisplayName();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.fakejdbc.FakeDatabaseMetaData#getCatalogs()
+ */
+ @Override
+ public ResultSet getCatalogs() throws SQLException {
+ EmbeddedHiveResultSet resultSet = new EmbeddedHiveResultSet();
+ resultSet.setMetadata(new String[] { MetaDataConstants.TABLE_CAT.name() });
+ List list = new ArrayList();
+ list.add(new String[] { HIVE_SCHEMA_DEFAULT });
+ resultSet.setData(list);
+ return resultSet;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeDatabaseMetaData#getPrimaryKeys(java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException {
+ return new EmbeddedHiveResultSet();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeDatabaseMetaData#getTableTypes()
+ */
+ @Override
+ public ResultSet getTableTypes() throws SQLException {
+
+ List list = new ArrayList();
+ list.add(new String[] { TABLE_TYPE });
+
+ EmbeddedHiveResultSet tableResultSet = new EmbeddedHiveResultSet();
+ tableResultSet.setMetadata(new String[] { GetTable.TABLE_TYPE.name() });
+ tableResultSet.setData(list);
+
+ return tableResultSet;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeDatabaseMetaData#getExportedKeys(java.lang.String, java.lang.String,
+ * java.lang.String)
+ */
+ @Override
+ public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException {
+ return new EmbeddedHiveResultSet();
+ }
+
+ @Override
+ public boolean supportsSchemasInDataManipulation() throws SQLException {
+ return false; // FIXME, need check
+ }
+
+ @Override
+ public boolean supportsSchemasInTableDefinitions() throws SQLException {
+ return false; // FIXME, need check
+ }
+
+ @Override
+ public boolean supportsSchemasInIndexDefinitions() throws SQLException {
+ return false; // FIXME, need check
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeDatabaseMetaData#getTables(java.lang.String, java.lang.String,
+ * java.lang.String, java.lang.String[])
+ */
+ @Override
+ public ResultSet getTables(String catalog, String schema, String tableNamePattern, String[] types) throws SQLException {
+ init();
+
+ EmbeddedHiveResultSet tableResultSet = new EmbeddedHiveResultSet();
+ tableResultSet.setMetadata(TABLE_META);
+ List list = new ArrayList();
+ tableResultSet.setData(list);
+
+ if (hiveObject != null) { // got the hive object
+ try {
+ Class hiveClass = hiveObject.getClass();
+ Method getAllTablesMethod = hiveClass.getDeclaredMethod("getAllTables");//$NON-NLS-1$
+ Object tables = getAllTablesMethod.invoke(hiveObject);
+ if (tables instanceof List) {
+ List tableList = (List) tables;
+ for (String tableName : tableList) {
+ String[] array = new String[] { "", HIVE_SCHEMA_DEFAULT, tableName, TABLE_TYPE, "" };
+ list.add(array);
+ }
+ }
+ } catch (Exception e) {
+ throw new SQLException(e);
+ }
+
+ }
+ return tableResultSet;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.utils.database.FakeDatabaseMetaData#getColumns(java.lang.String, java.lang.String,
+ * java.lang.String, java.lang.String)
+ */
+
+ @Override
+ public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
+ throws SQLException {
+ init();
+
+ EmbeddedHiveResultSet tableResultSet = new EmbeddedHiveResultSet();
+ tableResultSet.setMetadata(COLUMN_META);
+ List list = new ArrayList();
+ tableResultSet.setData(list);
+
+ if (hiveObject != null) { // got the hive object
+ try {
+ Class hiveClass = hiveObject.getClass();
+ Method getTableMethod = hiveClass.getDeclaredMethod("getTable", String.class);//$NON-NLS-1$
+ Object table = getTableMethod.invoke(hiveObject, tableNamePattern);
+
+ if (table != null) {
+ Class tableClass = table.getClass();
+ Method getAllColsMethod = tableClass.getDeclaredMethod("getAllCols");//$NON-NLS-1$
+ Object cols = getAllColsMethod.invoke(table);
+ if (cols instanceof List) {
+ List colsList = (List) cols;
+ for (Object colObj : colsList) {
+ Class fieldSchemaClass = colObj.getClass();
+
+ // col name
+ Method getNameMethod = fieldSchemaClass.getDeclaredMethod("getName");
+ Object nameObj = getNameMethod.invoke(colObj);
+ final String colName = nameObj != null ? nameObj.toString() : "";
+
+ // col type
+ Method getTypeMethod = fieldSchemaClass.getDeclaredMethod("getType");
+ Object typeObj = getTypeMethod.invoke(colObj);
+ final String coltype = typeObj != null ? typeObj.toString() : "";
+
+ // col comment
+ Method getCommentMethod = fieldSchemaClass.getDeclaredMethod("getComment");
+ Object commentObj = getCommentMethod.invoke(colObj);
+ final String colComment = commentObj != null ? commentObj.toString() : "";
+
+ final int colSize = -1; // FIXME, need check.
+ final int colPrecision = 0; // FIXME, need check.
+ final int colRedix = 0; // FIXME, need check.
+ String[] array = new String[] { tableNamePattern, colName, coltype, String.valueOf(colSize),
+ String.valueOf(colPrecision), String.valueOf(colRedix), "NO", colComment, "" };
+ list.add(array);
+ }
+ }
+ }
+
+ } catch (Exception e) {
+ throw new SQLException(e);
+ }
+ }
+ return tableResultSet;
+ }
+}