Search in sources :

Example 21 with Row

use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.

the class AseDdlReader method getTriggers.

@Override
public List<Trigger> getTriggers(final String catalog, final String schema, final String tableName) throws SqlException {
    List<Trigger> triggers = new ArrayList<Trigger>();
    log.debug("Reading triggers for: " + tableName);
    JdbcSqlTemplate sqlTemplate = (JdbcSqlTemplate) platform.getSqlTemplate();
    String sql = "SELECT " + "trig.name AS trigger_name, " + "trig.id AS trigger_id, " + "tab.name AS table_name, " + "tab.id AS table_id, " + "db.name AS catalog, " + "trig.crdate AS created_on, " + "tab.deltrig AS table_delete_trigger_id, " + "tab.instrig AS table_insert_trigger_id, " + "tab.updtrig AS table_update_trigger_id " + "FROM sysobjects AS trig " + "INNER JOIN sysobjects AS tab " + "ON trig.id = tab.deltrig " + "OR trig.id = tab.instrig " + "OR trig.id = tab.updtrig " + "INNER JOIN master.dbo.sysdatabases AS db " + "ON db.dbid = db_id() " + "WHERE tab.name = ? AND db.name = ? ";
    triggers = sqlTemplate.query(sql, new ISqlRowMapper<Trigger>() {

        public Trigger mapRow(Row row) {
            Trigger trigger = new Trigger();
            trigger.setName(row.getString("trigger_name"));
            trigger.setTableName(row.getString("table_name"));
            trigger.setCatalogName(row.getString("catalog"));
            trigger.setEnabled(true);
            trigger.setSource("");
            if (row.getString("table_insert_trigger_id").equals(row.getString("trigger_id"))) {
                trigger.setTriggerType(TriggerType.INSERT);
                row.put("trigger_type", "insert");
            } else if (row.getString("table_delete_trigger_id").equals(row.getString("trigger_id"))) {
                trigger.setTriggerType(TriggerType.DELETE);
                row.put("trigger_type", "delete");
            } else if (row.getString("table_update_trigger_id").equals(row.getString("trigger_id"))) {
                trigger.setTriggerType(TriggerType.UPDATE);
                row.put("trigger_type", "update");
            }
            row.remove("table_insert_trigger_id");
            row.remove("table_delete_trigger_id");
            row.remove("table_update_trigger_id");
            trigger.setMetaData(row);
            return trigger;
        }
    }, tableName, catalog);
    for (final Trigger trigger : triggers) {
        int id = (Integer) trigger.getMetaData().get("trigger_id");
        String sourceSql = "SELECT text " + "FROM syscomments " + "WHERE id = ? " + "ORDER BY colid ";
        sqlTemplate.query(sourceSql, new ISqlRowMapper<Trigger>() {

            public Trigger mapRow(Row row) {
                trigger.setSource(trigger.getSource() + "\n" + row.getString("text"));
                return trigger;
            }
        }, id);
    }
    return triggers;
}
Also used : JdbcSqlTemplate(org.jumpmind.db.sql.JdbcSqlTemplate) Trigger(org.jumpmind.db.model.Trigger) ArrayList(java.util.ArrayList) Row(org.jumpmind.db.sql.Row) ISqlRowMapper(org.jumpmind.db.sql.ISqlRowMapper)

Example 22 with Row

use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.

the class GroupletService method getGrouplets.

public List<Grouplet> getGrouplets(boolean refreshCache) {
    long maxCacheTime = parameterService.getLong(ParameterConstants.CACHE_TIMEOUT_GROUPLETS_IN_MS);
    List<Grouplet> all = cache;
    if (all == null || System.currentTimeMillis() - lastCacheTime >= maxCacheTime || lastCacheTime == 0 || refreshCache) {
        ISqlTemplate sqlTemplate = platform.getSqlTemplate();
        final Map<String, Grouplet> groupletMap = new HashMap<String, Grouplet>();
        all = sqlTemplate.query(getSql("selectGroupletSql"), new ISqlRowMapper<Grouplet>() {

            public Grouplet mapRow(Row rs) {
                Grouplet grouplet = new Grouplet();
                grouplet.setGroupletId(rs.getString("grouplet_id"));
                grouplet.setDescription(rs.getString("description"));
                grouplet.setGroupletLinkPolicy(GroupletLinkPolicy.valueOf(rs.getString("grouplet_link_policy")));
                grouplet.setCreateTime(rs.getDateTime("create_time"));
                grouplet.setLastUpdateBy(rs.getString("last_update_by"));
                grouplet.setLastUpdateTime(rs.getDateTime("last_update_time"));
                groupletMap.put(grouplet.getGroupletId(), grouplet);
                return grouplet;
            }
        });
        sqlTemplate.query(getSql("selectGroupletLinkSql"), new ISqlRowMapper<GroupletLink>() {

            public GroupletLink mapRow(Row rs) {
                GroupletLink groupletLink = new GroupletLink();
                String groupletId = rs.getString("grouplet_id");
                Grouplet grouplet = groupletMap.get(groupletId);
                groupletLink.setExternalId(rs.getString("external_id"));
                groupletLink.setCreateTime(rs.getDateTime("create_time"));
                groupletLink.setLastUpdateBy(rs.getString("last_update_by"));
                groupletLink.setLastUpdateTime(rs.getDateTime("last_update_time"));
                if (grouplet != null) {
                    grouplet.getGroupletLinks().add(groupletLink);
                }
                return groupletLink;
            }
        });
        sqlTemplate.query(getSql("selectTriggerRouterGroupletSql"), new ISqlRowMapper<TriggerRouterGrouplet>() {

            public TriggerRouterGrouplet mapRow(Row rs) {
                TriggerRouterGrouplet trGrouplet = new TriggerRouterGrouplet();
                String groupletId = rs.getString("grouplet_id");
                Grouplet grouplet = groupletMap.get(groupletId);
                trGrouplet.setAppliesWhen(AppliesWhen.valueOf(rs.getString("applies_when")));
                trGrouplet.setRouterId(rs.getString("router_id"));
                trGrouplet.setTriggerId(rs.getString("trigger_id"));
                trGrouplet.setCreateTime(rs.getDateTime("create_time"));
                trGrouplet.setLastUpdateBy(rs.getString("last_update_by"));
                trGrouplet.setLastUpdateTime(rs.getDateTime("last_update_time"));
                if (grouplet != null) {
                    grouplet.getTriggerRouterGrouplets().add(trGrouplet);
                }
                return trGrouplet;
            }
        });
        cache = all;
        lastCacheTime = System.currentTimeMillis();
    }
    return all;
}
Also used : HashMap(java.util.HashMap) TriggerRouterGrouplet(org.jumpmind.symmetric.model.TriggerRouterGrouplet) ISqlTemplate(org.jumpmind.db.sql.ISqlTemplate) TriggerRouterGrouplet(org.jumpmind.symmetric.model.TriggerRouterGrouplet) Grouplet(org.jumpmind.symmetric.model.Grouplet) GroupletLink(org.jumpmind.symmetric.model.GroupletLink) Row(org.jumpmind.db.sql.Row) ISqlRowMapper(org.jumpmind.db.sql.ISqlRowMapper)

Example 23 with Row

use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.

the class TableExtractDataReaderSource method startNewCursor.

protected void startNewCursor() {
    DatabaseInfo dbInfo = platform.getDatabaseInfo();
    String sql = String.format("select * from %s %s", table.getQualifiedTableName(dbInfo.getDelimiterToken(), dbInfo.getCatalogSeparator(), dbInfo.getSchemaSeparator()), StringUtils.isNotBlank(whereClause) ? " where " + whereClause : "");
    this.cursor = platform.getSqlTemplate().queryForCursor(sql, new ISqlRowMapper<CsvData>() {

        public CsvData mapRow(Row row) {
            return new CsvData(DataEventType.INSERT, toStringData(row, table.getPrimaryKeyColumns()), toStringData(row, table.getColumns()));
        }
    });
}
Also used : DatabaseInfo(org.jumpmind.db.platform.DatabaseInfo) Row(org.jumpmind.db.sql.Row) ISqlRowMapper(org.jumpmind.db.sql.ISqlRowMapper) CsvData(org.jumpmind.symmetric.io.data.CsvData)

Example 24 with Row

use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.

the class RestService method queryNodeImpl.

private QueryResults queryNodeImpl(ISymmetricEngine engine, String sql, boolean isQuery) {
    QueryResults results = new QueryResults();
    org.jumpmind.symmetric.web.rest.model.Row xmlRow = null;
    org.jumpmind.symmetric.web.rest.model.Column xmlColumn = null;
    ISqlTemplate sqlTemplate = engine.getSqlTemplate();
    try {
        if (!isQuery) {
            int updates = sqlTemplate.update(sql);
            results.setNbrResults(updates);
            return results;
        }
        List<Row> rows = sqlTemplate.query(sql);
        int nbrRows = 0;
        for (Row row : rows) {
            xmlRow = new org.jumpmind.symmetric.web.rest.model.Row();
            Iterator<Map.Entry<String, Object>> itr = row.entrySet().iterator();
            int columnOrdinal = 0;
            while (itr.hasNext()) {
                xmlColumn = new org.jumpmind.symmetric.web.rest.model.Column();
                xmlColumn.setOrdinal(++columnOrdinal);
                Map.Entry<String, Object> pair = (Map.Entry<String, Object>) itr.next();
                xmlColumn.setName(pair.getKey());
                if (pair.getValue() != null) {
                    xmlColumn.setValue(pair.getValue().toString());
                }
                xmlRow.getColumnData().add(xmlColumn);
            }
            xmlRow.setRowNum(++nbrRows);
            results.getResults().add(xmlRow);
        }
        results.setNbrResults(nbrRows);
    } catch (Exception ex) {
        log.error("Exception while executing sql.", ex);
        throw new NotAllowedException("Error while executing sql %s.  Error is %s", sql, ex.getCause().getMessage());
    }
    return results;
}
Also used : QueryResults(org.jumpmind.symmetric.web.rest.model.QueryResults) IOException(java.io.IOException) IoException(org.jumpmind.exception.IoException) ISqlTemplate(org.jumpmind.db.sql.ISqlTemplate) Row(org.jumpmind.db.sql.Row) Map(java.util.Map)

