Search in sources :

Example 16 with Table

use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.

the class JSTableObject method js_createNewColumn.

/**
 * Creates a new column in this table. The name, type and length of the new column must be specified. For specifying the
 * type of the column, use the JSColumn constants. The column is not actually created in the database until this
 * table is synchronized with the database using the JSServer.synchronizeWithDB method.
 *
 * The method returns a JSColumn instance that corresponds to the newly created column. If any error occurs and the column cannot be created, then the method
 * returns null.
 * @see JSColumnObject
 *
 * @sample
 * var server = plugins.maintenance.getServer("example_data");
 * if (server)
 * {
 * 	var table = server.createNewTable("users");
 * 	if (table)
 * 	{
 * 		var pk = table.createNewColumn("id", JSColumn.MEDIA, 16); // can also use (JSColumn.TEXT, 36) for UUIDs
 * 		pk.rowIdentifierType = JSColumn.PK_COLUMN;
 * 		pk.setFlag(JSColumn.UUID_COLUMN, true)
 * 		pk.sequenceType = JSColumn.UUID_GENERATOR
 * 		var c = table.createNewColumn("name", JSColumn.TEXT, 100);
 * 		c.allowNull = false
 * 		table.createNewColumn("age", JSColumn.INTEGER, 0);
 * 		table.createNewColumn("last_login", JSColumn.DATETIME, 0);
 * 		var result = server.synchronizeWithDB(table);
 * 		if (result) application.output("Table successfully created.");
 * 		else application.output("Table not created.");
 * 	}
 * }
 *
 * @param columnName
 * @param type
 * @param length
 * @param allowNull
 * @param pkColumn
 */
public JSColumnObject js_createNewColumn(String columnName, Number type, Number length, Boolean allowNull, Boolean pkColumn) {
    int _type = Utils.getAsInteger(type);
    int _length = Utils.getAsInteger(length);
    boolean _allowNull = Utils.getAsBoolean(allowNull);
    boolean _pkColumn = Utils.getAsBoolean(pkColumn);
    try {
        Column c = ((Table) getTable()).createNewColumn(DummyValidator.INSTANCE, columnName, _type, _length, _allowNull, _pkColumn);
        return new JSColumnObject(c, getServer(), getTable());
    } catch (RepositoryException e) {
        // $NON-NLS-1$
        Debug.error("Exception while creating new column.", e);
        return null;
    }
}
Also used : ITable(com.servoy.j2db.persistence.ITable) Table(com.servoy.j2db.persistence.Table) Column(com.servoy.j2db.persistence.Column) RepositoryException(com.servoy.j2db.persistence.RepositoryException)

Example 17 with Table

use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.

the class FoundSetManager method getTable.

@SuppressWarnings("nls")
public ITable getTable(String dataSource) throws RepositoryException {
    if (dataSource == null) {
        return null;
    }
    if (application.getSolution() == null) {
        if (Debug.tracing()) {
            Debug.trace("Trying to get a table for a datasource: " + dataSource + " on an already closed solution", new RuntimeException());
        }
        return null;
    }
    ITable table = dataSource.startsWith(DataSourceUtils.VIEW_DATASOURCE_SCHEME_COLON) ? viewDataSources.get(dataSource) : inMemDataSources.get(dataSource);
    if (table == null) {
        // when it is a db:/server/table data source
        String[] servernameTablename = DataSourceUtilsBase.getDBServernameTablename(dataSource);
        if (servernameTablename != null && servernameTablename[0] != null) {
            try {
                IServer server = application.getSolution().getServer(servernameTablename[0]);
                if (server == null) {
                    // $NON-NLS-1$
                    throw new RepositoryException(Messages.getString("servoy.exception.serverNotFound", new Object[] { servernameTablename[0] }));
                }
                table = server.getTable(servernameTablename[1]);
            } catch (RemoteException e) {
                throw new RepositoryException(e);
            }
        } else if (getDataSourceServerName(dataSource) == IServer.INMEM_SERVER) {
            if (!inMemDataSources.containsKey(dataSource) && dataSourceExists(dataSource)) {
                try {
                    insertToDataSource(DataSourceUtils.getDataSourceTableName(dataSource), new BufferedDataSet(), null, null, true, false, IServer.INMEM_SERVER);
                } catch (Exception e) {
                    Debug.error(e);
                }
            }
            return inMemDataSources.get(dataSource);
        } else if (getDataSourceServerName(dataSource) == IServer.VIEW_SERVER) {
            Optional<ServoyJSONObject> columnDefintion;
            if (!viewDataSources.containsKey(dataSource) && (columnDefintion = getColumnDefintion(dataSource)).isPresent()) {
                Table tbl = new Table(IServer.VIEW_SERVER, DataSourceUtils.getViewDataSourceName(dataSource), true, ITable.VIEW, null, null);
                tbl.setDataSource(dataSource);
                DatabaseUtils.deserializeInMemoryTable(application.getFlattenedSolution().getPersistFactory(), tbl, columnDefintion.get());
                tbl.setExistInDB(true);
                tbl.setInitialized(true);
                viewDataSources.put(dataSource, tbl);
                try {
                    executeFoundsetTriggerReturnFirst(tbl, new Object[] { DataSourceUtils.getViewDataSourceName(dataSource) }, StaticContentSpecLoader.PROPERTY_ONFOUNDSETLOADMETHODID, false, // can't entity methods, not supported on view foundsets
                    null);
                } catch (ServoyException e) {
                    Debug.error("Error executing foundset method for datasource:  " + dataSource, e);
                }
            }
            return viewDataSources.get(dataSource);
        }
    }
    return table;
}
Also used : IServer(com.servoy.j2db.persistence.IServer) BaseQueryTable(com.servoy.base.query.BaseQueryTable) Table(com.servoy.j2db.persistence.Table) QueryTable(com.servoy.j2db.query.QueryTable) ITable(com.servoy.j2db.persistence.ITable) RepositoryException(com.servoy.j2db.persistence.RepositoryException) ServoyException(com.servoy.j2db.util.ServoyException) JavaScriptException(org.mozilla.javascript.JavaScriptException) IOException(java.io.IOException) MarshallException(org.jabsorb.serializer.MarshallException) ApplicationException(com.servoy.j2db.ApplicationException) RemoteException(java.rmi.RemoteException) RepositoryException(com.servoy.j2db.persistence.RepositoryException) ServoyException(com.servoy.j2db.util.ServoyException) ServoyJSONObject(com.servoy.j2db.util.ServoyJSONObject) ITable(com.servoy.j2db.persistence.ITable) ServoyJSONObject(com.servoy.j2db.util.ServoyJSONObject) RemoteException(java.rmi.RemoteException)

Example 18 with Table

use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.

the class JSDatabaseManager method js_getSQLParameters.

/**
 * Returns the internal SQL parameters, as an array, that are used to define the specified (related)foundset.
 * When the founset is in find mode, the arguments for the find conditions are included in the result.
 *
 * @sample var sqlParameterArray = databaseManager.getSQLParameters(foundset,false)
 *
 * @param foundsetOrQBSelect The JSFoundset or QBSelect to get the sql parameters for.
 * @param includeFilters include the parameters for the filters.
 *
 * @return An Array with the sql parameter values.
 */
public Object[] js_getSQLParameters(Object foundsetOrQBSelect, boolean includeFilters) throws ServoyException {
    checkAuthorized();
    if (foundsetOrQBSelect instanceof IFoundSetInternal && ((IFoundSetInternal) foundsetOrQBSelect).getTable() != null) {
        try {
            // TODO parameters from updates and cleanups
            QuerySet querySet = getQuerySet(((IFoundSetInternal) foundsetOrQBSelect).getCurrentStateQuery(true, false), includeFilters);
            Object[][] qsParams = querySet.getSelect().getParameters();
            if (qsParams == null || qsParams.length == 0) {
                return null;
            }
            return qsParams[0];
        } catch (Exception e) {
            Debug.error(e);
        }
    } else if (foundsetOrQBSelect instanceof QBSelect) {
        try {
            QuerySelect select = ((QBSelect) foundsetOrQBSelect).build();
            if (select.getColumns() == null) {
                // no columns, add pk
                // note that QBSelect.build() already returns a clone
                ITable table = application.getFoundSetManager().getTable(select.getTable().getDataSource());
                Iterator<Column> pkIt = ((Table) table).getRowIdentColumns().iterator();
                if (!pkIt.hasNext()) {
                    throw new RepositoryException(ServoyException.InternalCodes.PRIMARY_KEY_NOT_FOUND, new Object[] { table.getName() });
                }
                while (pkIt.hasNext()) {
                    Column c = pkIt.next();
                    select.addColumn(c.queryColumn(select.getTable()));
                }
            }
            QuerySet querySet = getQuerySet(select, includeFilters);
            Object[][] qsParams = querySet.getSelect().getParameters();
            if (qsParams == null || qsParams.length == 0) {
                return null;
            }
            return qsParams[0];
        } catch (RemoteException e) {
            Debug.error(e);
        }
    }
    return null;
}
Also used : BaseQueryTable(com.servoy.base.query.BaseQueryTable) QueryTable(com.servoy.j2db.query.QueryTable) ITable(com.servoy.j2db.persistence.ITable) Table(com.servoy.j2db.persistence.Table) QuerySet(com.servoy.j2db.persistence.QuerySet) RepositoryException(com.servoy.j2db.persistence.RepositoryException) QuerySelect(com.servoy.j2db.query.QuerySelect) ApplicationException(com.servoy.j2db.ApplicationException) RemoteException(java.rmi.RemoteException) SQLException(java.sql.SQLException) ServoyException(com.servoy.j2db.util.ServoyException) RepositoryException(com.servoy.j2db.persistence.RepositoryException) QBSelect(com.servoy.j2db.querybuilder.impl.QBSelect) QueryColumn(com.servoy.j2db.query.QueryColumn) IBaseColumn(com.servoy.base.persistence.IBaseColumn) Column(com.servoy.j2db.persistence.Column) QBColumn(com.servoy.j2db.querybuilder.impl.QBColumn) Iterator(java.util.Iterator) ITable(com.servoy.j2db.persistence.ITable) NativeObject(org.mozilla.javascript.NativeObject) RemoteException(java.rmi.RemoteException)

