diff -cr rhdb-admin/ChangeLog rhdb-admin.incr/ChangeLog *** rhdb-admin/ChangeLog 2004-06-09 01:34:47.000000000 -0400 --- rhdb-admin.incr/ChangeLog 2004-06-09 15:01:17.000000000 -0400 *************** *** 2,7 **** --- 2,18 ---- * src/com/redhat/rhdb/admin/CheckBoxPanel.java: Added intialization code for checkbox/boolean arrays to prevent NullPointerException's. + * src/com/redhat/rhdb/admin/CreateTableDialog.form: Changed by the + IDE. + * src/com/redhat/rhdb/admin/CreateTableDialog.java: Replaced + individual privilege checkboxes with the new PrivilegesCheckBoxPanel. + (adjustPrivilegeBoxes): Scaffolding function. Enabled/disables + privilege checkboxes as needed. + (adjustWithGrantBoxes): Scaffolding function. Enabled/disables + WITH GRANT OPTION checkboxes (if visible) as needed. + (addPrivilegeDef): Change function to work with the new + PrivilegesCheckBoxPanel widget. + (okAction): Ditto. * src/com/redhat/rhdb/admin/EditPrivilegesDialog.form: Changed by the IDE. * src/com/redhat/rhdb/admin/EditPrivilegesDialog.java: Added *************** *** 68,73 **** --- 79,86 ---- (getUpdateDatabasePrivString): Ditto. (getUpdateSchemaPrivString): Ditto. (getUpdateTablePrivString): Ditto. + * src/com/redhat/rhdb/admin/TableUpdate.java (createTable): Fixed + function to work with the new WITH GRANT OPTION option. * src/com/redhat/rhdb/admin/pgsql/AbstractRhdb73DatabaseMetaData.java (getDatabasePrivileges): Change function to return 2 more fields, GRANTOR and IS_GRANTABLE (as defined in JDBC specs for diff -cr rhdb-admin/src/com/redhat/rhdb/admin/CreateTableDialog.form rhdb-admin.incr/src/com/redhat/rhdb/admin/CreateTableDialog.form *** rhdb-admin/src/com/redhat/rhdb/admin/CreateTableDialog.form 2004-01-13 19:53:50.000000000 -0500 --- rhdb-admin.incr/src/com/redhat/rhdb/admin/CreateTableDialog.form 2004-06-09 14:27:54.000000000 -0400 *************** *** 1213,1218 **** --- 1213,1221 ---- + + + *************** *** 1233,1238 **** --- 1236,1244 ---- + + + *************** *** 1250,1255 **** --- 1256,1264 ---- + + + *************** *** 1262,1351 **** ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! --- 1271,1288 ---- ! ! ! ! ! ! ! ! diff -cr rhdb-admin/src/com/redhat/rhdb/admin/CreateTableDialog.java rhdb-admin.incr/src/com/redhat/rhdb/admin/CreateTableDialog.java *** rhdb-admin/src/com/redhat/rhdb/admin/CreateTableDialog.java 2003-11-21 13:30:22.000000000 -0500 --- rhdb-admin.incr/src/com/redhat/rhdb/admin/CreateTableDialog.java 2004-06-09 14:27:54.000000000 -0400 *************** *** 43,48 **** --- 43,61 ---- okAction = af.getAction(ActionFactory.ACTION_OK); cancelAction = af.getAction(ActionFactory.ACTION_CANCEL); + AdminDatabaseMetaData dbmd; + + try { + dbmd = backendClient.getAdminDatabaseMetaData(node.getParentClusterName(), node.getParentDatabaseName()); + validPrivileges = dbmd.getValidTablePrivileges(); + grantOptionString = dbmd.getGrantOptionString(); + } catch (Exception e) { + + closeDialog(); + e.printStackTrace(); + throw new DialogRaiseException(invocationNode, e); + } + initComponents(); // Add the listbox with 3 buttons... *************** *** 70,76 **** // Populate the fields in the dialog - AdminDatabaseMetaData dbmd; SchemaQualifiedSelectionBoxModel tabModel = new DefaultSchemaQualifiedSelectionBoxModel(); SchemaQualifiedSelectionBoxModel typModel = new DefaultSchemaQualifiedSelectionBoxModel(); --- 83,88 ---- *************** *** 368,380 **** jspPrivilegesGroups = new javax.swing.JScrollPane(); jlstPrivilegesGroups = new javax.swing.JList(); jpPrivilegesPrivilegeTypes = new javax.swing.JPanel(); ! jcbPrivilegesSelect = new javax.swing.JCheckBox(); ! jcbPrivilegesInsert = new javax.swing.JCheckBox(); ! jcbPrivilegesUpdate = new javax.swing.JCheckBox(); ! jcbPrivilegesDelete = new javax.swing.JCheckBox(); ! jcbPrivilegesRule = new javax.swing.JCheckBox(); ! jcbPrivilegesReferences = new javax.swing.JCheckBox(); ! jcbPrivilegesTrigger = new javax.swing.JCheckBox(); jlPrivilegesUsers = new javax.swing.JLabel(); jlPrivilegesGroups = new javax.swing.JLabel(); jbPrivilegesAddPrivileges = new javax.swing.JButton(); --- 380,386 ---- jspPrivilegesGroups = new javax.swing.JScrollPane(); jlstPrivilegesGroups = new javax.swing.JList(); jpPrivilegesPrivilegeTypes = new javax.swing.JPanel(); ! pcbpPriv = new PrivilegesCheckBoxPanel(validPrivileges, "", grantOptionString); jlPrivilegesUsers = new javax.swing.JLabel(); jlPrivilegesGroups = new javax.swing.JLabel(); jbPrivilegesAddPrivileges = new javax.swing.JButton(); *************** *** 1306,1311 **** --- 1312,1323 ---- jpPrivilegesPrivToGrant.setBorder(new javax.swing.border.TitledBorder(AdminResources.getString(AdminResources.DLG_CREATE_TABLE_PRIVILEGES_PRIV_TO_GRANT))); jcbPrivilegesPublic.setText(AdminResources.getString(AdminResources.PRIVILEGE_PUBLIC)); + jcbPrivilegesPublic.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jcbPrivilegesPublicActionPerformed(evt); + } + }); + gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 0); *************** *** 1313,1318 **** --- 1325,1336 ---- jlstPrivilegesUsers.setValueIsAdjusting(true); jlstPrivilegesUsers.setAutoscrolls(false); + jlstPrivilegesUsers.addListSelectionListener(new javax.swing.event.ListSelectionListener() { + public void valueChanged(javax.swing.event.ListSelectionEvent evt) { + jlstPrivilegesUsersValueChanged(evt); + } + }); + jspPrivilegesUsers.setViewportView(jlstPrivilegesUsers); gridBagConstraints = new java.awt.GridBagConstraints(); *************** *** 1326,1331 **** --- 1344,1355 ---- jlstPrivilegesGroups.setValueIsAdjusting(true); jlstPrivilegesGroups.setAutoscrolls(false); + jlstPrivilegesGroups.addListSelectionListener(new javax.swing.event.ListSelectionListener() { + public void valueChanged(javax.swing.event.ListSelectionEvent evt) { + jlstPrivilegesGroupsValueChanged(evt); + } + }); + jspPrivilegesGroups.setViewportView(jlstPrivilegesGroups); gridBagConstraints = new java.awt.GridBagConstraints(); *************** *** 1339,1406 **** jpPrivilegesPrivilegeTypes.setLayout(new java.awt.GridBagLayout()); - jcbPrivilegesSelect.setText(AdminResources.getString(AdminResources.PRIVILEGE_SELECT)); gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridx = 0; ! gridBagConstraints.gridy = 0; ! gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; ! gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; ! gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 10); ! jpPrivilegesPrivilegeTypes.add(jcbPrivilegesSelect, gridBagConstraints); ! ! jcbPrivilegesInsert.setText(AdminResources.getString(AdminResources.PRIVILEGE_INSERT)); ! gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridx = 0; ! gridBagConstraints.gridy = 1; ! gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; ! gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; ! gridBagConstraints.insets = new java.awt.Insets(1, 20, 0, 10); ! jpPrivilegesPrivilegeTypes.add(jcbPrivilegesInsert, gridBagConstraints); ! ! jcbPrivilegesUpdate.setText(AdminResources.getString(AdminResources.PRIVILEGE_UPDATE)); ! gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridx = 0; ! gridBagConstraints.gridy = 2; ! gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; ! gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; ! gridBagConstraints.insets = new java.awt.Insets(1, 20, 0, 10); ! jpPrivilegesPrivilegeTypes.add(jcbPrivilegesUpdate, gridBagConstraints); ! ! jcbPrivilegesDelete.setText(AdminResources.getString(AdminResources.PRIVILEGE_DELETE)); ! gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridx = 0; ! gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; ! gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; ! gridBagConstraints.insets = new java.awt.Insets(1, 20, 0, 10); ! jpPrivilegesPrivilegeTypes.add(jcbPrivilegesDelete, gridBagConstraints); ! ! jcbPrivilegesRule.setText(AdminResources.getString(AdminResources.PRIVILEGE_RULE)); ! gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridx = 0; ! gridBagConstraints.gridy = 4; ! gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; ! gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; ! gridBagConstraints.insets = new java.awt.Insets(1, 20, 0, 10); ! jpPrivilegesPrivilegeTypes.add(jcbPrivilegesRule, gridBagConstraints); ! ! jcbPrivilegesReferences.setText(AdminResources.getString(AdminResources.PRIVILEGE_REFERENCES)); ! gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridx = 0; ! gridBagConstraints.gridy = 5; ! gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; ! gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; ! gridBagConstraints.insets = new java.awt.Insets(1, 20, 0, 10); ! jpPrivilegesPrivilegeTypes.add(jcbPrivilegesReferences, gridBagConstraints); ! ! jcbPrivilegesTrigger.setText(AdminResources.getString(AdminResources.PRIVILEGE_TRIGGER)); ! gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridx = 0; ! gridBagConstraints.gridy = 6; ! gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; ! gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; ! gridBagConstraints.insets = new java.awt.Insets(1, 20, 0, 10); ! jpPrivilegesPrivilegeTypes.add(jcbPrivilegesTrigger, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; --- 1363,1373 ---- jpPrivilegesPrivilegeTypes.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); ! gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; ! gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); ! jpPrivilegesPrivilegeTypes.add(pcbpPriv, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; *************** *** 1533,1538 **** --- 1500,1545 ---- setBounds((screenSize.width-800)/2, (screenSize.height-635)/2, 800, 635); }//GEN-END:initComponents + private void jlstPrivilegesUsersValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jlstPrivilegesUsersValueChanged + adjustWithGrantBoxes(); + adjustPrivilegeBoxes(); + }//GEN-LAST:event_jlstPrivilegesUsersValueChanged + + private void jcbPrivilegesPublicActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jcbPrivilegesPublicActionPerformed + adjustWithGrantBoxes(); + adjustPrivilegeBoxes(); + }//GEN-LAST:event_jcbPrivilegesPublicActionPerformed + + private void jlstPrivilegesGroupsValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jlstPrivilegesGroupsValueChanged + adjustWithGrantBoxes(); + adjustPrivilegeBoxes(); + }//GEN-LAST:event_jlstPrivilegesGroupsValueChanged + + /** + * Adjusts privilege boxes (disables if no user/group/public is selected) + */ + + private void adjustPrivilegeBoxes() { + if (!jcbPrivilegesPublic.isSelected() && + jlstPrivilegesGroups.getSelectedIndices().length == 0 && + jlstPrivilegesUsers.getSelectedIndices().length == 0) { + pcbpPriv.setEnabled(false); + } else { + pcbpPriv.setEnabled(true); + } + } + + /** + * Adjusts the availability of the WITH GRANT OPTION checkboxes. + */ + + private void adjustWithGrantBoxes() { + if (jcbPrivilegesPublic.isSelected() || jlstPrivilegesGroups.getSelectedIndices().length > 0) + pcbpPriv.setSecondaryCBEnabled(false); + else + pcbpPriv.setSecondaryCBEnabled(true); + } + private void clearConstraintFields(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearConstraintFields // Add your handling code here: resetAllTCFields(); *************** *** 1641,1685 **** private int addPrivilegeDef(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addPrivilegeDef String selectedPrivileges = ""; boolean minPrivReceiversSpecified = false; ! if (jcbPrivilegesSelect.isSelected()) { ! selectedPrivileges += " SELECT"; ! } ! ! if (jcbPrivilegesInsert.isSelected()) { ! selectedPrivileges += " INSERT"; ! } ! ! if (jcbPrivilegesUpdate.isSelected()) { ! selectedPrivileges += " UPDATE"; ! } ! if (jcbPrivilegesDelete.isSelected()) { ! selectedPrivileges += " DELETE"; ! } ! if (jcbPrivilegesRule.isSelected()) { ! selectedPrivileges += " RULE"; } ! if (jcbPrivilegesReferences.isSelected()) { ! selectedPrivileges += " REFERENCES"; ! } ! if (jcbPrivilegesTrigger.isSelected()) { ! selectedPrivileges += " TRIGGER"; } ! // return if no privileges have been selected ! if (selectedPrivileges.length() == 0) { ! MessageBox.error(this, AdminResources.getString(AdminResources.WORD_ERROR), AdminResources.getString(AdminResources.DLG_CREATE_TABLE_ERR_PLS_SELECT_PRIVILEGE_TO_ADD)); return -1; } ! for (int i=0; i < jlstPrivilegesUsers.getSelectedValues().length; i++) { ! String toAdd = AdminMiscFunctions.getDoubleQuotedIdentifier((String) jlstPrivilegesUsers.getSelectedValues()[i]) + "(" + selectedPrivileges + ")"; ! ((DefaultListModel) jlstPrivileges.getModel()).addElement(toAdd); minPrivReceiversSpecified = true; } --- 1648,1695 ---- private int addPrivilegeDef(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addPrivilegeDef String selectedPrivileges = ""; + String selectedwithGrantPrivileges = ""; boolean minPrivReceiversSpecified = false; ! String[] selectedPrivStrings; ! selectedPrivStrings = pcbpPriv.getPrimaryOnlySelectedBoxes(); ! for (int i=0; i < selectedPrivStrings.length; i++) { ! selectedPrivileges += selectedPrivStrings[i]; ! ! if (i < selectedPrivStrings.length-1) ! selectedPrivileges += " "; } ! selectedPrivStrings = pcbpPriv.getSelectedSecondaryBoxes(); ! for (int i=0; i < selectedPrivStrings.length; i++) { ! selectedwithGrantPrivileges += selectedPrivStrings[i]; ! ! if (i < selectedPrivStrings.length-1) ! selectedwithGrantPrivileges += " "; } ! // return if no privileges have been selected ! if (selectedPrivileges.length() + selectedwithGrantPrivileges.length() == 0) { ! MessageBox.error(this, AdminResources.getString(AdminResources.WORD_ERROR), AdminResources.getString(AdminResources.DLG_CREATE_TABLE_ERR_PLS_SELECT_PRIVILEGE_TO_ADD)); return -1; } ! for (int i=0; i < jlstPrivilegesUsers.getSelectedValues().length; i++) { ! String toAdd; ! ! if (selectedPrivileges.length() > 0) { ! toAdd = AdminMiscFunctions.getDoubleQuotedIdentifier((String) jlstPrivilegesUsers.getSelectedValues()[i]) + "(" + selectedPrivileges + ")"; ! ((DefaultListModel) jlstPrivileges.getModel()).addElement(toAdd); ! } ! ! if (selectedwithGrantPrivileges.length() > 0) { ! toAdd = AdminMiscFunctions.getDoubleQuotedIdentifier((String) jlstPrivilegesUsers.getSelectedValues()[i]) + "(WITH GRANT OPTION " + selectedwithGrantPrivileges + ")"; ! ((DefaultListModel) jlstPrivileges.getModel()).addElement(toAdd); ! } ! minPrivReceiversSpecified = true; } *************** *** 1702,1720 **** // Clear all the checkboxes jcbPrivilegesPublic.setSelected(false); - jcbPrivilegesSelect.setSelected(false); - jcbPrivilegesUpdate.setSelected(false); - jcbPrivilegesInsert.setSelected(false); - jcbPrivilegesDelete.setSelected(false); - jcbPrivilegesRule.setSelected(false); - jcbPrivilegesReferences.setSelected(false); - jcbPrivilegesTrigger.setSelected(false); jlstPrivilegesUsers.getSelectionModel().clearSelection(); jlstPrivilegesGroups.getSelectionModel().clearSelection(); return 0; ! }//GEN-LAST:event_addPrivilegeDef private void enableTCForeignKeyFields(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_enableTCForeignKeyFields --- 1712,1724 ---- // Clear all the checkboxes + pcbpPriv.reset(); jcbPrivilegesPublic.setSelected(false); jlstPrivilegesUsers.getSelectionModel().clearSelection(); jlstPrivilegesGroups.getSelectionModel().clearSelection(); return 0; ! }//GEN-LAST:event_addPrivilegeDef private void enableTCForeignKeyFields(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_enableTCForeignKeyFields *************** *** 2353,2361 **** // if privileges are defined but not added ! if (jcbPrivilegesSelect.isSelected() || jcbPrivilegesInsert.isSelected() || jcbPrivilegesUpdate.isSelected() || jcbPrivilegesDelete.isSelected() ! || jcbPrivilegesRule.isSelected() || jcbPrivilegesReferences.isSelected() || jcbPrivilegesTrigger.isSelected()) { ! int i= JOptionPane.showConfirmDialog( this, --- 2357,2363 ---- // if privileges are defined but not added ! if (pcbpPriv.getPrimaryOnlySelectedBoxes().length + pcbpPriv.getSelectedSecondaryBoxes().length != 0) { int i= JOptionPane.showConfirmDialog( this, *************** *** 2895,2900 **** --- 2897,2905 ---- ConstraintColumnChooserDialog cccdTCPKConsColChooser; ConstraintColumnChooserDialog cccdTCUConsColChooser; + String[] validPrivileges = new String[0]; + String grantOptionString = ""; + // Variables declaration - do not modify//GEN-BEGIN:variables private com.redhat.rhdb.admin.AdminComboBox acbCCCheckTime; private com.redhat.rhdb.admin.AdminComboBox acbCCDeferrable; *************** *** 2923,2936 **** private javax.swing.JButton jbTCAddTC; private javax.swing.JButton jbTCClearFields; private javax.swing.JButton jbUnique; - private javax.swing.JCheckBox jcbPrivilegesDelete; - private javax.swing.JCheckBox jcbPrivilegesInsert; private javax.swing.JCheckBox jcbPrivilegesPublic; - private javax.swing.JCheckBox jcbPrivilegesReferences; - private javax.swing.JCheckBox jcbPrivilegesRule; - private javax.swing.JCheckBox jcbPrivilegesSelect; - private javax.swing.JCheckBox jcbPrivilegesTrigger; - private javax.swing.JCheckBox jcbPrivilegesUpdate; private javax.swing.JLabel jlCCCheckTime; private javax.swing.JLabel jlCCConstraintName; private javax.swing.JLabel jlCCDeferrable; --- 2928,2934 ---- *************** *** 3009,3014 **** --- 3007,3013 ---- private javax.swing.JTextField jtfTCPrimaryKey; private javax.swing.JTextField jtfTCUnique; private javax.swing.JTabbedPane jtpCreateOptionTabs; + private com.redhat.rhdb.admin.PrivilegesCheckBoxPanel pcbpPriv; private com.redhat.rhdb.admin.SchemaQualifiedSelectionBox sqsbCCRefTable; private com.redhat.rhdb.admin.SchemaQualifiedSelectionBox sqsbDataType; private com.redhat.rhdb.admin.SchemaQualifiedSelectionBox sqsbTCRefTable; diff -cr rhdb-admin/src/com/redhat/rhdb/admin/PrivilegesCheckBoxPanel.java rhdb-admin.incr/src/com/redhat/rhdb/admin/PrivilegesCheckBoxPanel.java *** rhdb-admin/src/com/redhat/rhdb/admin/PrivilegesCheckBoxPanel.java 2004-06-09 01:51:41.000000000 -0400 --- rhdb-admin.incr/src/com/redhat/rhdb/admin/PrivilegesCheckBoxPanel.java 2004-06-09 13:47:10.000000000 -0400 *************** *** 531,537 **** hasSecondaryCBEnabled = enabled; for (int i=0; i < jchSecondaryButtons.length; i++) { jchSecondaryButtons[i].setSelected(false); ! jchSecondaryButtons[i].setEnabled(enabled); } } --- 531,537 ---- hasSecondaryCBEnabled = enabled; for (int i=0; i < jchSecondaryButtons.length; i++) { jchSecondaryButtons[i].setSelected(false); ! jchSecondaryButtons[i].setEnabled(jchButtons[i].isSelected() && enabled); } } diff -cr rhdb-admin/src/com/redhat/rhdb/admin/TableUpdate.java rhdb-admin.incr/src/com/redhat/rhdb/admin/TableUpdate.java *** rhdb-admin/src/com/redhat/rhdb/admin/TableUpdate.java 2004-05-04 13:07:57.000000000 -0400 --- rhdb-admin.incr/src/com/redhat/rhdb/admin/TableUpdate.java 2004-06-09 14:33:24.000000000 -0400 *************** *** 117,123 **** String user = grantLine.substring(0, grantLine.lastIndexOf('(')); String privilegesToGrant = grantLine.substring((grantLine.lastIndexOf('(') + 1), (grantLine.length() - 1)); ! String[] privilegeComponents = privilegesToGrant.trim().split(" "); if (privilegeComponents.length == 0 || privilegeComponents[0].equals("")) continue; --- 117,141 ---- String user = grantLine.substring(0, grantLine.lastIndexOf('(')); String privilegesToGrant = grantLine.substring((grantLine.lastIndexOf('(') + 1), (grantLine.length() - 1)); ! boolean isWithGrant = false; ! String grantOptionString = ""; ! String[] privilegeComponents; ! ! // WITH GRANT OPTION marker ! ! String withGrantOptionMarker = "WITH GRANT OPTION "; ! ! isWithGrant = privilegesToGrant.startsWith(withGrantOptionMarker); ! ! if (isWithGrant) { ! // Skip the "WITH GRANT OPTION" marker ! ! privilegesToGrant = privilegesToGrant.substring(withGrantOptionMarker.length()); ! grantOptionString = " WITH GRANT OPTION "; ! privilegeComponents = privilegesToGrant.trim().split(" "); ! } else { ! privilegeComponents = privilegesToGrant.trim().split(" "); ! } if (privilegeComponents.length == 0 || privilegeComponents[0].equals("")) continue; *************** *** 127,135 **** for (int j=1; j < privilegeComponents.length; j++) privilegesGrantString += ", " + privilegeComponents[j]; ! privilegesString += " GRANT " + privilegesGrantString + " ON TABLE " + tableName + " TO " + user + ";\n"; } ! try { client.performUpdate((String) parameters.get(PARAM_CLUSTER_NAME), (String) parameters.get(PARAM_DB_NAME), "BEGIN"); --- 145,153 ---- for (int j=1; j < privilegeComponents.length; j++) privilegesGrantString += ", " + privilegeComponents[j]; ! privilegesString += " GRANT " + privilegesGrantString + " ON TABLE " + tableName + " TO " + user + grantOptionString + ";\n"; } ! try { client.performUpdate((String) parameters.get(PARAM_CLUSTER_NAME), (String) parameters.get(PARAM_DB_NAME), "BEGIN");