package io.trygvis.esper.testing.util.sql;
import fj.data.*;
import java.sql.*;
public abstract class SqlOption {
public static SqlOption none() {
return new None<>();
}
public static SqlOption some(A a) {
return new Some<>(a);
}
public static SqlOption fromRs(ResultSet rs) throws SQLException {
if (!rs.next()) {
return none();
}
return some(rs);
}
// -----------------------------------------------------------------------
//
// -----------------------------------------------------------------------
public abstract SqlOption map(SqlF f) throws SQLException;
public SqlOption flatMap(SqlF> f) throws SQLException {
SqlOption> x = map(f);
if (x.isNone()) {
return none();
}
return x.get();
}
public abstract A get() throws SQLException;
public abstract boolean isSome();
public boolean isNone() {
return !isSome();
}
public abstract A getOrElse(A a);
public abstract A getOrElse(SqlP0 p) throws SQLException;
public abstract Option toFj();
public static SqlOption fromNull(A a) {
if (a != null) {
return some(a);
} else {
return none();
}
}
// -----------------------------------------------------------------------
//
// -----------------------------------------------------------------------
private static class None extends SqlOption {
public SqlOption map(SqlF f) {
return none();
}
public A get() throws SQLException {
throw new SQLException("get() on None");
}
public boolean isSome() {
return false;
}
public A getOrElse(A a) {
return a;
}
public A getOrElse(SqlP0 p) throws SQLException {
return p.apply();
}
public Option toFj() {
return Option.none();
}
public String toString() {
return "None";
}
}
private static class Some extends SqlOption {
private final A a;
private Some(A a) {
this.a = a;
}
public SqlOption map(SqlF f) throws SQLException {
return some(f.apply(a));
}
public A get() {
return a;
}
public boolean isSome() {
return true;
}
public A getOrElse(A a) {
return this.a;
}
public A getOrElse(SqlP0 p) throws SQLException {
return a;
}
public Option toFj() {
return Option.some(a);
}
public String toString() {
return "Some(" + a + ")";
}
}
}