package com.airbnb.airpal.sql.dao;
import com.airbnb.airpal.presto.Table;
import com.airbnb.airpal.sql.Util;
import com.airbnb.airpal.sql.beans.TableRow;
import com.hubspot.rosetta.jdbi.RosettaBinder;
import lombok.extern.slf4j.Slf4j;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.sqlobject.GetGeneratedKeys;
import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.mixins.GetHandle;
import java.util.Collections;
import java.util.List;
import static java.lang.String.format;
@Slf4j
public abstract class TableDAO
implements GetHandle
{
@SqlBatch(
"INSERT INTO tables (connector_id, schema_, table_, columns) " +
"VALUES (:connectorId, :schema, :table, :columns)")
@GetGeneratedKeys
public abstract void createTables(@RosettaBinder Iterable<Table> tables);
public List<TableRow> getTables(List<Table> tables)
{
try (Handle handle = getHandle()) {
return handle
.createQuery(format("SELECT * FROM tables WHERE %s", Util.getTableCondition(tables)))
.mapTo(TableRow.class)
.list();
} catch (Exception e) {
log.error("getTables caught exception", e);
return Collections.emptyList();
}
}
}