Example 19 with Table

use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.

the class JSDatabaseManager method copyMatchingFields.

public boolean copyMatchingFields(Object src, IRecordInternal dest, boolean overwrite, Object[] names) throws ServoyException {
    checkAuthorized();
    if (dest.getParentFoundSet().getSQLSheet() == null) {
        return false;
    }
    List<Object> al = new ArrayList<Object>();
    if (names != null) {
        al = Arrays.asList(names);
    }
    try {
        SQLSheet destSheet = dest.getParentFoundSet().getSQLSheet();
        Table dest_table = destSheet.getTable();
        boolean wasEditing = dest.isEditing();
        Map<String, Method> getters = new HashMap<String, Method>();
        if (dest.startEditing()) {
            Iterator<Column> it = dest_table.getColumns().iterator();
            while (it.hasNext()) {
                Column c = it.next();
                ColumnInfo ci = c.getColumnInfo();
                if (ci != null && ci.isExcluded()) {
                    continue;
                }
                if (al.contains(c.getDataProviderID())) {
                    // skip, also if value in dest_rec is null
                    continue;
                }
                Object dval = dest.getValue(c.getDataProviderID());
                if (dval == null || (!dest_table.getRowIdentColumns().contains(c) && (overwrite || (al.size() > 0 && !al.contains(c.getDataProviderID()))))) {
                    if (src instanceof IRecordInternal) {
                        IRecordInternal src_rec = (IRecordInternal) src;
                        int index = src_rec.getParentFoundSet().getColumnIndex(c.getDataProviderID());
                        if (index != -1) {
                            Object sval = src_rec.getValue(c.getDataProviderID());
                            try {
                                int type = ((FoundSetManager) application.getFoundSetManager()).getConvertedTypeForColumn(c, false);
                                dest.setValue(c.getDataProviderID(), Column.getAsRightType(type, c.getFlags(), sval, c.getLength(), true, true));
                            } catch (Exception e) {
                                application.reportJSError("Could not copy matching field to " + dest_table.getName() + "." + c.getDataProviderID() + ". The value: '" + sval + "' does not match the type of the destination.", e);
                            }
                        }
                    } else if (src instanceof NativeObject) {
                        NativeObject no = ((NativeObject) src);
                        if (no.has(c.getDataProviderID(), no)) {
                            Object raw_val = no.get(c.getDataProviderID(), no);
                            Object val = c.getAsRightType(raw_val);
                            dest.setValue(c.getDataProviderID(), val);
                        }
                    } else if (src != null) {
                        Method m = getMethod(src, c.getDataProviderID(), getters);
                        if (m != null) {
                            Object raw_val = m.invoke(src, (Object[]) null);
                            Object val = c.getAsRightType(raw_val);
                            dest.setValue(c.getDataProviderID(), val);
                        }
                    }
                }
            }
            if (!wasEditing) {
                dest.stopEditing();
            }
            return true;
        }
    } catch (Exception e) {
        Debug.error(e);
    }
    return false;
}
Also used : BaseQueryTable(com.servoy.base.query.BaseQueryTable) QueryTable(com.servoy.j2db.query.QueryTable) ITable(com.servoy.j2db.persistence.ITable) Table(com.servoy.j2db.persistence.Table) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ColumnInfo(com.servoy.j2db.persistence.ColumnInfo) QueryString(com.servoy.j2db.persistence.QueryString) Method(java.lang.reflect.Method) ApplicationException(com.servoy.j2db.ApplicationException) RemoteException(java.rmi.RemoteException) SQLException(java.sql.SQLException) ServoyException(com.servoy.j2db.util.ServoyException) RepositoryException(com.servoy.j2db.persistence.RepositoryException) NativeObject(org.mozilla.javascript.NativeObject) QueryColumn(com.servoy.j2db.query.QueryColumn) IBaseColumn(com.servoy.base.persistence.IBaseColumn) Column(com.servoy.j2db.persistence.Column) QBColumn(com.servoy.j2db.querybuilder.impl.QBColumn) NativeObject(org.mozilla.javascript.NativeObject)

Example 20 with Table

use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.

the class SwingForm method showSortDialog.

public void showSortDialog(IApplication app, String options) {
    ISmartClientApplication application = (ISmartClientApplication) app;
    try {
        Table t = (Table) formController.getTable();
        if (t != null) {
            List<SortColumn> sortColumns = null;
            if ((options == null || options.length() == 0) && formController.getFormModel() instanceof FoundSet) {
                sortColumns = ((FoundSet) formController.getFormModel()).getLastSortColumns();
            } else {
                sortColumns = ((FoundSetManager) application.getFoundSetManager()).getSortColumns(t, options);
            }
            Window window = SwingUtilities.getWindowAncestor(this);
            if (window == null)
                window = application.getMainApplicationFrame();
            // $NON-NLS-1$
            SortDialog nfd = (SortDialog) application.getWindow("SortDialog");
            if (nfd == null || nfd.getOwner() != window) {
                if (window instanceof Frame) {
                    nfd = new SortDialog((Frame) window, application);
                } else if (window instanceof Dialog) {
                    nfd = new SortDialog((Dialog) window, application);
                }
                // $NON-NLS-1$
                application.registerWindow("SortDialog", nfd);
            }
            List<SortColumn> list = nfd.showDialog(t, sortColumns);
            if (list != null)
                formController.sort(list, false);
        }
    } catch (Exception ex) {
        // $NON-NLS-1$
        application.reportError(Messages.getString("servoy.formPanel.error.sortRecordsDialog"), ex);
    }
}
Also used : Window(java.awt.Window) ISmartClientApplication(com.servoy.j2db.ISmartClientApplication) JFrame(javax.swing.JFrame) Frame(java.awt.Frame) Table(com.servoy.j2db.persistence.Table) JTable(javax.swing.JTable) Dialog(java.awt.Dialog) FormDialog(com.servoy.j2db.gui.FormDialog) JDialog(javax.swing.JDialog) FoundSet(com.servoy.j2db.dataprocessing.FoundSet) SortColumn(com.servoy.j2db.dataprocessing.SortColumn)

Aggregations

Table (com.servoy.j2db.persistence.Table)43 ITable (com.servoy.j2db.persistence.ITable)27 QueryTable (com.servoy.j2db.query.QueryTable)26 RepositoryException (com.servoy.j2db.persistence.RepositoryException)23 BaseQueryTable (com.servoy.base.query.BaseQueryTable)22 Column (com.servoy.j2db.persistence.Column)21 ServoyException (com.servoy.j2db.util.ServoyException)17 QueryColumn (com.servoy.j2db.query.QueryColumn)16 QuerySelect (com.servoy.j2db.query.QuerySelect)16 ArrayList (java.util.ArrayList)16 RemoteException (java.rmi.RemoteException)14 ApplicationException (com.servoy.j2db.ApplicationException)13 IColumn (com.servoy.j2db.persistence.IColumn)10 IBaseColumn (com.servoy.base.persistence.IBaseColumn)9 IServer (com.servoy.j2db.persistence.IServer)7 Relation (com.servoy.j2db.persistence.Relation)7 HashMap (java.util.HashMap)7 SortColumn (com.servoy.j2db.dataprocessing.SortColumn)6 SafeArrayList (com.servoy.j2db.util.SafeArrayList)6 ColumnInfo (com.servoy.j2db.persistence.ColumnInfo)5