Example 25 with Row

use of org.jumpmind.db.sql.Row in project symmetric-ds by JumpMind.

the class RouterService method getReadyChannels.

protected Set<String> getReadyChannels() {
    List<DataGap> dataGaps = gapDetector.getDataGaps();
    int dataIdSqlType = engine.getSymmetricDialect().getSqlTypeForIds();
    int numberOfGapsToQualify = parameterService.getInt(ParameterConstants.ROUTING_MAX_GAPS_TO_QUALIFY_IN_SQL, 100);
    int maxGapsBeforeGreaterThanQuery = parameterService.getInt(ParameterConstants.ROUTING_DATA_READER_THRESHOLD_GAPS_TO_USE_GREATER_QUERY, 100);
    String sql;
    Object[] args;
    int[] types;
    if (maxGapsBeforeGreaterThanQuery > 0 && dataGaps.size() > maxGapsBeforeGreaterThanQuery) {
        sql = getSql("selectChannelsUsingStartDataId");
        args = new Object[] { dataGaps.get(0).getStartId() };
        types = new int[] { dataIdSqlType };
    } else {
        sql = qualifyUsingDataGaps(dataGaps, numberOfGapsToQualify, getSql("selectChannelsUsingGapsSql"));
        int numberOfArgs = 2 * (numberOfGapsToQualify < dataGaps.size() ? numberOfGapsToQualify : dataGaps.size());
        args = new Object[numberOfArgs];
        types = new int[numberOfArgs];
        for (int i = 0; i < numberOfGapsToQualify && i < dataGaps.size(); i++) {
            DataGap gap = dataGaps.get(i);
            args[i * 2] = gap.getStartId();
            types[i * 2] = dataIdSqlType;
            if ((i + 1) == numberOfGapsToQualify && (i + 1) < dataGaps.size()) {
                args[i * 2 + 1] = dataGaps.get(dataGaps.size() - 1).getEndId();
            } else {
                args[i * 2 + 1] = gap.getEndId();
            }
            types[i * 2 + 1] = dataIdSqlType;
        }
    }
    final Set<String> readyChannels = new HashSet<String>();
    sqlTemplate.query(sql, new ISqlRowMapper<String>() {

        public String mapRow(Row row) {
            readyChannels.add(row.getString("channel_id"));
            return null;
        }
    }, args, types);
    return readyChannels;
}
Also used : DataGap(org.jumpmind.symmetric.model.DataGap) Row(org.jumpmind.db.sql.Row) HashSet(java.util.HashSet)

Aggregations

Row (org.jumpmind.db.sql.Row)66 ArrayList (java.util.ArrayList)27 ISqlRowMapper (org.jumpmind.db.sql.ISqlRowMapper)23 Trigger (org.jumpmind.db.model.Trigger)19 JdbcSqlTemplate (org.jumpmind.db.sql.JdbcSqlTemplate)19 DmlStatement (org.jumpmind.db.sql.DmlStatement)13 Column (org.jumpmind.db.model.Column)11 Table (org.jumpmind.db.model.Table)9 Date (java.util.Date)8 HashMap (java.util.HashMap)7 ISqlTemplate (org.jumpmind.db.sql.ISqlTemplate)7 Test (org.junit.Test)5 HashSet (java.util.HashSet)3 IDatabasePlatform (org.jumpmind.db.platform.IDatabasePlatform)3 SqlException (org.jumpmind.db.sql.SqlException)3 NetworkedNode (org.jumpmind.symmetric.model.NetworkedNode)3 Node (org.jumpmind.symmetric.model.Node)3 Map (java.util.Map)2 NotImplementedException (org.apache.commons.lang.NotImplementedException)2 Database (org.jumpmind.db.model.Database)2