All Downloads are FREE. Search and download functionalities are using the official Maven repository.

api.sql.SQLDatabaseConnection Maven / Gradle / Ivy

package api.sql;

import api.Column;
import api.DatabaseConnection;
import api.Table;

import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;

import static api.sql.SQLDatabaseConnection.Row;
import static api.sql.SQLDatabaseConnection.TableColumn;

/**
 * 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;

        public Row(Map columnValues) {
            assert columnValues != null;
            this.columnValues = columnValues;
        }

        public Optional get(Column column){
            assert column != null;
            if (!columnValues.containsKey(column)){
                return Optional.empty();
            }
            return Optional.of(columnValues.get(column));
        }

        public Set getColumns(){
            return columnValues.keySet();
        }

        @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())));
        }

        @Override
        public int hashCode() {
            return Objects.hash(columnValues);
        }

        @Override
        public String toString() {
            return "Row{" +
                    "columnValues=" + columnValues +
                    '}';
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy