use of com.github.mgramin.sqlboot.model.uri.impl.DbUri in project sql-boot by sql-boot.
the class TableJdbcResourceType method read.
@Override
public Stream<DbResource> read(final Uri uri) throws BootException {
try {
final List<DbResource> result = new ArrayList<>();
final ResultSet tables = dataSource.getConnection().getMetaData().getTables(null, uri.path(0), uri.path(1), new String[] { "TABLE" });
final ResultSetMetaData tableMetaData = tables.getMetaData();
final int columnsCount = tableMetaData.getColumnCount();
while (tables.next()) {
final String tableSchem = columnsCount >= 2 ? tables.getString(2) : null;
final String tableName = columnsCount >= 3 ? tables.getString(3) : null;
final Map<String, Object> props = new LinkedHashMap<>();
int i = 1;
for (String s : properties.keySet()) {
props.put(s, columnsCount >= i ? tables.getString(i++) : null);
}
result.add(new DbResourceImpl(tableName, this, new DbUri(name(), asList(tableSchem, tableName)), props));
}
return result.stream();
} catch (SQLException e) {
throw new BootException(e);
}
}
use of com.github.mgramin.sqlboot.model.uri.impl.DbUri in project sql-boot by sql-boot.
the class FkJdbcResourceType method read.
@Override
public Stream<DbResource> read(final Uri uri) throws BootException {
try {
final TableJdbcResourceType tableJdbcResourceType = new TableJdbcResourceType(dataSource);
final Stream<DbResource> tables = tableJdbcResourceType.read(uri);
final List<DbResource> result = new ArrayList<>();
for (final DbResource table : tables.collect(toList())) {
final String tableSchem = table.headers().get("TABLE_SCHEM").toString();
final String tableName = table.headers().get("TABLE_NAME").toString();
final ResultSet foreignKeys = dataSource.getConnection().getMetaData().getImportedKeys(null, tableSchem, tableName);
final ResultSetMetaData tableMetaData = foreignKeys.getMetaData();
final int columnsCount = tableMetaData.getColumnCount();
while (foreignKeys.next()) {
final String fkName = columnsCount >= 12 ? foreignKeys.getString(12) : null;
final Map<String, Object> props = new LinkedHashMap<>();
int i = 1;
for (String s : properties.keySet()) {
props.put(s, columnsCount >= i ? foreignKeys.getString(i++) : null);
}
result.add(new DbResourceImpl(fkName, this, new DbUri(name(), asList(tableSchem, tableName, fkName)), props));
}
}
return result.stream();
} catch (SQLException e) {
throw new BootException(e);
}
}
use of com.github.mgramin.sqlboot.model.uri.impl.DbUri in project sql-boot by sql-boot.
the class PkJdbcResourceType method read.
@Override
public Stream<DbResource> read(final Uri uri) throws BootException {
try {
final TableJdbcResourceType tableJdbcResourceType = new TableJdbcResourceType(dataSource);
final Stream<DbResource> tables = tableJdbcResourceType.read(uri);
final List<DbResource> result = new ArrayList<>();
for (final DbResource table : tables.collect(toList())) {
final String tableSchem = table.headers().get("TABLE_SCHEM").toString();
final String tableName = table.headers().get("TABLE_NAME").toString();
final ResultSet primaryKeys = dataSource.getConnection().getMetaData().getPrimaryKeys(null, tableSchem, tableName);
final ResultSetMetaData tableMetaData = primaryKeys.getMetaData();
final int columnsCount = tableMetaData.getColumnCount();
while (primaryKeys.next()) {
final String pkName = columnsCount >= 6 ? primaryKeys.getString(6) : null;
final Map<String, Object> props = new LinkedHashMap<>();
int i = 1;
for (String s : properties.keySet()) {
props.put(s, columnsCount >= i ? primaryKeys.getString(i++) : null);
}
result.add(new DbResourceImpl(pkName, this, new DbUri(name(), asList(tableSchem, tableName, pkName)), props));
}
}
return result.stream();
} catch (SQLException e) {
throw new BootException(e);
}
}
use of com.github.mgramin.sqlboot.model.uri.impl.DbUri in project sql-boot by sql-boot.
the class ChildTableJdbcResourceType method read.
@Override
public Stream<DbResource> read(final Uri uri) throws BootException {
try {
final TableJdbcResourceType tableJdbcResourceType = new TableJdbcResourceType(dataSource);
final Stream<DbResource> tables = tableJdbcResourceType.read(uri);
final List<DbResource> result = new ArrayList<>();
try (final Connection connection = dataSource.getConnection()) {
for (final DbResource table : tables.collect(toList())) {
final String tableSchem = table.headers().get("TABLE_SCHEM").toString();
final String tableName = table.headers().get("TABLE_NAME").toString();
final ResultSet parentTables = connection.getMetaData().getExportedKeys(null, tableSchem, tableName);
final ResultSetMetaData tableMetaData = parentTables.getMetaData();
final int columnsCount = tableMetaData.getColumnCount();
while (parentTables.next()) {
final String pkName = columnsCount >= 13 ? parentTables.getString(13) : null;
final Map<String, Object> props = new LinkedHashMap<>();
int i = 1;
for (String s : properties.keySet()) {
props.put(s, columnsCount >= i ? parentTables.getString(i++) : null);
}
result.add(new DbResourceImpl(pkName, this, new DbUri(name(), asList(tableSchem, tableName, pkName)), props));
}
}
}
return result.stream();
} catch (SQLException e) {
throw new BootException(e);
}
}
use of com.github.mgramin.sqlboot.model.uri.impl.DbUri in project sql-boot by sql-boot.
the class ParentTableJdbcResourceType method read.
@Override
public Stream<DbResource> read(final Uri uri) throws BootException {
try {
final TableJdbcResourceType tableJdbcResourceType = new TableJdbcResourceType(dataSource);
final Stream<DbResource> tables = tableJdbcResourceType.read(uri);
final List<DbResource> result = new ArrayList<>();
try (final Connection connection = dataSource.getConnection()) {
for (final DbResource table : tables.collect(toList())) {
final String tableSchem = table.headers().get("TABLE_SCHEM").toString();
final String tableName = table.headers().get("TABLE_NAME").toString();
final ResultSet parentTables = connection.getMetaData().getImportedKeys(null, tableSchem, tableName);
final ResultSetMetaData tableMetaData = parentTables.getMetaData();
final int columnsCount = tableMetaData.getColumnCount();
while (parentTables.next()) {
final String pkName = columnsCount >= 12 ? parentTables.getString(12) : null;
final Map<String, Object> props = new LinkedHashMap<>();
int i = 1;
for (String s : properties.keySet()) {
props.put(s, columnsCount >= i ? parentTables.getString(i++) : null);
}
result.add(new DbResourceImpl(pkName, this, new DbUri(name(), asList(tableSchem, tableName, pkName)), props));
}
}
}
return result.stream();
} catch (SQLException e) {
throw new BootException(e);
}
}
Aggregations