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;
}
}
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;
}
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;
}
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;
}
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);
}
}
Aggregations