
api.sql.SQLDatabaseConnection Maven / Gradle / Ivy
package api.sql;
import api.Column;
import api.DatabaseConnection;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import static api.sql.SQLDatabaseConnection.Row;
/**
* A connection to SQL databases
*/
public interface SQLDatabaseConnection extends DatabaseConnection {
class TableColumn {
private final SQLTable table;
private final Column column;
private final Value value;
public TableColumn(SQLTable table, Column column, Value value) {
this.table = table;
this.column = column;
this.value = value;
}
public SQLTable getTable() {
return table;
}
public Column getColumn() {
return column;
}
public Value getValue() {
return value;
}
}
class Row {
private final Map columnValues;
private final SQLTable table;
public Row(Map columnValues, SQLTable table) {
assert columnValues != null;
assert table != null;
this.columnValues = columnValues;
this.table = table;
}
public Optional get(Column column){
assert column != null;
Optional> columnValueEntry = columnValues.entrySet().stream().filter(new Predicate>() {
@Override
public boolean test(Map.Entry columnValueEntry) {
return columnValueEntry.getKey().getName().equalsIgnoreCase(column.getName())
&& columnValueEntry.getKey().getDatatype().equalsIgnoreCase(column.getDatatype());
}
}).findAny();
return columnValueEntry.map(Map.Entry::getValue);
}
public Set getColumns(){
return columnValues.keySet();
}
public SQLTable getTable() {
return table;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Row row = (Row) o;
if (!(columnValues.size() == row.columnValues.size())){
return false;
}
return columnValues.entrySet().stream().allMatch(
columnValueEntry -> row.columnValues.entrySet().stream().anyMatch(columnValueEntry2 ->
columnValueEntry.getKey().getName().equalsIgnoreCase(columnValueEntry2.getKey().getName())
&& columnValueEntry.getValue().equals(columnValueEntry2.getValue())
&& table.getName().equalsIgnoreCase(((Row) o).getTable().getName())));
}
@Override
public int hashCode() {
return Objects.hash(columnValues);
}
@Override
public String toString() {
return "Row{" +
"columnValues=" + columnValues +
'}';
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy