From 124c0b4cf8c51a5430470d8dad47411694173f38 Mon Sep 17 00:00:00 2001 From: sinthuja Date: Mon, 19 Jun 2017 23:05:05 +0530 Subject: [PATCH] Fixing issues related to oracle database. --- .../mgt/core/dao/impl/GroupDAOImpl.java | 37 ++++++++++++++----- .../mgt/dao/impl/GenericOperationDAOImpl.java | 12 +++--- .../mgt/dao/impl/OperationMappingDAOImpl.java | 7 ++-- .../core/search/mgt/impl/ProcessorImpl.java | 17 +++++---- .../search/mgt/impl/QueryBuilderImpl.java | 31 ++++++++-------- .../impl/feature/GenericFeatureDAOImpl.java | 31 +++++++++------- .../main/resources/dbscripts/cdm/oracle.sql | 2 +- 7 files changed, 81 insertions(+), 56 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/GroupDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/GroupDAOImpl.java index 7d9947a421..f57a26886e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/GroupDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/GroupDAOImpl.java @@ -19,6 +19,7 @@ package org.wso2.carbon.device.mgt.core.dao.impl; import org.wso2.carbon.device.mgt.common.Device; +import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; import org.wso2.carbon.device.mgt.common.GroupPaginationRequest; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; import org.wso2.carbon.device.mgt.core.dao.GroupDAO; @@ -60,7 +61,7 @@ public class GroupDAOImpl implements GroupDAO { return groupId; } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while adding deviceGroup '" + - deviceGroup.getName() + "'", e); + deviceGroup.getName() + "'", e); } finally { GroupManagementDAOUtil.cleanupResources(stmt, null); } @@ -83,7 +84,7 @@ public class GroupDAOImpl implements GroupDAO { stmt.executeUpdate(); } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while updating deviceGroup '" + - deviceGroup.getName() + "'", e); + deviceGroup.getName() + "'", e); } finally { GroupManagementDAOUtil.cleanupResources(stmt, null); } @@ -148,7 +149,7 @@ public class GroupDAOImpl implements GroupDAO { } } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while obtaining information of Device Group '" + - groupId + "'", e); + groupId + "'", e); } finally { GroupManagementDAOUtil.cleanupResources(stmt, resultSet); } @@ -204,7 +205,12 @@ public class GroupDAOImpl implements GroupDAO { hasOwner = true; } if (hasLimit) { - sql += " LIMIT ?, ?"; + if (conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE) || + conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL)) { + sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + } else { + sql += " LIMIT ?, ?"; + } } int paramIndex = 1; @@ -267,7 +273,12 @@ public class GroupDAOImpl implements GroupDAO { } sql += ")"; if (hasLimit) { - sql += " LIMIT ?, ?"; + if (conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE) || + conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL)) { + sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + } else { + sql += " LIMIT ?, ?"; + } } int paramIndex = 1; @@ -513,7 +524,13 @@ public class GroupDAOImpl implements GroupDAO { " DM_DEVICE d, (" + "SELECT dgm.DEVICE_ID FROM DM_DEVICE_GROUP_MAP dgm WHERE dgm.GROUP_ID = ?) dgm1 " + "WHERE d.ID = dgm1.DEVICE_ID AND d.TENANT_ID = ?) gd, DM_DEVICE_TYPE t " + - "WHERE gd.DEVICE_TYPE_ID = t.ID) d1 WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ? , ?"; + "WHERE gd.DEVICE_TYPE_ID = t.ID) d1 WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ?"; + if (conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE) || + conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL)) { + sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + } else { + sql += " LIMIT ?, ?"; + } stmt = conn.prepareStatement(sql); stmt.setInt(1, groupId); @@ -531,7 +548,7 @@ public class GroupDAOImpl implements GroupDAO { } } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while retrieving information of all " + - "registered devices", e); + "registered devices", e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -728,7 +745,7 @@ public class GroupDAOImpl implements GroupDAO { } } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while getting own groups of user '" - + username + "'", e); + + username + "'", e); } finally { GroupManagementDAOUtil.cleanupResources(stmt, resultSet); } @@ -753,7 +770,7 @@ public class GroupDAOImpl implements GroupDAO { } } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while getting own groups of user '" - + username + "'", e); + + username + "'", e); } finally { GroupManagementDAOUtil.cleanupResources(stmt, resultSet); } @@ -778,7 +795,7 @@ public class GroupDAOImpl implements GroupDAO { } } catch (SQLException e) { throw new GroupManagementDAOException("Error occurred while getting own groups count of user '" - + username + "'", e); + + username + "'", e); } finally { GroupManagementDAOUtil.cleanupResources(stmt, resultSet); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java index 9b0c6cb2cd..71d86d4224 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java @@ -320,12 +320,12 @@ public class GenericOperationDAOImpl implements OperationDAO { "de.DEVICE_ID, d.DEVICE_IDENTIFICATION, \n" + "d.DEVICE_TYPE_ID, dt.NAME AS DEVICE_TYPE_NAME, eom.STATUS, eom.CREATED_TIMESTAMP, \n" + "eom.UPDATED_TIMESTAMP, op.OPERATION_CODE, op.TYPE AS OPERATION_TYPE, dor.OPERATION_RESPONSE, \n" + - "dor.RECEIVED_TIMESTAMP FROM DM_ENROLMENT_OP_MAPPING AS eom \n" + - "INNER JOIN DM_OPERATION AS op ON op.ID=eom.OPERATION_ID\n" + - "INNER JOIN DM_ENROLMENT AS de ON de.ID=eom.ENROLMENT_ID\n" + - "INNER JOIN DM_DEVICE AS d ON d.ID=de.DEVICE_ID \n" + - "INNER JOIN DM_DEVICE_TYPE AS dt ON dt.ID=d.DEVICE_TYPE_ID\n" + - "LEFT JOIN DM_DEVICE_OPERATION_RESPONSE AS dor ON dor.ENROLMENT_ID=de.id \n" + + "dor.RECEIVED_TIMESTAMP FROM DM_ENROLMENT_OP_MAPPING eom \n" + + "INNER JOIN DM_OPERATION op ON op.ID=eom.OPERATION_ID\n" + + "INNER JOIN DM_ENROLMENT de ON de.ID=eom.ENROLMENT_ID\n" + + "INNER JOIN DM_DEVICE d ON d.ID=de.DEVICE_ID \n" + + "INNER JOIN DM_DEVICE_TYPE dt ON dt.ID=d.DEVICE_TYPE_ID\n" + + "LEFT JOIN DM_DEVICE_OPERATION_RESPONSE dor ON dor.ENROLMENT_ID=de.id \n" + "AND dor.OPERATION_ID = eom.OPERATION_ID\n" + "WHERE eom.OPERATION_ID = ? AND de.TENANT_ID = ?"; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/OperationMappingDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/OperationMappingDAOImpl.java index 82f2cd66e7..04446c882d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/OperationMappingDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/OperationMappingDAOImpl.java @@ -148,11 +148,12 @@ public class OperationMappingDAOImpl implements OperationMappingDAO { //devices to be active at that moment. Hence filtering by 'ACTIVE' & 'UNREACHABLE' device states. String sql = "SELECT ENROLMENT_ID, D.DEVICE_IDENTIFICATION AS DEVICE_IDENTIFIER, MIN(CREATED_TIMESTAMP) " + "AS CREATED_TIMESTAMP, E.STATUS AS ENROLMENT_STATUS, E.TENANT_ID FROM " + - "DM_ENROLMENT_OP_MAPPING AS OP INNER JOIN DM_ENROLMENT E ON OP.ENROLMENT_ID = E.ID INNER JOIN " + + "DM_ENROLMENT_OP_MAPPING OP INNER JOIN DM_ENROLMENT E ON OP.ENROLMENT_ID = E.ID INNER JOIN " + "DM_DEVICE D ON E.DEVICE_ID = D.ID WHERE " + "OP.STATUS IN ('"+ Operation.Status.PENDING.name() + "','" + Operation.Status.REPEATED.name() + "') " + "AND OP.CREATED_TIMESTAMP BETWEEN ? AND ? AND E.STATUS IN ('" + EnrolmentInfo.Status.ACTIVE.name() + - "','" + EnrolmentInfo.Status.UNREACHABLE.name() + "') AND D.DEVICE_TYPE_ID = ? GROUP BY ENROLMENT_ID"; + "','" + EnrolmentInfo.Status.UNREACHABLE.name() + "') AND D.DEVICE_TYPE_ID = ? GROUP BY " + + "ENROLMENT_ID, D.DEVICE_IDENTIFICATION,E.STATUS, E.TENANT_ID"; stmt = conn.prepareStatement(sql); stmt.setLong(1, maxDuration); stmt.setLong(2, minDuration); @@ -182,7 +183,7 @@ public class OperationMappingDAOImpl implements OperationMappingDAO { //We are specifically looking for operation mappings in 'Pending' & 'Repeated' states. Further we want //devices to be active at that moment. Hence filtering by 'ACTIVE' & 'UNREACHABLE' device states. String sql = "SELECT OP.ENROLMENT_ID AS EID, MAX(OP.UPDATED_TIMESTAMP) AS LAST_CONNECTED_TIME FROM " + - "DM_ENROLMENT_OP_MAPPING AS OP INNER JOIN DM_ENROLMENT E ON OP.ENROLMENT_ID = E.ID INNER JOIN " + + "DM_ENROLMENT_OP_MAPPING OP INNER JOIN DM_ENROLMENT E ON OP.ENROLMENT_ID = E.ID INNER JOIN " + "DM_DEVICE D ON E.DEVICE_ID = D.ID WHERE " + "OP.STATUS = '" + Operation.Status.COMPLETED.name() + "'" + "AND OP.UPDATED_TIMESTAMP >= ? AND E.STATUS IN ('" + EnrolmentInfo.Status.ACTIVE.name() + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java index b2c779c037..40f9346338 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java @@ -23,6 +23,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException; import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService; @@ -62,7 +63,7 @@ public class ProcessorImpl implements Processor { @Override public List execute(SearchContext searchContext) throws SearchMgtException { - if(!Utils.validateOperators(searchContext.getConditions())){ + if (!Utils.validateOperators(searchContext.getConditions())) { throw new SearchMgtException("Invalid validator is provided."); } @@ -268,10 +269,10 @@ public class ProcessorImpl implements Processor { } else if (type.getColumnType().equals(ValueType.columnType.INTEGER)) { stmt.setInt(x, type.getIntValue()); x++; - } else if (type.getColumnType().equals(ValueType.columnType.LONG)){ + } else if (type.getColumnType().equals(ValueType.columnType.LONG)) { stmt.setLong(x, type.getLongValue()); x++; - } else if(type.getColumnType().equals(ValueType.columnType.DOUBLE)){ + } else if (type.getColumnType().equals(ValueType.columnType.DOUBLE)) { stmt.setDouble(x, type.getDoubleValue()); x++; } @@ -360,8 +361,9 @@ public class ProcessorImpl implements Processor { try { conn = this.getConnection(); String query = "SELECT * FROM DM_DEVICE_INFO WHERE DEVICE_ID IN ("; - if (conn.getMetaData().getDatabaseProductName().contains("H2") || conn.getMetaData() - .getDatabaseProductName().contains("MySQL")) { + if (conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2) || conn.getMetaData() + .getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL) || + conn.getMetaData().getDatabaseProductName().contains(DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE)) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < devices.size(); i++) { builder.append("?,"); @@ -374,8 +376,9 @@ public class ProcessorImpl implements Processor { } else { query += "?) ORDER BY DEVICE_ID"; stmt = conn.prepareStatement(query); - Array array = conn.createArrayOf("INT", Utils.getArrayOfDeviceIds(devices)); - stmt.setArray(1, array); + for (int i = 0; i < devices.size(); i++) { + stmt.setInt(i, devices.get(i).getId()); + } } rs = stmt.executeQuery(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java index 936f8f68f1..04d52bf514 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java @@ -113,13 +113,12 @@ public class QueryBuilderImpl implements QueryBuilder { queries.put(Constants.LOCATION, this.processLocation(locCondition)); } - if (log.isDebugEnabled()) { - log.debug("General Query : " + queries.get(Constants.GENERAL)); - log.debug("Property with AND Query : " + queries.get(Constants.PROP_AND)); - log.debug("Property with OR Query : " + queries.get(Constants.PROP_OR)); - log.debug("Location related Query : " + queries.get(Constants.LOCATION)); - } - +// if (log.isDebugEnabled()) { + log.info("General Query : " + queries.get(Constants.GENERAL)); + log.info("Property with AND Query : " + queries.get(Constants.PROP_AND)); + log.info("Property with OR Query : " + queries.get(Constants.PROP_OR)); + log.info("Location related Query : " + queries.get(Constants.LOCATION)); +// } return queries; } @@ -342,10 +341,10 @@ public class QueryBuilderImpl implements QueryBuilder { "DD.SSID, DD.CPU_USAGE, DD.TOTAL_RAM_MEMORY, DD.AVAILABLE_RAM_MEMORY, \n" + "DD.PLUGGED_IN, DD.UPDATE_TIMESTAMP, DL.LATITUDE, DL.LONGITUDE, DL.STREET1, DL.STREET2, DL.CITY, DL.ZIP, \n" + "DL.STATE, DL.COUNTRY, DL.UPDATE_TIMESTAMP AS DL_UPDATED_TIMESTAMP, DE.OWNER, DE.OWNERSHIP, DE.STATUS " + - "AS DE_STATUS FROM DM_DEVICE_DETAIL AS DD INNER JOIN DM_DEVICE AS D ON D.ID=DD.DEVICE_ID\n" + - "LEFT JOIN DM_DEVICE_LOCATION AS DL ON DL.DEVICE_ID=D.ID \n" + - "INNER JOIN DM_DEVICE_TYPE AS DT ON DT.ID=D.DEVICE_TYPE_ID\n" + - "INNER JOIN DM_ENROLMENT AS DE ON D.ID=DE.DEVICE_ID\n" + + "AS DE_STATUS FROM DM_DEVICE_DETAIL DD INNER JOIN DM_DEVICE D ON D.ID=DD.DEVICE_ID\n" + + "LEFT JOIN DM_DEVICE_LOCATION DL ON DL.DEVICE_ID=D.ID \n" + + "INNER JOIN DM_DEVICE_TYPE DT ON DT.ID=D.DEVICE_TYPE_ID\n" + + "INNER JOIN DM_ENROLMENT DE ON D.ID=DE.DEVICE_ID\n" + "WHERE D.TENANT_ID = ? "; ValueType type = new ValueType(); @@ -370,11 +369,11 @@ public class QueryBuilderImpl implements QueryBuilder { "DD.PLUGGED_IN, DD.UPDATE_TIMESTAMP, DL.LATITUDE, DL.LONGITUDE, DL.STREET1, DL.STREET2, DL.CITY, DL.ZIP, \n" + "DL.STATE, DL.COUNTRY, DL.UPDATE_TIMESTAMP AS DL_UPDATED_TIMESTAMP, DI.KEY_FIELD, DI.VALUE_FIELD, \n" + "DE.OWNER, DE.OWNERSHIP, DE.STATUS AS DE_STATUS " + - "FROM DM_DEVICE_DETAIL AS DD INNER JOIN DM_DEVICE AS D ON D.ID=DD.DEVICE_ID\n" + - "LEFT JOIN DM_DEVICE_LOCATION AS DL ON DL.DEVICE_ID=D.ID \n" + - "INNER JOIN DM_DEVICE_TYPE AS DT ON DT.ID=D.DEVICE_TYPE_ID\n" + - "INNER JOIN DM_ENROLMENT AS DE ON D.ID=DE.DEVICE_ID\n" + - "LEFT JOIN DM_DEVICE_INFO AS DI ON DI.DEVICE_ID=D.ID\n" + + "FROM DM_DEVICE_DETAIL DD INNER JOIN DM_DEVICE D ON D.ID=DD.DEVICE_ID\n" + + "LEFT JOIN DM_DEVICE_LOCATION DL ON DL.DEVICE_ID=D.ID \n" + + "INNER JOIN DM_DEVICE_TYPE DT ON DT.ID=D.DEVICE_TYPE_ID\n" + + "INNER JOIN DM_ENROLMENT DE ON D.ID=DE.DEVICE_ID\n" + + "LEFT JOIN DM_DEVICE_INFO DI ON DI.DEVICE_ID=D.ID\n" + "WHERE D.TENANT_ID = ? "; ValueType type = new ValueType(); diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/feature/GenericFeatureDAOImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/feature/GenericFeatureDAOImpl.java index 371fe39a9d..aa81dd75f0 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/feature/GenericFeatureDAOImpl.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/feature/GenericFeatureDAOImpl.java @@ -38,8 +38,7 @@ import java.util.List; * FeatureDAO implementation for DB engines with ANSI SQL support. */ public final class GenericFeatureDAOImpl extends AbstractFeatureDAO { - - private static final Log log = LogFactory.getLog(GenericFeatureDAOImpl.class); + private static final int BATCH_SIZE = 10; @Override public List addProfileFeatures(List features, int profileId) throws @@ -54,31 +53,36 @@ public final class GenericFeatureDAOImpl extends AbstractFeatureDAO { conn = this.getConnection(); String query = "INSERT INTO DM_PROFILE_FEATURES (PROFILE_ID, FEATURE_CODE, DEVICE_TYPE, CONTENT, " + "TENANT_ID) VALUES (?, ?, ?, ?, ?)"; - stmt = conn.prepareStatement(query, new String[] {"id"}); - + stmt = conn.prepareStatement(query, new String[]{"id"}); + int noRecords = 0; for (ProfileFeature feature : features) { stmt.setInt(1, profileId); stmt.setString(2, feature.getFeatureCode()); stmt.setString(3, feature.getDeviceType()); - // if (conn.getMetaData().getDriverName().contains("H2")) { - // stmt.setBytes(4, PolicyManagerUtil.getBytes(feature.getContent())); - // } else { - stmt.setBytes(4, PolicyManagerUtil.getBytes(feature.getContent())); - //} + stmt.setBytes(4, PolicyManagerUtil.getBytes(feature.getContent())); stmt.setInt(5, tenantId); stmt.addBatch(); - //Not adding the logic to check the size of the stmt and execute if the size records added is over 1000 + noRecords++; + if (noRecords >= BATCH_SIZE && noRecords % BATCH_SIZE == 0) { + stmt.executeBatch(); + generatedKeys = stmt.getGeneratedKeys(); + int i = noRecords - BATCH_SIZE; + while (generatedKeys.next()) { + features.get(i).setId(generatedKeys.getInt(1)); + i++; + } + } } stmt.executeBatch(); - generatedKeys = stmt.getGeneratedKeys(); int i = 0; - + if (noRecords > BATCH_SIZE) { + i = noRecords - BATCH_SIZE; + } while (generatedKeys.next()) { features.get(i).setId(generatedKeys.getInt(1)); i++; } - } catch (SQLException | IOException e) { throw new FeatureManagerDAOException("Error occurred while adding the feature list to the database.", e); } finally { @@ -90,4 +94,5 @@ public final class GenericFeatureDAOImpl extends AbstractFeatureDAO { private Connection getConnection() throws FeatureManagerDAOException { return PolicyManagementDAOFactory.getConnection(); } + } \ No newline at end of file diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql index 31b7d60fe4..7a29dd47c4 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql @@ -49,7 +49,7 @@ CREATE TABLE DM_ROLE_GROUP_MAP ( GROUP_ID NUMBER(10) DEFAULT NULL, ROLE VARCHAR2(45) DEFAULT NULL, TENANT_ID NUMBER(10) DEFAULT 0, - CONSTRAINT PK_DM_GROUP PRIMARY KEY (ID), + CONSTRAINT PK_DM_ROLE_GROUP PRIMARY KEY (ID), CONSTRAINT fk_DM_ROLE_GROUP_MAP_GROUP2 FOREIGN KEY (GROUP_ID) REFERENCES DM_GROUP (ID) )