class TableSaver {

    protected TableSaveStrategy createSaveStrategy() {
        
        // if delete is in effect, we don't need the UPDATE part of "UPSERT"
        if (deleteTableData) {
            return new SaveViaDeleteThenInsert(connector, tableName);
        }

        if (!mergeByPk && mergeByColumns == null) {
            return new SaveViaInsert(connector, tableName);
        }

        String[] keyColumns = mergeByPk ? getPkColumns() : mergeByColumns;
        return deleteUnmatchedRows
                ? new FullSync(connector, tableName, keyColumns)
                : new SaveViaUpsert(connector, tableName, keyColumns);
    }

    public  TableSaver(JdbcConnector connector, TableFQName tableName);

}