Index: src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/extract/ExtractProcedure.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/extract/ExtractProcedure.java b/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/extract/ExtractProcedure.java --- a/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/extract/ExtractProcedure.java (revision 59895) +++ b/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/extract/ExtractProcedure.java (date 1685975001919) @@ -25,6 +25,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -2556,6 +2557,144 @@ finally { AQCommonUtils.close(rs); } + } /*** Below - Should add more details ****/ + else if (connSettings.isBigQuery()) { + Statement stmt = null; + ResultSet rs = null; + try { + stmt = conn.createStatement(); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT r.routine_name "); + sql.append(", r.specific_name "); + sql.append(", r.created"); + sql.append(", r.last_altered"); + sql.append(", p.parameter_name "); + sql.append(", p.data_type "); + sql.append(", p.parameter_mode "); + sql.append(", p.ordinal_position "); + sql.append("FROM `"); + sql.append(schema); + sql.append("`.`INFORMATION_SCHEMA`.`ROUTINES` r "); + sql.append("LEFT JOIN `"); + sql.append(schema); + sql.append("`.`INFORMATION_SCHEMA`.`PARAMETERS` p "); + sql.append("ON r.specific_catalog = p.specific_catalog "); + sql.append("AND r.specific_schema = p.specific_schema "); + sql.append("AND r.specific_name = p.specific_name "); + sql.append("WHERE r.routine_type="); + sql.append("'PROCEDURE'"); + sql.append("AND r.specific_schema = '" + schema + "' "); + sql.append("ORDER BY r.routine_name, p.ordinal_position "); + + rs = stmt.executeQuery(sql.toString()); + if (rs != null) { + String previous_routine_name = ""; + String routine_name = ""; + String specific_name = ""; + String created = ""; + String last_altered = ""; + String parameter_name = ""; + String dataType = ""; + String paramMode = ""; + long ordinal = 0; + StringBuilder composite_parms = new StringBuilder(); + + while (rs.next()) { + Object temp = rs.getObject("routine_name"); + if (temp != null) { + routine_name = UtilScript.TrimSQLString(rs.getString("routine_name"), ""); + if (org.apache.commons.lang3.StringUtils.isEmpty(previous_routine_name)) { + previous_routine_name = routine_name; + } + + + if (!org.apache.commons.lang3.StringUtils.equals(previous_routine_name, routine_name)) { + theProcedure = new AFProcedure(database, schema, previous_routine_name, dataType, "", "", "", ""); + theProcedure._paramSignature = composite_parms.toString(); + theProcedure._CreatedDate = created; + theProcedure._AlteredDate = last_altered; + theProcedure._specificName = specific_name; + theList.add(theProcedure); + composite_parms.delete(0, composite_parms.length()); + + specific_name = ""; + created = ""; + last_altered = ""; + parameter_name = ""; + dataType = ""; + paramMode = ""; + ordinal = 0; + } + + temp = rs.getObject("specific_name"); + if (temp != null) { + specific_name = UtilScript.TrimSQLString(rs.getString("specific_name"), ""); + } + + temp = rs.getObject("created"); + if (temp != null) { + created = rs.getString("created"); + } + + temp = rs.getObject("last_altered"); + if (temp != null) { + last_altered = rs.getString("last_altered"); + } + + temp = rs.getObject("parameter_name"); + if (temp != null) { + parameter_name = UtilScript.TrimSQLString(rs.getString("parameter_name"), ""); + } + + temp = rs.getObject("data_type"); + if (temp != null) { + dataType = UtilScript.TrimSQLString(rs.getString("data_type"), ""); + } + + temp = rs.getObject("parameter_mode"); + if (temp != null) { + paramMode = UtilScript.TrimSQLString(rs.getString("parameter_mode"), ")"); + } + + temp = rs.getObject("ordinal_position"); + if (temp != null) { + ordinal = rs.getLong("ordinal_position"); + } + + if (composite_parms.length() != 0) { + composite_parms.append(", "); + } + + if (org.apache.commons.lang3.StringUtils.isNotEmpty(dataType)) { + composite_parms.append("("); + composite_parms.append(dataType); + composite_parms.append(")"); + } + + if (org.apache.commons.lang3.StringUtils.isNotEmpty(paramMode)) { + composite_parms.append(" - "); + composite_parms.append(paramMode); + } + + previous_routine_name = routine_name; + } + } + // Add the last one + theProcedure = new AFProcedure(database, schema, previous_routine_name, dataType, "", "", "", ""); + theProcedure._paramSignature = composite_parms.toString(); + theProcedure._CreatedDate = created; + theProcedure._AlteredDate = last_altered; + theProcedure._specificName = specific_name; + theList.add(theProcedure); + } + } + catch (SQLException e) { + log.err(e); + } + finally { + AQCommonUtils.close(rs); + AQCommonUtils.close(stmt); + } } else if (connSettings.isPostgreSQL()) { Statement stmt = null; Index: src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/AFProcedure.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/AFProcedure.java b/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/AFProcedure.java --- a/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/AFProcedure.java (revision 59895) +++ b/src-rep/src/lib/aqua-database/com/aquafold/aquacore/open/rdbms/core/schema/AFProcedure.java (date 1685737295122) @@ -214,6 +214,10 @@ public java.sql.Timestamp _CreateDate; public boolean _ExecuteAsOwner; + // Bigquery + public String _CreatedDate; + public String _AlteredDate; + public AFParameter _returnParam; public ArrayList _paramList = new ArrayList(); public ArrayList _returnParamList = new ArrayList(); // Used to return table information or scalar with casting Index: src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/detail/BigQueryFunctionsModel.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/detail/BigQueryFunctionsModel.java b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/detail/BigQueryFunctionsModel.java new file mode 100644 --- /dev/null (date 1685737295115) +++ b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/detail/BigQueryFunctionsModel.java (date 1685737295115) @@ -0,0 +1,202 @@ +/* + * AQUAFOLD CONFIDENTIAL + * Unpublished Copyright (c) 2002-2023 AquaFold Incorporated, All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains the property of AquaFold Incorporated. The intellectual + * and technical concepts contained herein are proprietary to AquaFold Incorporated and may be covered by U.S. + * and Foreign Patents, patents in process, and are protected by trade secret or copyright law. Dissemination of this + * information or reproduction of this material is strictly forbidden unless prior written permission is obtained from + * AquaFold Incorporated. + * + * The copyright notice above does not evidence any actual or intended publication or disclosure of this source code, + * which includes information that is confidential and/or proprietary, and is a trade secret, of AquaFold Incorporated. + * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, OR PUBLIC DISPLAY OF OR + * THROUGH USE OF THIS SOURCE CODE WITHOUT THE EXPRESS WRITTEN CONSENT OF COMPANY IS + * STRICTLY PROHIBITED, AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. THE + * RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION DOES NOT CONVEY OR + * IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, OR TO MANUFACTURE, USE, + * OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + */ + +package com.aquafold.datastudio.schematree.bigquery.detail; + +import javax.swing.ImageIcon; +import javax.swing.table.DefaultTableColumnModel; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; +import java.sql.Timestamp; +import java.util.ArrayList; + +import com.aquafold.aquacore.open.rdbms.core.schema.AFProcedure; +import com.common.i18n.TXT; +import com.common.ui.resource.Elegant; +import com.common.ui.table.ArrayListTableModel; + +public class BigQueryFunctionsModel extends ArrayListTableModel { + private static final DefaultTableColumnModel _columnModel = new DefaultTableColumnModel(); + private ArrayList _tableList = null; + private boolean _allowEdit = false; + private ImageIcon _icon; + + static { + TableColumn column = new TableColumn(); + column.setHeaderValue(" "); + column.setPreferredWidth(20); + _columnModel.addColumn(column); + + column = new TableColumn(); + column.setHeaderValue(TXT.get("BigQueryFunctionsModel.columnOwner", "Owner")); + column.setPreferredWidth(100); + _columnModel.addColumn(column); + + column = new TableColumn(); + column.setHeaderValue(TXT.get("BigQueryFunctionsModel.columnName", "Name")); + column.setPreferredWidth(150); + _columnModel.addColumn(column); + + column = new TableColumn(); + column.setHeaderValue(TXT.get("BigQueryFunctionsModel.columnParameters", "Parameters")); + column.setPreferredWidth(400); + _columnModel.addColumn(column); + + column = new TableColumn(); + column.setHeaderValue(TXT.get("BigQueryFunctionsModel.columnSpecificr", "Specific Name")); + column.setPreferredWidth(100); + _columnModel.addColumn(column); + + column = new TableColumn(); + column.setHeaderValue(TXT.get("BigQueryFunctionsModel.created", "Date Created")); + column.setPreferredWidth(100); + _columnModel.addColumn(column); + + column = new TableColumn(); + column.setHeaderValue(TXT.get("BigQueryFunctionsModel.altered", "Last Altered")); + column.setPreferredWidth(100); + _columnModel.addColumn(column); + + } + + public BigQueryFunctionsModel(ArrayList tableList) { + this(tableList, false); + } + + public BigQueryFunctionsModel(ArrayList tableList, boolean isProcedure) { + super(new String[_columnModel.getColumnCount()], tableList); + _icon = isProcedure ? Elegant.get(Elegant.TREE_CONN_STOREDPROCEDURES) : Elegant.get(Elegant.TREE_CONN_UDFS); + _tableList = tableList; + } + + // Interfaces + + public int getRowCount() { + int size = 0; + if (_tableList != null) { + size = _tableList.size(); + } + return size; + } + + public Class getColumnClass(int col) { + if (col == 0) { + return ImageIcon.class; + } + else if (col == 1) { + return String.class; // owner + } + else if (col == 2) { + return String.class; // name + } + else if (col == 3) { + return String.class; // parameters + } + else if (col == 4) { + return String.class; // specific name + } + else if (col == 5) { + return String.class; // created + } + else if (col == 6) { + return String.class; // last altered + } + + + return null; + } + + public int getColumnCount() { + return _columnModel.getColumnCount(); + } + + public String getColumnName(int col) { + return (String) _columnModel.getColumn(col).getHeaderValue(); + } + + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + public Object getValue(Object list, int row, int col) { + + ArrayList l = (ArrayList) list; + if ((l == null) || (row < 0) || (row >= l.size())) { + return null; + } + AFProcedure tab = (AFProcedure) l.get(row); + + if (col == 0) { + return _icon; + } + else if (col == 1) { + if (tab._schema == null || tab._schema.length() == 0) { + return "Unknown"; + } + else { + return tab._schema; // owner + } + } + else if (col == 2) { + return tab._name; // name + } + else if (col == 3) { + return tab._paramSignature; // paramaters + } + else if (col == 4) { + return tab._specificName; // specific name + } + else if (col == 5) { + return tab._CreatedDate; // created + } + else if (col == 6) { + return tab._AlteredDate; // altered + } + + return ""; + } + + public Object getValueAt(int row, int col) { + if (_tableList != null) { + return getValue(_tableList, row, col); + } + return null; + } + + public void setValueAt(Object aValue, int row, int col) { + + } + + public boolean isDataModified(int row, int col, Object o) { + return false; + } + + public void enableEdit() { + _allowEdit = true; + } + + public void disableEdit() { + _allowEdit = false; + } + + public TableColumnModel getColumns() { + return _columnModel; + } +} Index: src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParameterNode.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParameterNode.java b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParameterNode.java new file mode 100644 --- /dev/null (date 1685642046247) +++ b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParameterNode.java (date 1685642046247) @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015. AquaFold, Inc. + */ + +package com.aquafold.datastudio.schematree.bigquery; + +import com.common.ui.resource.Elegant; +import com.common.ui.tree.CTreeNode; + + +public class BigQueryParameterNode + extends CTreeNode { + private String _name; + + + public BigQueryParameterNode(String name) { + super(name, Elegant.get(Elegant.TREE_CONN_PARAMETER)); + _name = name; + } + + + public String toString() { + return _name; + } + + + public String getObjectName() { + return _name; + } +} Index: src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParametersNode.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParametersNode.java b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParametersNode.java new file mode 100644 --- /dev/null (date 1685975001904) +++ b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryParametersNode.java (date 1685975001904) @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2015. AquaFold, Inc. + */ + +package com.aquafold.datastudio.schematree.bigquery; + +import javax.swing.table.TableModel; +import java.sql.Connection; +import java.sql.ResultSet; +import java.util.ArrayList; + +import com.aquafold.aquacore.open.rdbms.core.schema.AFProcedure; +import com.aquafold.aquacore.open.rdbms.core.schema.extract.ExtractFunction; +import com.aquafold.aquacore.open.rdbms.core.schema.extract.ExtractPackage; +import com.aquafold.aquacore.open.rdbms.core.schema.extract.ExtractParameter; +import com.aquafold.aquacore.open.rdbms.core.schema.extract.ExtractProcedure; +import com.aquafold.aquacore.open.rdbms.core.scripts.ConnectionProperties; +import com.aquafold.aquacore.open.rdbms.core.scripts.SchemaStrings; +import com.aquafold.datastudio.schematree.AParameterListNode; +import com.aquafold.datastudio.schematree.postgresql.PGParameterNode; +import com.aquafold.datastudio.schematree.postgresql.detail.PGParametersModel; +import com.common.ui.tree.CTreeNode; + + +public class BigQueryParametersNode + extends AParameterListNode { + private String _packageName; + private String _spName; + private String _schema; + private int _spType = 0; + private int _packType = 0; + private String _overload; + private boolean _isProcedure; + + + public BigQueryParametersNode(String spName, String schema, int spType, String overload, int packType, boolean isProcedure) { + super(SchemaStrings.Parameters); + _spName = spName; + _schema = schema; + _spType = spType; + _overload = overload; + _packType = packType; + _isProcedure = isProcedure; + } + + + public String getSelect() { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT r.ROUTINE_NAME "); + sql.append(", p.PARAMETER_NAME "); + sql.append(", p.data_type "); + sql.append(", p.parameter_mode "); + sql.append(", p.ordinal_position "); + sql.append("FROM `"); + sql.append(_schema); + sql.append("`.`INFORMATION_SCHEMA`.`ROUTINES` r "); + sql.append("LEFT JOIN `"); + sql.append(_schema); + sql.append("`.`INFORMATION_SCHEMA`.`PARAMETERS` p "); + sql.append("ON r.specific_catalog = p.specific_catalog "); + sql.append("AND r.specific_schema = p.specific_schema "); + sql.append("AND r.SPECIFIC_NAME = p.SPECIFIC_NAME "); + sql.append("WHERE r.routine_type="); + sql.append("'PROCEDURE'"); + sql.append(" AND r.SPECIFIC_NAME = '" + _spName + "' "); + sql.append("AND r.specific_schema = '" + _schema + "' "); + sql.append("ORDER BY r.specific_schema "); + sql.append(", r.SPECIFIC_NAME "); + sql.append(", p.ordinal_position "); + return sql.toString(); + } + + + public CTreeNode createNode(ResultSet rs) { + String name = ""; + String dataType = ""; + String paramMode = ""; + long ordinal = 0; + + try { + name = rs.getString(2); + dataType = rs.getString(3); + paramMode = rs.getString(4); + ordinal = rs.getLong(5); + + if (dataType == null && paramMode == null) { + return null; + } + if (name == null) { + name = "$p" + ordinal; + } + + name = name + " (" + dataType + ") - " + paramMode; + } + catch (Exception e) { + // Need to do this, otherwise the ProGuard obfuscator optimizations chock + log.err(e); + return null; + } + + if (name == null) { + return null; + } + else { + return new BigQueryParameterNode(name); + } + } + + /*** Below - This needs to get implemented ****/ + + public TableModel getDetailViewTableModel() { + ConnectionProperties cp = getConnectionProperties(); + Connection conn = getConnection(); + String db = getDatabase(); + ArrayList spList = new ArrayList(); + ArrayList list = null; + AFProcedure proc = null; + + if (_spType == 0) { + if (_packType == 0) { + proc = ExtractProcedure.getProcedure(cp, conn, db, _schema, _spName, null); + } + else { + ArrayList procs = ExtractPackage.getProcedures(cp, conn, "", _schema, _packageName, _spName, false, _overload); + proc = (AFProcedure) procs.get(0); + } + } + else { + if (_packType == 0) { + proc = ExtractFunction.getFunction(cp, conn, db, _schema, _spName, null); + } + else { + ArrayList procs = ExtractPackage.getFunctions(cp, conn, "", _schema, _packageName, _spName, _overload); + proc = (AFProcedure) procs.get(0); + } + } + + if (proc == null) { + return new PGParametersModel(null); + } + + proc = ExtractParameter.getParameter(cp, conn, proc); + + if (proc._returnParam != null) { + proc._paramList.add(0, proc._returnParam); + } + + if (proc == null) { + return new PGParametersModel(null); + } + else { + return new PGParametersModel(proc._paramList); + } + } +} Index: src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProcedureNode.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProcedureNode.java b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProcedureNode.java new file mode 100644 --- /dev/null (date 1685974848755) +++ b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProcedureNode.java (date 1685974848755) @@ -0,0 +1,79 @@ +/* + * AQUAFOLD CONFIDENTIAL + * Unpublished Copyright (c) 2002-2019 AquaFold Incorporated, All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains the property of AquaFold Incorporated. The intellectual + * and technical concepts contained herein are proprietary to AquaFold Incorporated and may be covered by U.S. + * and Foreign Patents, patents in process, and are protected by trade secret or copyright law. Dissemination of this + * information or reproduction of this material is strictly forbidden unless prior written permission is obtained from + * AquaFold Incorporated. + * + * The copyright notice above does not evidence any actual or intended publication or disclosure of this source code, + * which includes information that is confidential and/or proprietary, and is a trade secret, of AquaFold Incorporated. + * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, OR PUBLIC DISPLAY OF OR + * THROUGH USE OF THIS SOURCE CODE WITHOUT THE EXPRESS WRITTEN CONSENT OF COMPANY IS + * STRICTLY PROHIBITED, AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. THE + * RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION DOES NOT CONVEY OR + * IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, OR TO MANUFACTURE, USE, + * OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + */ + +package com.aquafold.datastudio.schematree.bigquery; + +import javax.swing.JPopupMenu; +import java.util.ArrayList; + +import com.aquafold.aquacore.open.rdbms.core.schema.AFProcedure; +import com.aquafold.aquacore.open.rdbms.core.scripts.ConnectionProperties; +import com.aquafold.aquacore.open.rdbms.core.scripts.SchemaObject; +import com.aquafold.aquacore.open.rdbms.core.scripts.ScriptedObject; +import com.aquafold.datastudio.mainframe.actions.tree.schemascript.procedure.ScriptProcedureCREATE; +import com.aquafold.datastudio.schematree.initPopupSchemaMenus; +import com.aquafold.datastudio.schematree.postgresql.PGParametersNode; +import com.common.ui.I_ActionHandler; +import com.common.ui.resource.Elegant; +import com.common.ui.tree.CTreeVectorList; +import com.common.ui.tree.ISchemaTreeNode; + +public class BigQueryProcedureNode + extends CTreeVectorList + implements ISchemaTreeNode { + + private String _schema; + private String _name; + + + public BigQueryProcedureNode(String schema, String name) { + super(schema + "." + name, Elegant.get(Elegant.TREE_CONN_STOREDPROCEDURES)); + _schema = schema; + _name = name; + } + + public String getSchema() { return _schema; } + public String getObjectName() { return _name; } + + public String toString() { + return _name; + } + + public void getChildrenList(ArrayList list) { + list.add(new BigQueryParametersNode(_name, _schema, 1, null, 0, true)); + } + + +/*** Below - These need to get implemented ****/ + + +// public Object getObject() { +// AFProcedure proc = new AFProcedure(getDatabase(), _schema, _name, _params, "", "", "", ""); +// return SchemaObject.createSchemaObject(this, true, ScriptedObject.TYPE_PROCEDURE, proc, getConnectionProperties(), getConnection()); +// } + + public JPopupMenu constructPopupMenu(I_ActionHandler h) { + return initPopupSchemaMenus.initProcedurePopupMenus(this, h, true, false, false, true, false, false, false, true); + } + + public String scriptCREATE() { + return ScriptProcedureCREATE.generateScript(this, false); + } +} Index: src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProceduresNode.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProceduresNode.java b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProceduresNode.java new file mode 100644 --- /dev/null (date 1685974848766) +++ b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProceduresNode.java (date 1685974848766) @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2015. AquaFold, Inc. + */ + +package com.aquafold.datastudio.schematree.bigquery; + +import javax.swing.JPopupMenu; +import javax.swing.table.TableModel; +import java.sql.ResultSet; +import java.util.ArrayList; + +import com.aquafold.aquacore.open.rdbms.core.schema.extract.ExtractProcedure; +import com.aquafold.aquacore.open.rdbms.core.scripts.ConnectionProperties; +import com.aquafold.aquacore.open.rdbms.core.scripts.SchemaStrings; +import com.aquafold.datastudio.schematree.AProcedureListNode; +import com.aquafold.datastudio.schematree.bigquery.detail.BigQueryFunctionsModel; +import com.aquafold.datastudio.schematree.initPopupSchemaFolderMenus; +import com.common.ui.I_ActionHandler; +import com.common.ui.tree.CTreeNode; + +public class BigQueryProceduresNode extends AProcedureListNode // procedures +{ + public static final String NAME = SchemaStrings.StoredProcedures; + private String _datasetID; + private boolean _displayProject; + private boolean _publicDataProject; + + public BigQueryProceduresNode(String datasetID, boolean displayProject, boolean publicDataProject) { + super(NAME); + _datasetID = datasetID; + _displayProject = displayProject; + _publicDataProject = publicDataProject; + } + + public String getSelect() { + StringBuilder sql = new StringBuilder(); + ConnectionProperties cp = getConnectionProperties(); + sql.append("SELECT routine_schema, routine_name FROM "); + sql.append(_datasetID); + sql.append(".INFORMATION_SCHEMA.ROUTINES WHERE routine_type = 'PROCEDURE'" ); + sql.append("ORDER By routine_name"); + return sql.toString(); + } + + public CTreeNode createNode(ResultSet rs) { + try { + String schemaName = rs.getString(1); + String name = rs.getString(2); + return new BigQueryProcedureNode(schemaName, name); + } + catch (Exception e) { + // Need to do this, otherwise the ProGuard obfuscator optimizations chock + log.err(e); + return null; + } + } + + public TableModel getDetailViewTableModel() { + ArrayList list = ExtractProcedure.getProcedures(getConnectionProperties(), getConnection(), getDatabase(), _datasetID); + return new BigQueryFunctionsModel(list, true); + } + + /*** Below - This needs to get implemented ****/ + + public JPopupMenu constructPopupMenu(I_ActionHandler h) { + if (getConnectionProperties().isPostgreSQL(ConnectionProperties.MATCH_EQUAL_OR_GREATER, ConnectionProperties.VERSION_POSTGRESQL_11_0)) { + return initPopupSchemaFolderMenus.initProcedureListPopupMenus(this, h, true, true); + } + return initPopupSchemaFolderMenus.initFunctionListPopupMenus(this, h, true, true); + } +} Index: src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProjectNode.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProjectNode.java b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProjectNode.java --- a/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProjectNode.java (revision 59895) +++ b/src-rep/src/apps/datastudio/com/aquafold/datastudio/schematree/bigquery/BigQueryProjectNode.java (date 1685640943756) @@ -119,6 +119,9 @@ if (cp.includeObjectFolder(BigQueryViewsNode.NAME)) { list.add(new BigQueryViewsNode(datasetID, displayProject, publicDataProject)); } + if (cp.includeObjectFolder(BigQueryProceduresNode.NAME)) { + list.add(new BigQueryProceduresNode(datasetID, displayProject, publicDataProject)); + } } @Override