@Override public DataSetDef clone() { SQLDataSetDef def = new SQLDataSetDef(); clone(def); def.setDataSource(getDataSource()); def.setDbSchema(getDbSchema()); def.setDbTable(getDbTable()); def.setDbSQL(getDbSQL()); return def; }
public LookupProcessor(SQLDataSetDef def, DataSetLookup lookup) { this.def = def; this.lookup = lookup; DataSetFilter dataSetFilter = def.getDataSetFilter(); if (dataSetFilter != null) { if (lookup == null) { this.lookup = new DataSetLookup(def.getUUID(), dataSetFilter); } else { this.lookup.addOperation(dataSetFilter); } } }
protected Table _createTable(SQLDataSetDef def) { if (StringUtils.isBlank(def.getDbSchema())) return SQLFactory.table(def.getDbTable()); else return SQLFactory.table(def.getDbSchema(), def.getDbTable()); }
@Override public void toJson(SQLDataSetDef dataSetDef, JsonObject json) { // Data source. json.put(DATA_SOURCE, dataSetDef.getDataSource()); // Schema. json.put(DB_SCHEMA, dataSetDef.getDbSchema()); // Table. if (dataSetDef.getDbTable() != null) { json.put(DB_TABLE, dataSetDef.getDbTable()); } // Query. if (dataSetDef.getDbSQL() != null) { json.put(DB_SQL, dataSetDef.getDbSQL()); } // All columns flag. json.put(ALL_COLUMNS, dataSetDef.isAllColumnsEnabled()); } }
@Test public void testHumanTasksWithUserDataSet() { QueryDefinition qd = QueryDefinition.builder().name(HUMAN_TASKS_WITH_USER_DATASET).expression("SELECT *").source("source").target("target").build(); dataSetsBootstrap.registerDataSetDefinitions(new QueryDefinitionLoaded(qd)); ArgumentCaptor<SQLDataSetDef> argument = ArgumentCaptor.forClass(SQLDataSetDef.class); verify(dataSetDefRegistry).registerDataSetDef(argument.capture()); SQLDataSetDef dataSetDef = argument.getValue(); assertEquals(HUMAN_TASKS_WITH_USER_DATASET, dataSetDef.getUUID()); assertEquals("target-" + HUMAN_TASKS_WITH_USER_DATASET, dataSetDef.getName()); assertEquals(KieServerDataSetProvider.TYPE, dataSetDef.getProvider()); assertEquals("SELECT *", dataSetDef.getDbSQL()); assertEquals(21, dataSetDef.getColumns().size()); }
@Test public void testSetValueUsingQuery() { final SQLDataSetDef dataSetDef = mock(SQLDataSetDef.class); when(dataSetDef.getUUID()).thenReturn("uuid1"); when(dataSetDef.getName()).thenReturn("name1"); when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.SQL); when(dataSetDef.getDbTable()).thenReturn(null); when(dataSetDef.getDbSQL()).thenReturn("query1"); presenter.setValue(dataSetDef); assertEquals(true, presenter.isUsingQuery()); verify(view, times(1)).query(); verify(view, times(0)).init(presenter); verify(view, times(0)).initWidgets(any(DropDownEditor.View.class), any(ValueBoxEditor.View.class), any(ValueBoxEditor.View.class) ,any(ValueBoxEditor.View.class)); verify(dataSource, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSchema, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbTable, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSQL, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).table(); }
@Test public void testDataSetSQL() { dataSetDefs.registerDataSetDefinitions(); final ArgumentCaptor<SQLDataSetDef> dataSetDef = ArgumentCaptor.forClass(SQLDataSetDef.class); verify(defRegistry, times(2)).registerDataSetDef(dataSetDef.capture()); for (SQLDataSetDef dataSet : dataSetDef.getAllValues()) { if (dataSet.getDbSQL() == null) { continue; } try { LOGGER.info("Testing SQL DataSet: {}", dataSet.getName()); LOGGER.info("SQL: {}", dataSet.getDbSQL()); PreparedStatement ps = conn.prepareStatement(dataSet.getDbSQL()); ResultSet rs = ps.executeQuery(); ResultSetMetaData resultSetMetaData = rs.getMetaData(); for (int i=0; i < dataSet.getColumns().size(); i++) { assertEquals("select column name don't match", dataSet.getColumns().get(i).getId(), resultSetMetaData.getColumnLabel(i+1)); } ps.close(); final String countSQL = "SELECT COUNT(*) FROM (SELECT * FROM (" + dataSet.getDbSQL() + ") )"; conn.prepareStatement(countSQL).executeQuery(); } catch (Exception ex) { LOGGER.error("Failed to execute query for DataSet {} on DB {}", dataSet.getName(), database.name(), ex); fail(ex.getMessage()); } } }
public DataSet lookupDataSet(DataSetDef def, DataSetLookup lookup) throws Exception { SQLDataSetDef sqlDef = (SQLDataSetDef) def; if (StringUtils.isBlank(sqlDef.getDataSource())) { throw new IllegalArgumentException("Missing data source in SQL data set definition: " + sqlDef); if (StringUtils.isBlank(sqlDef.getDbSQL()) && StringUtils.isBlank(sqlDef.getDbTable())) { throw new IllegalArgumentException("Missing DB table or SQL in the data set definition: " + sqlDef); if (sqlDef.isCacheEnabled()) { DataSet dataSet = staticDataSetProvider.lookupDataSet(def.getUUID(), null); if (dataSet != null) { if (rows > sqlDef.getCacheMaxRows()) { return _lookupDataSet(sqlDef, lookup);
QueryDefinition.builder() .name(dataSetDef.getUUID()) .expression(((SQLDataSetDef) dataSetDef).getDbSQL()) .source(((SQLDataSetDef) dataSetDef).getDataSource()) .target(dataSetDef.getName().contains("-") ? dataSetDef.getName().substring(0, dataSetDef.getName().indexOf("-")) : "CUSTOM") .build()
services = new CallerMock<>( dataSetDefVfsServices ); when(dataSetDef.getUUID()).thenReturn("uuid1"); when(dataSetDef.getName()).thenReturn("name1"); when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.SQL); when(workflowFactory.providerType()).thenReturn(dataSetProviderTypeWorkflow); when(workflowFactory.edit(any(DataSetProviderType.class))).thenReturn(editWorkflow);
MetadataHolder result = _metadataMap.get(def.getUUID()); if (result != null) { return result.metadata; if (def.getColumns() != null) { for (DataColumnDef column : def.getColumns()) { Column dbColumn = _getDbColumn(dbColumns, column.getId()); if (dbColumn == null) { if (def.isAllColumnsEnabled()) { targetDbColumnIds.add(dbColumnId); targetDbColumnTypes.add(dbColumn.getType()); result.columns = dbColumns; result.metadata = new DataSetMetadataImpl(def, def.getUUID(), 0, targetDbColumnIds.size(), targetDbColumnIds, targetDbColumnTypes, 0); _metadataMap.put(def.getUUID(), result); } else if (log.isDebugEnabled()) { log.debug("Using look-up in test mode. Skipping adding data set metadata for uuid [" + def.getUUID() + "] into cache.");
private void verifyDataSetDef(DataSetDef dataSetDef) { assertEquals(DATASOURCE_UUID + SEPARATOR + SCHEMA + SEPARATOR + TABLE, dataSetDef.getUUID()); assertEquals(SCHEMA + "." + TABLE, dataSetDef.getName()); assertEquals(DATASOURCE_UUID, ((SQLDataSetDef) dataSetDef).getDataSource()); assertEquals(SCHEMA, ((SQLDataSetDef) dataSetDef).getDbSchema()); assertEquals(TABLE, ((SQLDataSetDef) dataSetDef).getDbTable()); }
@Override public DataSource lookup(SQLDataSetDef def) throws Exception { InitialContext ctx = new InitialContext(); return (DataSource) ctx.lookup(def.getDataSource()); } @Override
protected DataSet _buildDataSet(List<DataColumn> columns, ResultSet _rs) throws Exception { DataSet dataSet = DataSetFactory.newEmptyDataSet(); dataSet.setUUID(def.getUUID()); dataSet.setDefinition(def); DataColumn dateGroupColumn = null; dataSet = opEngine.execute(dataSet, postProcessingOps); dataSet = dataSet.trim(lookup.getRowOffset(), lookup.getNumberOfRows()); dataSet.setUUID(def.getUUID()); dataSet.setDefinition(def);
@Before public void setup() throws Exception { this.presenter = new SQLDataSetEditor(basicAttributesEditor, attributesEditor, columnsAndFilterEditor, previewTable, backendCacheAttributesEditor, clientCacheAttributesEditor, refreshEditor, clientServices, loadingBox, errorEvent, tabChangedEvent, view); when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.SQL); }
@Override public void setValue(final SQLDataSetDef value) { if (value != null && value.getDbTable() != null) { onSelectTable(); } else { onSelectQuery(); } }
@Test public void testErrorListDataSet() { QueryDefinition qd = QueryDefinition.builder().name(EXECUTION_ERROR_LIST_DATASET).expression("SELECT *").source("source").target("target").build(); dataSetsBootstrap.registerDataSetDefinitions(new QueryDefinitionLoaded(qd)); ArgumentCaptor<SQLDataSetDef> argument = ArgumentCaptor.forClass(SQLDataSetDef.class); verify(dataSetDefRegistry).registerDataSetDef(argument.capture()); SQLDataSetDef dataSetDef = argument.getValue(); assertEquals(EXECUTION_ERROR_LIST_DATASET, dataSetDef.getUUID()); assertEquals("target-" + EXECUTION_ERROR_LIST_DATASET, dataSetDef.getName()); assertEquals(KieServerDataSetProvider.TYPE, dataSetDef.getProvider()); assertEquals("SELECT *", dataSetDef.getDbSQL()); assertEquals(13, dataSetDef.getColumns().size()); } }
@Test public void testSetValueUsingTable() { final SQLDataSetDef dataSetDef = mock(SQLDataSetDef.class); when(dataSetDef.getUUID()).thenReturn("uuid1"); when(dataSetDef.getName()).thenReturn("name1"); when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.SQL); when(dataSetDef.getDbTable()).thenReturn("table1"); when(dataSetDef.getDbSQL()).thenReturn(null); presenter.setValue(dataSetDef); assertEquals(false, presenter.isUsingQuery()); verify(view, times(1)).table(); verify(view, times(0)).init(presenter); verify(view, times(0)).initWidgets(any(DropDownEditor.View.class), any(ValueBoxEditor.View.class), any(ValueBoxEditor.View.class) ,any(ValueBoxEditor.View.class)); verify(dataSource, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSchema, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbTable, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSQL, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).query(); }
@Test public void testDataSetSQL() { dataSetDefs.registerDataSetDefinitions(); final ArgumentCaptor<SQLDataSetDef> dataSetDef = ArgumentCaptor.forClass(SQLDataSetDef.class); verify(defRegistry, times(4)).registerDataSetDef(dataSetDef.capture()); for (SQLDataSetDef dataSet : dataSetDef.getAllValues()) { if (dataSet.getDbSQL() == null) { continue; } try { LOGGER.info("Testing SQL DataSet: {}", dataSet.getName()); LOGGER.info("SQL: {}", dataSet.getDbSQL()); PreparedStatement ps = conn.prepareStatement(dataSet.getDbSQL()); ResultSet rs = ps.executeQuery(); ResultSetMetaData resultSetMetaData = rs.getMetaData(); for (int i = 0; i < dataSet.getColumns().size(); i++) { assertTrue("select column name don't match", dataSet.getColumns().get(i).getId().equalsIgnoreCase(resultSetMetaData.getColumnLabel(i + 1))); } ps.close(); final String countSQL = "SELECT COUNT(*) FROM (SELECT * FROM (" + dataSet.getDbSQL() + ") )"; conn.prepareStatement(countSQL).executeQuery(); } catch (Exception ex) { LOGGER.error("Failed to execute query for DataSet {} on DB {}", dataSet.getName(), database.name(), ex); fail(ex.getMessage()); } } }