diff --git a/.gitmodules b/.gitmodules index d2ffc0c9c6..465e70960e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,7 @@ [submodule "extern/log"] path = extern/log url = ../../lsst/log +[submodule "extern/hyrise-sql-parser"] + path = extern/hyrise-sql-parser + url = https://github.com/lsst/hyrise-sql-parser + branch = qserv-compat diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b1ee2c3db..d9d3bc0d6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,12 +7,18 @@ project(Qserv enable_testing() +option(QSERV_USE_HYRISE_SQL_PARSER + "Use the Hyrise SQL parser to build query IR for SELECT statements, instead of the ANTLR-based parser" + ON +) + include(GNUInstallDirs) set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/install) add_subdirectory(bin) add_subdirectory(doc) add_subdirectory(etc) +add_subdirectory(extern/hyrise-sql-parser) add_subdirectory(extern/log) add_subdirectory(extern/sphgeom) add_subdirectory(python) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 0b88a81811..f6995f74b0 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -19,11 +19,11 @@ add_custom_target(docs-linkcheck COMMENT "Checking documentation links with Sphinx" COMMAND ${SPHINX_EXECUTABLE} -b linkcheck - -d ${CMAKE_CURRENT_BINARY_DIR}/doctrees + -d ${CMAKE_CURRENT_BINARY_DIR}/doctrees-linkcheck -n -W ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/linkcheck BYPRODUCTS - ${CMAKE_CURRENT_BINARY_DIR}/doctrees + ${CMAKE_CURRENT_BINARY_DIR}/doctrees-linkcheck ${CMAKE_CURRENT_BINARY_DIR}/linkcheck ) diff --git a/extern/hyrise-sql-parser b/extern/hyrise-sql-parser new file mode 160000 index 0000000000..17e8d126e6 --- /dev/null +++ b/extern/hyrise-sql-parser @@ -0,0 +1 @@ +Subproject commit 17e8d126e6774cfdc1a30f1195fa755e590474e1 diff --git a/src/ccontrol/CMakeLists.txt b/src/ccontrol/CMakeLists.txt index c1cb26ddb3..4b8bc681e2 100644 --- a/src/ccontrol/CMakeLists.txt +++ b/src/ccontrol/CMakeLists.txt @@ -5,6 +5,7 @@ target_include_directories(ccontrol PRIVATE ) target_sources(ccontrol PRIVATE + HyriseAdapter.cc MergingHandler.cc ParseAdapters.cc ParseListener.cc @@ -27,11 +28,16 @@ target_link_libraries(ccontrol PUBLIC cconfig css global + hyrise_sql_parser::sqlparser log parser sphgeom ) +if(QSERV_USE_HYRISE_SQL_PARSER) + target_compile_definitions(ccontrol PUBLIC QSERV_USE_HYRISE_SQL_PARSER) +endif() + install(TARGETS ccontrol) FUNCTION(ccontrol_tests) @@ -58,7 +64,21 @@ FUNCTION(ccontrol_tests) ENDFUNCTION() ccontrol_tests( - testAntlr4GeneratedIR testCControl + testParserCorpus testUserQueryType ) + +target_compile_definitions(testParserCorpus PRIVATE + QSERV_PARSER_CORPUS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/testdata/parser-corpus" +) + +if(QSERV_USE_HYRISE_SQL_PARSER) + ccontrol_tests( + testHyriseGeneratedIR + ) +else() + ccontrol_tests( + testAntlr4GeneratedIR + ) +endif() diff --git a/src/ccontrol/HyriseAdapter.cc b/src/ccontrol/HyriseAdapter.cc new file mode 100644 index 0000000000..66565f8600 --- /dev/null +++ b/src/ccontrol/HyriseAdapter.cc @@ -0,0 +1,935 @@ +// -*- LSST-C++ -*- +/* + * LSST Data Management System + * Copyright 2026 LSST. + * + * This product includes software developed by the + * LSST Project (http://www.lsst.org/). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the LSST License Statement and + * the GNU General Public License along with this program. If not, + * see . + */ + +#include "ccontrol/HyriseAdapter.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "SQLParser.h" +#include "SQLParserResult.h" +#include "sql/Expr.h" +#include "sql/SelectStatement.h" +#include "sql/Table.h" + +#include "global/constants.h" +#include "parser/ParseException.h" +#include "query/AndTerm.h" +#include "query/AreaRestrictor.h" +#include "query/BetweenPredicate.h" +#include "query/BoolFactor.h" +#include "query/BoolTermFactor.h" +#include "query/ColumnRef.h" +#include "query/CompPredicate.h" +#include "query/FromList.h" +#include "query/FuncExpr.h" +#include "query/GroupByClause.h" +#include "query/HavingClause.h" +#include "query/InPredicate.h" +#include "query/JoinRef.h" +#include "query/JoinSpec.h" +#include "query/LikePredicate.h" +#include "query/NullPredicate.h" +#include "query/OrderByClause.h" +#include "query/OrTerm.h" +#include "query/SelectList.h" +#include "query/SelectStmt.h" +#include "query/TableRef.h" +#include "query/ValueExpr.h" +#include "query/ValueExprPredicate.h" +#include "query/ValueFactor.h" +#include "query/WhereClause.h" + +namespace { + +using namespace lsst::qserv; + +// Forward declarations +void validateStatement(hsql::SelectStatement const* stmt); +void validateExpression(hsql::Expr const* expr); +std::shared_ptr buildValueExpr(hsql::Expr const* expr); +std::shared_ptr buildBoolFactorTerm(hsql::Expr const* expr); +std::shared_ptr buildBoolTerm(hsql::Expr const* expr); + +std::string nullToEmpty(char const* value) { return value == nullptr ? std::string() : std::string(value); } + +[[noreturn]] void unsupported(std::string const& what) { + throw parser::ParseException("HyriseAdapter unsupported SQL construct: " + what); +} + +std::string unparseableQueryError(std::string const& sql) { + return std::string("Failed to instantiate query: \"") + sql + '"'; +} + +std::string formatFloat(double value) { + // Note using: std::to_chars because it is locale-independent + // and emits the shortest representation that round-trips back to the same double + if (!std::isfinite(value)) unsupported("infinite floating-point literal"); + std::array buf; + auto const [ptr, ec] = std::to_chars(buf.data(), buf.data() + buf.size(), value); + if (ec != std::errc()) unsupported("unrepresentable floating-point literal"); + return std::string(buf.data(), ptr); +} + +// Human-readable names for the Hyrise enum values to help produce better error messages. +std::string exprTypeName(hsql::ExprType type) { + switch (type) { + case hsql::kExprCast: + return "CAST expression"; + case hsql::kExprExtract: + return "EXTRACT expression"; + case hsql::kExprSelect: + return "scalar subquery"; + case hsql::kExprParameter: + return "parameter placeholder"; + case hsql::kExprArray: + return "array literal"; + case hsql::kExprArrayIndex: + return "array subscript"; + case hsql::kExprLiteralDate: + return "date literal"; + case hsql::kExprLiteralInterval: + return "interval literal"; + case hsql::kExprHint: + return "optimizer hint"; + default: + return "expression type " + std::to_string(type); + } +} + +std::string operatorName(hsql::OperatorType op) { + switch (op) { + case hsql::kOpILike: + return "ILIKE"; + case hsql::kOpExists: + return "EXISTS"; + case hsql::kOpCase: + return "CASE"; + case hsql::kOpNot: + return "NOT"; + case hsql::kOpLike: + return "LIKE"; + case hsql::kOpAnd: + return "AND"; + case hsql::kOpOr: + return "OR"; + case hsql::kOpIn: + return "IN"; + case hsql::kOpBetween: + return "BETWEEN"; + case hsql::kOpIsNull: + return "IS NULL"; + default: + return "operator type " + std::to_string(op); + } +} + +void validateIdentifier(char const* identifier) { + if (identifier != nullptr && identifier[0] == '_') { + throw parser::ParseException("Error parsing query, near \"" + nullToEmpty(identifier) + + "\", Identifiers in Qserv may not start with an underscore."); + } +} + +void validateAlias(hsql::Alias const* alias) { + if (alias == nullptr) return; + validateIdentifier(alias->name); + if (alias->columns != nullptr) { + for (auto const* column : *alias->columns) { + validateIdentifier(column); + } + } +} + +void validateOrder(hsql::OrderDescription const* order) { + if (order != nullptr) validateExpression(order->expr); +} + +void validateLimit(hsql::LimitDescription const* limit) { + if (limit == nullptr) return; + validateExpression(limit->limit); + validateExpression(limit->offset); +} + +void validateExpression(hsql::Expr const* expr) { + if (expr == nullptr) return; + if (expr->type == hsql::kExprOperator && expr->opType == hsql::kOpCase) { + throw parser::ParseException("qserv can not parse query: CASE expressions are not supported."); + } + if (expr->type == hsql::kExprColumnRef || expr->type == hsql::kExprStar) { + validateIdentifier(expr->schema); + validateIdentifier(expr->table); + validateIdentifier(expr->name); + } else if (expr->type == hsql::kExprFunctionRef) { + validateIdentifier(expr->schema); + validateIdentifier(expr->name); + } + validateIdentifier(expr->alias); + validateExpression(expr->expr); + validateExpression(expr->expr2); + if (expr->exprList != nullptr) { + for (auto const* child : *expr->exprList) { + validateExpression(child); + } + } + validateStatement(expr->select); + if (expr->windowDescription != nullptr) { + if (expr->windowDescription->partitionList != nullptr) { + for (auto const* partition : *expr->windowDescription->partitionList) { + validateExpression(partition); + } + } + if (expr->windowDescription->orderList != nullptr) { + for (auto const* order : *expr->windowDescription->orderList) { + validateOrder(order); + } + } + } +} + +void validateTable(hsql::TableRef const* table) { + if (table == nullptr) return; + validateIdentifier(table->schema); + validateIdentifier(table->name); + validateAlias(table->alias); + validateStatement(table->select); + if (table->list != nullptr) { + for (auto const* child : *table->list) { + validateTable(child); + } + } + if (table->join != nullptr) { + validateTable(table->join->left); + validateTable(table->join->right); + validateExpression(table->join->condition); + if (table->join->namedColumns != nullptr) { + for (auto const* column : *table->join->namedColumns) { + validateIdentifier(column); + } + } + } +} + +void validateStatement(hsql::SelectStatement const* stmt) { + if (stmt == nullptr) return; + if (stmt->selectList != nullptr) { + for (auto const* expr : *stmt->selectList) { + validateExpression(expr); + } + } + validateTable(stmt->fromTable); + validateExpression(stmt->whereClause); + if (stmt->groupBy != nullptr) { + if (stmt->groupBy->columns != nullptr) { + for (auto const* expr : *stmt->groupBy->columns) { + validateExpression(expr); + } + } + validateExpression(stmt->groupBy->having); + } + validateExpression(stmt->having); + if (stmt->order != nullptr) { + for (auto const* order : *stmt->order) { + validateOrder(order); + } + } + validateLimit(stmt->limit); + if (stmt->withDescriptions != nullptr) { + for (auto const* with : *stmt->withDescriptions) { + validateIdentifier(with->alias); + validateStatement(with->select); + } + } + if (stmt->setOperations != nullptr) { + for (auto const* setOp : *stmt->setOperations) { + validateStatement(setOp->nestedSelectStatement); + if (setOp->resultOrder != nullptr) { + for (auto const* order : *setOp->resultOrder) { + validateOrder(order); + } + } + validateLimit(setOp->resultLimit); + } + } + if (stmt->lockings != nullptr) { + for (auto const* locking : *stmt->lockings) { + if (locking->tables != nullptr) { + for (auto const* table : *locking->tables) { + validateIdentifier(table); + } + } + } + } +} + +query::ValueExpr::Op valueOp(hsql::OperatorType op) { + switch (op) { + case hsql::kOpPlus: + return query::ValueExpr::PLUS; + case hsql::kOpMinus: + return query::ValueExpr::MINUS; + case hsql::kOpAsterisk: + return query::ValueExpr::MULTIPLY; + case hsql::kOpSlash: + return query::ValueExpr::DIVIDE; + case hsql::kOpPercentage: + return query::ValueExpr::MODULO; + case hsql::kOpMod: + return query::ValueExpr::MOD; + case hsql::kOpDiv: + return query::ValueExpr::DIV; + case hsql::kOpCaret: + case hsql::kOpBitXor: + return query::ValueExpr::BIT_XOR; + case hsql::kOpBitAnd: + return query::ValueExpr::BIT_AND; + case hsql::kOpBitOr: + return query::ValueExpr::BIT_OR; + case hsql::kOpBitShiftLeft: + return query::ValueExpr::BIT_SHIFT_LEFT; + case hsql::kOpBitShiftRight: + return query::ValueExpr::BIT_SHIFT_RIGHT; + default: + unsupported("value operator " + operatorName(op)); + } +} + +query::CompPredicate::OpType compOp(hsql::OperatorType op) { + switch (op) { + case hsql::kOpEquals: + return query::CompPredicate::EQUALS_OP; + case hsql::kOpNullSafeEquals: + return query::CompPredicate::NULL_SAFE_EQUALS_OP; + case hsql::kOpNotEquals: + return query::CompPredicate::NOT_EQUALS_OP; + case hsql::kOpLess: + return query::CompPredicate::LESS_THAN_OP; + case hsql::kOpLessEq: + return query::CompPredicate::LESS_THAN_OR_EQUALS_OP; + case hsql::kOpGreater: + return query::CompPredicate::GREATER_THAN_OP; + case hsql::kOpGreaterEq: + return query::CompPredicate::GREATER_THAN_OR_EQUALS_OP; + default: + unsupported("comparison operator " + operatorName(op)); + } +} + +std::shared_ptr buildColumnRef(hsql::Expr const* expr) { + if (expr->type != hsql::kExprColumnRef) unsupported("non-column column reference"); + std::string schema = nullToEmpty(expr->schema); + std::string table = nullToEmpty(expr->table); + std::string name = nullToEmpty(expr->name); + if (name.empty()) unsupported("empty column reference"); + if (!schema.empty() || !table.empty()) { + return std::make_shared(schema, table, name); + } + return std::make_shared(name); +} + +std::shared_ptr buildSimpleBoolTerm(std::shared_ptr const& term, + bool hasNot = false) { + return std::make_shared( + query::BoolTerm::PtrVector{std::make_shared(term, hasNot)}); +} + +bool isQservRestrictorName(std::string const& name) { + return boost::algorithm::iequals(name, "qserv_areaspec_box") || + boost::algorithm::iequals(name, "qserv_areaspec_circle") || + boost::algorithm::iequals(name, "qserv_areaspec_ellipse") || + boost::algorithm::iequals(name, "qserv_areaspec_poly"); +} + +bool isIntegerLiteral(hsql::Expr const* expr) { + return expr != nullptr && + (expr->type == hsql::kExprLiteralInt || expr->type == hsql::kExprLiteralIntString); +} + +std::shared_ptr buildValueFactor(hsql::Expr const* expr) { + if (expr == nullptr) unsupported("null expression"); + switch (expr->type) { + case hsql::kExprColumnRef: + return query::ValueFactor::newColumnRefFactor(buildColumnRef(expr)); + + case hsql::kExprStar: + return query::ValueFactor::newStarFactor(nullToEmpty(expr->table)); + + case hsql::kExprLiteralInt: + return query::ValueFactor::newConstFactor(std::to_string(expr->ival)); + + case hsql::kExprLiteralIntString: + return query::ValueFactor::newConstFactor(nullToEmpty(expr->name)); + + case hsql::kExprLiteralFloat: + return query::ValueFactor::newConstFactor(formatFloat(expr->fval)); + + case hsql::kExprLiteralString: { + std::string s = nullToEmpty(expr->name); + std::string escaped; + escaped.reserve(s.size()); + for (char c : s) { + if (c == '\'') escaped += '\''; + escaped += c; + } + return query::ValueFactor::newConstFactor("'" + escaped + "'"); + } + + case hsql::kExprLiteralNull: + return query::ValueFactor::newConstFactor("NULL"); + + case hsql::kExprFunctionRef: { + // Filter out disallowed function modifiers + if (expr->distinct) unsupported("DISTINCT in function arguments"); + if (expr->windowDescription != nullptr) unsupported("window function"); + + std::string name = nullToEmpty(expr->name); + if (isQservRestrictorName(name)) unsupported("qserv area restrictor function in this position"); + + // Populate our function and its arguments. + query::ValueExprPtrVector args; + if (expr->exprList != nullptr) { + for (auto const* arg : *expr->exprList) { + args.push_back(buildValueExpr(arg)); + } + } + auto func = query::FuncExpr::newWithArgs(name, args); + + // Check for supported / unsupported aggregation functions + static char const* const supportedAggregation[] = { + "COUNT", "MIN", "MAX", "SUM", "AVG", + }; + for (auto const* agg : supportedAggregation) { + if (boost::algorithm::iequals(name, agg)) { + return query::ValueFactor::newAggFactor(func); + } + } + + static char const* const unsupportedAggregation[] = { + "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", "VAR_POP", "VAR_SAMP", + "VARIANCE", "GROUP_CONCAT", "BIT_AND", "BIT_OR", "BIT_XOR"}; + for (auto const* agg : unsupportedAggregation) { + if (boost::algorithm::iequals(name, agg)) unsupported("aggregate function " + name); + } + + return query::ValueFactor::newFuncFactor(func); + } + + case hsql::kExprOperator: + return query::ValueFactor::newExprFactor(buildValueExpr(expr)); + + default: + unsupported(exprTypeName(expr->type)); + } +} + +std::shared_ptr buildBoolFactorTerm(hsql::Expr const* expr) { + if (expr == nullptr) unsupported("null boolean factor"); + if (expr->type != hsql::kExprOperator) { + return std::make_shared(buildValueExpr(expr)); + } + + std::shared_ptr predicate; + if (expr->opType == hsql::kOpIn) { + if (expr->select != nullptr) unsupported("IN subquery"); + if (expr->exprList == nullptr) unsupported("empty IN list"); + query::ValueExprPtrVector values; + for (auto const* value : *expr->exprList) { + values.push_back(buildValueExpr(value)); + } + predicate = std::make_shared(buildValueExpr(expr->expr), values, false); + } else if (expr->opType == hsql::kOpBetween) { + if (expr->exprList == nullptr || expr->exprList->size() != 2) unsupported("BETWEEN bounds"); + predicate = std::make_shared(buildValueExpr(expr->expr), + buildValueExpr(expr->exprList->at(0)), + buildValueExpr(expr->exprList->at(1)), false); + } else if (expr->opType == hsql::kOpLike || expr->opType == hsql::kOpNotLike) { + predicate = std::make_shared( + buildValueExpr(expr->expr), buildValueExpr(expr->expr2), expr->opType == hsql::kOpNotLike); + } else if (expr->opType == hsql::kOpIsNull) { + predicate = std::make_shared(buildValueExpr(expr->expr), false); + } else { + predicate = std::make_shared(buildValueExpr(expr->expr), compOp(expr->opType), + buildValueExpr(expr->expr2)); + } + return predicate; +} + +std::string restrictorArg(hsql::Expr const* expr) { + if (expr == nullptr) unsupported("null qserv area restrictor argument"); + switch (expr->type) { + case hsql::kExprLiteralInt: + return std::to_string(expr->ival); + case hsql::kExprLiteralIntString: + return nullToEmpty(expr->name); + case hsql::kExprLiteralFloat: + return formatFloat(expr->fval); + case hsql::kExprOperator: + if (expr->opType == hsql::kOpUnaryMinus) { + return "-" + restrictorArg(expr->expr); + } + break; + default: + break; + } + unsupported("non-constant qserv area restrictor argument"); +} + +std::shared_ptr buildAreaRestrictor(hsql::Expr const* expr) { + if (expr == nullptr) return nullptr; + + // The following is intended to match the legacy ANTLR-based parser. It used a dedicated + // QservFunctionSpec rule for qserv_areaspec_* functions, but only when it was bare or + // compared against an integer literal ("qserv_areaspec_box(...) = 1", "1 = ..."). + if (expr->type == hsql::kExprOperator && expr->opType == hsql::kOpEquals) { + if (isIntegerLiteral(expr->expr2)) { + if (auto r = buildAreaRestrictor(expr->expr)) return r; + } + if (isIntegerLiteral(expr->expr)) { + if (auto r = buildAreaRestrictor(expr->expr2)) return r; + } + } + + // Ensure this is a function ref. + if (expr->type != hsql::kExprFunctionRef) return nullptr; + + // Only qserv_areaspec_* are restrictors; for any other function return nullptr so normal value / + // predicate handling takes over + std::string name = nullToEmpty(expr->name); + if (!isQservRestrictorName(name)) return nullptr; + + // Set up args + if (expr->exprList == nullptr) return nullptr; + std::vector args; + for (auto const* arg : *expr->exprList) { + args.push_back(restrictorArg(arg)); + } + + // Create the appropriate AreaRestrictor* + try { + if (boost::algorithm::iequals(name, "qserv_areaspec_box")) { + return std::make_shared(args); + } else if (boost::algorithm::iequals(name, "qserv_areaspec_circle")) { + return std::make_shared(args); + } else if (boost::algorithm::iequals(name, "qserv_areaspec_ellipse")) { + return std::make_shared(args); + } else if (boost::algorithm::iequals(name, "qserv_areaspec_poly")) { + return std::make_shared(args); + } + } catch (std::logic_error const& err) { + throw parser::ParseException(err.what()); + } + + return nullptr; +} + +std::shared_ptr buildConstValueExpr(std::string const& value) { + return query::ValueExpr::newSimple(query::ValueFactor::newConstFactor(value)); +} + +std::shared_ptr buildUnaryMinusValueExpr(hsql::Expr const* expr) { + auto const* operand = expr->expr; + if (operand != nullptr) { + switch (operand->type) { + case hsql::kExprLiteralInt: + return buildConstValueExpr("-" + std::to_string(operand->ival)); + case hsql::kExprLiteralIntString: + return buildConstValueExpr("-" + nullToEmpty(operand->name)); + case hsql::kExprLiteralFloat: + return buildConstValueExpr("-" + formatFloat(operand->fval)); + default: + break; + } + } + + auto value = std::make_shared(); + value->addValueFactor(query::ValueFactor::newConstFactor("0")); + value->addOp(query::ValueExpr::MINUS); + value->addValueFactor(buildValueFactor(operand)); + return value; +} + +std::shared_ptr buildValueExpr(hsql::Expr const* expr) { + if (expr == nullptr) unsupported("null value expression"); + if (expr->type != hsql::kExprOperator) { + return query::ValueExpr::newSimple(buildValueFactor(expr)); + } + if (expr->opType == hsql::kOpUnaryMinus) { + return buildUnaryMinusValueExpr(expr); + } + + auto value = std::make_shared(); + value->addValueFactor(buildValueFactor(expr->expr)); + value->addOp(valueOp(expr->opType)); + value->addValueFactor(buildValueFactor(expr->expr2)); + return value; +} + +void validateAreaRestrictorPlacement(hsql::Expr const* expr, bool allowAreaRestrictorExtraction = true) { + if (expr == nullptr) unsupported("null boolean expression"); + + if (buildAreaRestrictor(expr) != nullptr) { + if (!allowAreaRestrictorExtraction) { + unsupported("qserv area restrictors are only supported in conjunctive (AND) contexts"); + } + return; + } + + if (expr->type == hsql::kExprOperator && (expr->opType == hsql::kOpAnd || expr->opType == hsql::kOpOr)) { + // Area restrictors are extracted into WhereClause and handled as a special case, effectively making + // them conjunctive. We explicitly disallow area restrictors combined with OR / NOT. + auto const childAllowsAreaRestrictorExtraction = + allowAreaRestrictorExtraction && expr->opType != hsql::kOpOr; + validateAreaRestrictorPlacement(expr->expr, childAllowsAreaRestrictorExtraction); + validateAreaRestrictorPlacement(expr->expr2, childAllowsAreaRestrictorExtraction); + return; + } + + if (expr->type == hsql::kExprOperator && expr->opType == hsql::kOpNot) { + if (expr->expr == nullptr) unsupported("NOT expression"); + validateAreaRestrictorPlacement(expr->expr, false); + } +} + +std::shared_ptr buildWhereTerm(hsql::Expr const* expr, query::WhereClause& where) { + if (expr == nullptr) unsupported("null boolean expression"); + if (auto restrictor = buildAreaRestrictor(expr)) { + where.addAreaRestrictor(restrictor); + return nullptr; + } + + if (expr->type == hsql::kExprOperator && (expr->opType == hsql::kOpAnd || expr->opType == hsql::kOpOr)) { + auto left = buildWhereTerm(expr->expr, where); + auto right = buildWhereTerm(expr->expr2, where); + + query::BoolTerm::PtrVector terms; + if (left != nullptr) terms.push_back(left); + if (right != nullptr) terms.push_back(right); + if (terms.empty()) return nullptr; + if (terms.size() == 1) { + auto term = std::dynamic_pointer_cast(terms.front()); + if (term == nullptr) { + term = std::make_shared(terms); + } + return term; + } + if (expr->opType == hsql::kOpAnd) { + auto andTerm = std::make_shared(); + for (auto const& term : terms) { + if (!andTerm->merge(*term)) { + andTerm->addBoolTerm(term); + } + } + return andTerm; + } + + auto orTerm = std::make_shared(); + for (auto const& term : terms) { + if (!orTerm->merge(*term)) { + orTerm->addBoolTerm(std::make_shared(term)); + } + } + return orTerm; + } + return buildBoolTerm(expr); +} + +std::shared_ptr buildBoolTerm(hsql::Expr const* expr) { + if (expr == nullptr) unsupported("null boolean expression"); + if (expr->type != hsql::kExprOperator) { + return buildSimpleBoolTerm(buildBoolFactorTerm(expr)); + } + if (expr->opType == hsql::kOpAnd || expr->opType == hsql::kOpOr) { + std::shared_ptr left = buildBoolTerm(expr->expr); + if (auto reduced = left->getReduced()) left = reduced; + std::shared_ptr right = buildBoolTerm(expr->expr2); + if (auto reduced = right->getReduced()) right = reduced; + query::BoolTerm::PtrVector terms{left, right}; + if (expr->opType == hsql::kOpAnd) { + return std::make_shared(terms); + } + return std::make_shared(terms); + } + if (expr->opType == hsql::kOpNot) { + if (expr->expr == nullptr) unsupported("NOT expression"); + if (expr->expr->type == hsql::kExprOperator) { + if (expr->expr->opType == hsql::kOpAnd || expr->expr->opType == hsql::kOpOr) { + auto inner = buildBoolTerm(expr->expr); + auto wrapped = std::make_shared( + std::make_shared(inner), true); + wrapped->addParenthesis(); + return std::make_shared(query::BoolTerm::PtrVector{wrapped}); + } + if (expr->expr->opType == hsql::kOpIn) { + if (expr->expr->select != nullptr) unsupported("NOT IN subquery"); + if (expr->expr->exprList == nullptr) unsupported("empty NOT IN list"); + query::ValueExprPtrVector values; + for (auto const* value : *expr->expr->exprList) { + values.push_back(buildValueExpr(value)); + } + return buildSimpleBoolTerm( + std::make_shared(buildValueExpr(expr->expr->expr), values, true)); + } + if (expr->expr->opType == hsql::kOpIsNull) { + return buildSimpleBoolTerm( + std::make_shared(buildValueExpr(expr->expr->expr), true)); + } + if (expr->expr->opType == hsql::kOpBetween) { + if (expr->expr->exprList == nullptr || expr->expr->exprList->size() != 2) { + unsupported("NOT BETWEEN bounds"); + } + return buildSimpleBoolTerm(std::make_shared( + buildValueExpr(expr->expr->expr), buildValueExpr(expr->expr->exprList->at(0)), + buildValueExpr(expr->expr->exprList->at(1)), true)); + } + } + return buildSimpleBoolTerm(buildBoolFactorTerm(expr->expr), true); + } + return buildSimpleBoolTerm(buildBoolFactorTerm(expr)); +} + +std::shared_ptr buildSelectList(hsql::SelectStatement const& stmt) { + auto selectList = std::make_shared(); + if (stmt.selectList == nullptr) unsupported("missing select list"); + for (auto const* expr : *stmt.selectList) { + auto value = buildValueExpr(expr); + if (expr->alias != nullptr) { + value->setAlias(nullToEmpty(expr->alias)); + value->setAliasIsUserDefined(true); + } + selectList->addValueExpr(value); + } + return selectList; +} + +query::JoinRef::Type buildJoinType(hsql::JoinType type) { + switch (type) { + case hsql::kJoinInner: + return query::JoinRef::DEFAULT; + case hsql::kJoinLeft: + return query::JoinRef::LEFT; + case hsql::kJoinRight: + return query::JoinRef::RIGHT; + case hsql::kJoinFull: + return query::JoinRef::FULL; + case hsql::kJoinCross: + return query::JoinRef::CROSS; + case hsql::kJoinNatural: + return query::JoinRef::DEFAULT; + default: + unsupported("join type"); + } +} + +std::shared_ptr buildJoinSpec(hsql::JoinDefinition const* join) { + if (join == nullptr) unsupported("missing join definition"); + if (join->namedColumns != nullptr) { + if (join->namedColumns->size() != 1) unsupported("multi-column USING"); + return std::make_shared( + std::make_shared(nullToEmpty(join->namedColumns->front()))); + } + if (join->condition != nullptr) { + return std::make_shared(buildBoolTerm(join->condition)); + } + if (join->natural || join->type == hsql::kJoinNatural || join->type == hsql::kJoinCross) { + return nullptr; + } + unsupported("join without ON or USING"); +} + +query::TableRef::Ptr buildNamedTableRef(hsql::TableRef const* table) { + if (table == nullptr) unsupported("missing from table"); + if (table->type != hsql::kTableName) unsupported("non-simple table reference"); + + std::string alias; + if (table->alias != nullptr) alias = nullToEmpty(table->alias->name); + + return std::make_shared(nullToEmpty(table->schema), nullToEmpty(table->name), alias); +} + +query::TableRef::Ptr buildTableRef(hsql::TableRef const* table) { + if (table == nullptr) unsupported("missing from table"); + + if (table->type == hsql::kTableName) return buildNamedTableRef(table); + + if (table->type != hsql::kTableJoin || table->join == nullptr) { + unsupported("non-simple table reference"); + } + + // Hyrise represents joins as a tree, e.g.: + // FROM A + // JOIN B ON A.id = B.id + // JOIN C ON B.id = C.id + // JOIN D ON C.id = D.id + // + // Is represented as: + // kTableJoin + // |- kTableJoin (left) + // | |- kTableJoin (left) + // | | |- kTableName: 'A' (left) + // | | |- kTableName: 'B' (right) + // | |- kTableName: 'C' (right) + // |- kTableName: 'D' (right) + // + // So we traverse down the left side recursively and build the right + // side on our way up to convert this to a Qserv join list. + + auto left = buildTableRef(table->join->left); + + // Qserv supports only named tables on the right side of an explicit join. + auto right = buildNamedTableRef(table->join->right); + + left->addJoin(std::make_shared( + right, buildJoinType(table->join->type), + table->join->natural || table->join->type == hsql::kJoinNatural, buildJoinSpec(table->join))); + return left; +} + +std::shared_ptr buildFromList(hsql::SelectStatement const& stmt) { + auto tables = std::make_shared(); + if (stmt.fromTable == nullptr) unsupported("missing FROM"); + if (stmt.fromTable->type == hsql::kTableCrossProduct) { + // We are selecting from multiple tables e.g., SELECT * FROM Object, Source, Filter + // (cross-product / CROSS JOIN) + if (stmt.fromTable->list == nullptr) unsupported("empty table list"); + for (auto const* table : *stmt.fromTable->list) { + tables->push_back(buildTableRef(table)); + } + } else { + // single FROM + tables->push_back(buildTableRef(stmt.fromTable)); + } + return std::make_shared(tables); +} + +std::shared_ptr buildWhereClause(hsql::SelectStatement const& stmt) { + if (stmt.whereClause == nullptr) return nullptr; + + // Qserv area restrictors have specific placment requirements: + validateAreaRestrictorPlacement(stmt.whereClause); + + // The parse tree for WHERE works similarly to table refs, see buildTableRefs + // for a brief explanation. + auto where = std::make_shared(); + auto rootTerm = buildWhereTerm(stmt.whereClause, *where); + if (rootTerm != nullptr) { + where->setRootTerm(rootTerm); + } + return where; +} + +std::shared_ptr buildOrderBy(hsql::SelectStatement const& stmt) { + if (stmt.order == nullptr || stmt.order->empty()) return nullptr; + + auto orderBy = std::make_shared(); + for (auto const* term : *stmt.order) { + if (term->null_ordering != hsql::NullOrdering::Undefined) unsupported("NULLS FIRST/LAST in ORDER BY"); + + auto valueExpr = buildValueExpr(term->expr); + if (valueExpr->isFunction()) { + throw parser::ParseException("qserv does not support functions in ORDER BY."); + } + + query::OrderByTerm::Order order = query::OrderByTerm::DEFAULT; + if (term->type == hsql::kOrderAsc) order = query::OrderByTerm::ASC; + if (term->type == hsql::kOrderDesc) order = query::OrderByTerm::DESC; + + orderBy->addTerm(query::OrderByTerm(valueExpr, order)); + } + return orderBy; +} + +std::shared_ptr buildGroupBy(hsql::SelectStatement const& stmt) { + if (stmt.groupBy == nullptr || stmt.groupBy->columns == nullptr || stmt.groupBy->columns->empty()) { + return nullptr; + } + + auto groupBy = std::make_shared(); + for (auto const* expr : *stmt.groupBy->columns) { + groupBy->addTerm(query::GroupByTerm(buildValueExpr(expr), std::string())); + } + return groupBy; +} + +std::shared_ptr buildHaving(hsql::SelectStatement const& stmt) { + if (stmt.groupBy != nullptr && stmt.groupBy->having != nullptr) { + return std::make_shared(buildBoolTerm(stmt.groupBy->having)); + } + + if (stmt.having != nullptr) { + return std::make_shared(buildBoolTerm(stmt.having)); + } + return nullptr; +} + +int buildLimit(hsql::SelectStatement const& stmt) { + if (stmt.limit == nullptr || stmt.limit->limit == nullptr) return lsst::qserv::NOTSET; + if (stmt.limit->offset != nullptr) unsupported("OFFSET"); + + auto const* limit = stmt.limit->limit; + if (limit->type != hsql::kExprLiteralInt) unsupported("non-integer LIMIT"); + if (limit->ival > static_cast(std::numeric_limits::max())) unsupported("LIMIT overflow"); + + return static_cast(limit->ival); +} + +} // namespace + +namespace lsst::qserv::ccontrol { + +std::shared_ptr HyriseAdapter::makeSelectStmt(std::string const& sql) { + hsql::SQLParserResult result; + hsql::SQLParser::parse(sql, &result); + + if (!result.isValid() || result.size() == 0) { + throw parser::ParseException(unparseableQueryError(sql)); + } + + if (result.size() > 1) { + unsupported("multiple statements"); + } + + auto const* stmt = dynamic_cast(result.getStatement(0)); + + if (stmt == nullptr) unsupported("non-SELECT statement"); + if (stmt->setOperations != nullptr && !stmt->setOperations->empty()) unsupported("set operations"); + if (stmt->withDescriptions != nullptr && !stmt->withDescriptions->empty()) unsupported("WITH"); + if (stmt->lockings != nullptr && !stmt->lockings->empty()) unsupported("row locking"); + + validateStatement(stmt); + + return std::make_shared( + buildSelectList(*stmt), buildFromList(*stmt), buildWhereClause(*stmt), buildOrderBy(*stmt), + buildGroupBy(*stmt), buildHaving(*stmt), stmt->selectDistinct, buildLimit(*stmt)); +} + +} // namespace lsst::qserv::ccontrol diff --git a/src/ccontrol/HyriseAdapter.h b/src/ccontrol/HyriseAdapter.h new file mode 100644 index 0000000000..0e462eec99 --- /dev/null +++ b/src/ccontrol/HyriseAdapter.h @@ -0,0 +1,44 @@ +// -*- LSST-C++ -*- +/* + * LSST Data Management System + * Copyright 2026 LSST. + * + * This product includes software developed by the + * LSST Project (http://www.lsst.org/). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the LSST License Statement and + * the GNU General Public License along with this program. If not, + * see . + */ + +#ifndef LSST_QSERV_CCONTROL_HYRISEADAPTER_H +#define LSST_QSERV_CCONTROL_HYRISEADAPTER_H + +#include +#include + +namespace lsst::qserv::query { +class SelectStmt; +} // namespace lsst::qserv::query + +namespace lsst::qserv::ccontrol { + +/// Build Qserv query IR from Hyrise parser output. +class HyriseAdapter { +public: + static std::shared_ptr makeSelectStmt(std::string const& sql); +}; + +} // namespace lsst::qserv::ccontrol + +#endif // LSST_QSERV_CCONTROL_HYRISEADAPTER_H diff --git a/src/ccontrol/ParseRunner.cc b/src/ccontrol/ParseRunner.cc index 6b7fbfa5bb..d6410251fd 100644 --- a/src/ccontrol/ParseRunner.cc +++ b/src/ccontrol/ParseRunner.cc @@ -25,6 +25,7 @@ #include "ccontrol/ParseRunner.h" // Qserv headers +#include "ccontrol/HyriseAdapter.h" #include "ccontrol/UserQuery.h" #include "parser/ParseException.h" #include "query/SelectStmt.h" @@ -97,8 +98,12 @@ class NonRecoveringQSMySqlLexer : public QSMySqlLexer { namespace lsst::qserv::ccontrol { std::shared_ptr ParseRunner::makeSelectStmt(std::string const& statement) { +#ifdef QSERV_USE_HYRISE_SQL_PARSER + return HyriseAdapter::makeSelectStmt(statement); +#else auto parser = std::make_shared(statement); return parser->getSelectStmt(); +#endif } ParseRunner::ParseRunner(std::string const& statement) : _statement(statement) { run(); } @@ -126,7 +131,13 @@ void ParseRunner::run() { walker.walk(listener, tree); } -std::shared_ptr ParseRunner::getSelectStmt() { return _listener->getSelectStatement(); } +std::shared_ptr ParseRunner::getSelectStmt() { +#ifdef QSERV_USE_HYRISE_SQL_PARSER + return HyriseAdapter::makeSelectStmt(_statement); +#else + return _listener->getSelectStatement(); +#endif +} std::shared_ptr ParseRunner::getUserQuery() { return _listener->getUserQuery(); } diff --git a/src/ccontrol/UserQueryFactory.cc b/src/ccontrol/UserQueryFactory.cc index 3ede5d752c..ec085f99af 100644 --- a/src/ccontrol/UserQueryFactory.cc +++ b/src/ccontrol/UserQueryFactory.cc @@ -45,6 +45,7 @@ #include "ccontrol/UserQueryProcessList.h" #include "ccontrol/UserQueryQueries.h" #include "ccontrol/UserQueryResources.h" +#include "ccontrol/UserQueryResultDelete.h" #include "ccontrol/UserQuerySelect.h" #include "ccontrol/UserQuerySelectCountStar.h" #include "ccontrol/UserQuerySet.h" @@ -78,6 +79,19 @@ namespace lsst::qserv::ccontrol { using userQuerySharedResourcesPtr = std::shared_ptr; +UserQuery::Ptr setBooleanSessionVariable(std::string const& varName, std::string const& varValue, + bool& sessionVariable) { + if (varValue == "0") { + sessionVariable = false; + } else if (varValue == "1") { + sessionVariable = true; + } else { + return std::make_shared("Unsupported value for " + varName + ": " + varValue); + } + LOGS(_log, LOG_LVL_WARN, varName << "=" << (sessionVariable ? "1" : "0")); + return std::make_shared(varName, varValue); +} + /** * @brief Determine if the table name in the FROM statement refers to PROCESSLIST table. * @@ -289,15 +303,14 @@ UserQuery::Ptr UserQueryFactory::newUserQuery(std::string const& aQuery, std::st // Parse SELECT - ParseRunner::Ptr parser; + query::SelectStmt::Ptr stmt; try { - parser = std::make_shared(query); + stmt = ParseRunner::makeSelectStmt(query); } catch (parser::ParseException& e) { return std::make_shared(std::string("ParseException:") + e.what()); } - auto stmt = parser->getSelectStmt(); - std::lock_guard focatoryLock(_factoryMtx); + std::lock_guard factoryLock(_factoryMtx); // handle special database/table names if (_stmtRefersToProcessListTable(stmt, defaultDb)) { return _makeUserQueryProcessList(stmt, _userQuerySharedResources, userQueryId, resultDb, aQuery, @@ -399,10 +412,26 @@ UserQuery::Ptr UserQueryFactory::newUserQuery(std::string const& aQuery, std::st } } else if (UserQueryType::isCall(query)) { std::lock_guard factoryLock(_factoryMtx); +#ifdef QSERV_USE_HYRISE_SQL_PARSER + std::string resultDeleteQueryId; + if (!UserQueryType::isResultDelete(query, resultDeleteQueryId)) { + return std::make_shared("Only CALL QSERV_RESULT_DELETE is supported: " + query); + } + return std::make_shared( + _userQuerySharedResources->makeUserQueryResources(userQueryId, resultDb), + resultDeleteQueryId); +#else auto parser = std::make_shared( query, _userQuerySharedResources->makeUserQueryResources(userQueryId, resultDb)); return parser->getUserQuery(); +#endif } else if (UserQueryType::isSet(query)) { + std::string varName, varValue; +#ifdef QSERV_USE_HYRISE_SQL_PARSER + if (!UserQueryType::isSet(query, varName, varValue)) { + return std::make_shared("Unsupported SET statement: " + query); + } +#else ParseRunner::Ptr parser; try { parser = std::make_shared(query); @@ -410,17 +439,17 @@ UserQuery::Ptr UserQueryFactory::newUserQuery(std::string const& aQuery, std::st return std::make_shared(std::string("ParseException:") + e.what()); } auto uq = parser->getUserQuery(); - std::lock_guard factoryLock(_factoryMtx); auto setQuery = std::static_pointer_cast(uq); - if (setQuery->varName() == "QSERV_ROW_COUNTER_OPTIMIZATION") { - _useQservRowCounterOptimization = setQuery->varValue() != "0"; - LOGS(_log, LOG_LVL_WARN, - "QSERV_ROW_COUNTER_OPTIMIZATION=" << (_useQservRowCounterOptimization ? "1" : "0")); - } else if (setQuery->varName() == "QSERV_DEBUG_CZAR_NO_MERGE") { - _debugNoMerge = setQuery->varValue() != "0"; - LOGS(_log, LOG_LVL_WARN, "QSERV_DEBUG_CZAR_NO_MERGE=" << (_debugNoMerge ? "1" : "0")); + varName = setQuery->varName(); + varValue = setQuery->varValue(); +#endif + std::lock_guard factoryLock(_factoryMtx); + if (varName == "QSERV_ROW_COUNTER_OPTIMIZATION") { + return setBooleanSessionVariable(varName, varValue, _useQservRowCounterOptimization); + } else if (varName == "QSERV_DEBUG_CZAR_NO_MERGE") { + return setBooleanSessionVariable(varName, varValue, _debugNoMerge); } - return uq; + return std::make_shared("Unsupported SET variable: " + varName); } else { std::lock_guard factoryLock(_factoryMtx); // something that we don't recognize diff --git a/src/ccontrol/UserQueryType.cc b/src/ccontrol/UserQueryType.cc index e49c2c312b..4ff53b87e8 100644 --- a/src/ccontrol/UserQueryType.cc +++ b/src/ccontrol/UserQueryType.cc @@ -85,6 +85,14 @@ boost::regex _callRe(R"(^call\s+.+$)", // Note that parens around whole string are not part of the regex but raw string literal boost::regex _setRe(R"(^set\s+.+$)", boost::regex::ECMAScript | boost::regex::icase | boost::regex::optimize); +// regex extracting `SET GLOBAL = ` (GLOBAL required; integer value only) +boost::regex _setGlobalRe(R"(^set\s+global\s+([A-Za-z_][A-Za-z0-9_]*)\s*=\s*([-+]?\d+)\s*;?\s*$)", + boost::regex::ECMAScript | boost::regex::icase | boost::regex::optimize); + +// regex extracting the argument of `CALL QSERV_RESULT_DELETE()` +boost::regex _resultDeleteRe(R"(^call\s+qserv_result_delete\s*\(\s*(\d+)\s*\)\s*;?\s*$)", + boost::regex::ECMAScript | boost::regex::icase | boost::regex::optimize); + } // namespace namespace lsst::qserv::ccontrol { @@ -180,6 +188,17 @@ bool UserQueryType::isCall(std::string const& query) { return boost::regex_match(query, _callRe); } +bool UserQueryType::isResultDelete(std::string const& query, std::string& queryId) { + LOGS(_log, LOG_LVL_TRACE, "isResultDelete: " << query); + boost::smatch sm; + bool match = boost::regex_match(query, sm, _resultDeleteRe); + if (match) { + queryId = sm.str(1); + LOGS(_log, LOG_LVL_TRACE, "isResultDelete: queryId: " << queryId); + } + return match; +} + bool UserQueryType::isSimpleCountStar(std::shared_ptr const& stmt, std::string& spelling) { if (stmt->hasWhereClause() || stmt->hasOrderBy() || stmt->hasGroupBy() || stmt->hasHaving()) { return false; @@ -209,4 +228,16 @@ bool UserQueryType::isSet(std::string const& query) { return match; } +bool UserQueryType::isSet(std::string const& query, std::string& varName, std::string& varValue) { + LOGS(_log, LOG_LVL_TRACE, "isSet (extract): " << query); + boost::smatch sm; + bool match = boost::regex_match(query, sm, _setGlobalRe); + if (match) { + varName = sm.str(1); + varValue = sm.str(2); + LOGS(_log, LOG_LVL_TRACE, "isSet: " << varName << "=" << varValue); + } + return match; +} + } // namespace lsst::qserv::ccontrol diff --git a/src/ccontrol/UserQueryType.h b/src/ccontrol/UserQueryType.h index a4105e43b7..94205e9216 100644 --- a/src/ccontrol/UserQueryType.h +++ b/src/ccontrol/UserQueryType.h @@ -101,6 +101,12 @@ class UserQueryType { */ static bool isCall(std::string const& query); + /** + * Returns true if query is `CALL QSERV_RESULT_DELETE()` + * On a match, sets @p queryId to the numeric query id string (digits only). + */ + static bool isResultDelete(std::string const& query, std::string& queryId); + /** * * @param stmt the statement to check @@ -116,6 +122,12 @@ class UserQueryType { /// Returns true if query is SET (for variable assignment) static bool isSet(std::string const& query); + + /** + * Returns true if query is `SET GLOBAL = `. On a match, sets @p varName and + * @p varValue. The value must be an integer literal. + */ + static bool isSet(std::string const& query, std::string& varName, std::string& varValue); }; } // namespace lsst::qserv::ccontrol diff --git a/src/ccontrol/testAntlr4GeneratedIR.cc b/src/ccontrol/testAntlr4GeneratedIR.cc index 88e6d79c4b..6d42a3d52f 100644 --- a/src/ccontrol/testAntlr4GeneratedIR.cc +++ b/src/ccontrol/testAntlr4GeneratedIR.cc @@ -69,6 +69,18 @@ using namespace std; namespace test = boost::test_tools; using namespace lsst::qserv; +// ------------- +// !!! NOTE: !!! +// ------------- +// The ANTLR adapter currently rejects some valid AND placements and accepts some invalid OR placements. +// This behavior was corrected in the Hyrise adapter. See Hyrise tests: +// - area_restrictor_in_conjunction_supported +// - area_restrictor_under_or_rejected +// - area_restrictor_under_not_rejected +// +// The ANTLR adapter was left unchanged to preserve legacy behavior. In the event that we decide to retain the +// legacy ANTLR parser, we should investigate fixing the bug here as well. + BOOST_AUTO_TEST_SUITE(Suite) /// Negation is used in class constructors where the class may be negated by 'NOT', where IS_NOT == "NOT", @@ -1139,6 +1151,29 @@ static const vector ANTLR4_TEST_QUERIES = { nullptr, nullptr, 0, -1); }, "SELECT `objectId` FROM `Object` WHERE qserv_areaspec_box(0,0,3,10) ORDER BY `objectId`"), + // test qserv_areaspec_box wrapped in an equality comparison (form used in some integration tests) + Antlr4TestQueries( + "SELECT objectId FROM Object WHERE qserv_areaspec_box(0, 0, 3, 10) = 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(nullptr, AreaRestrictorBox("0", "0", "3", "10")), nullptr, nullptr, + nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE qserv_areaspec_box(0,0,3,10)"), + Antlr4TestQueries( + "SELECT objectId FROM Object WHERE 1 = qserv_areaspec_box(0, 0, 3, 10)", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(nullptr, AreaRestrictorBox("0", "0", "3", "10")), nullptr, nullptr, + nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE qserv_areaspec_box(0,0,3,10)"), // test null-safe equals operator <> Antlr4TestQueries( "SELECT o1.objectId AS objId1, o2.objectId AS objId2, scisql_angSep(o1.ra_PS, o1.decl_PS, " @@ -2242,6 +2277,89 @@ static const vector ANTLR4_TEST_QUERIES = { FromList(TableRef("", "Object", "")), nullptr, nullptr, nullptr, nullptr, 0, -1); }, "SELECT (`objectId`-1) AS `o` FROM `Object`"), + + // test HAVING with an aggregate + Antlr4TestQueries( + "SELECT objectId, COUNT(*) FROM Object GROUP BY objectId HAVING COUNT(*) > 1", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("COUNT", + ValueExpr("", + FactorOp(ValueFactor(STAR, ""), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + nullptr, // WhereClause + nullptr, // OrderByClause + GroupByClause(GroupByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + "")), + HavingClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr( + "COUNT", + ValueExpr( + "", + FactorOp( + ValueFactor(STAR, + ""), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + 0, -1); + }, + "SELECT `objectId`,COUNT(*) FROM `Object` GROUP BY `objectId` HAVING COUNT(*)>1"), + + // test a function nested inside an ORDER BY expression. A bare "ORDER BY f(x)" is rejected, but a + // function within a larger expression is allowed. + Antlr4TestQueries( + "SELECT objectId FROM Object ORDER BY ra_PS + scisql_fluxToAbMag(gFlux_PS)", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + nullptr, // WhereClause + OrderByClause(OrderByTerm( + ValueExpr( + "", + FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::PLUS), + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr("scisql_fluxToAbMag", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", + "gFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, // GroupByClause + nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` ORDER BY(`ra_PS`+scisql_fluxToAbMag(`gFlux_PS`))"), }; BOOST_DATA_TEST_CASE(antlr4_test, ANTLR4_TEST_QUERIES, queryInfo) { @@ -2283,4 +2401,50 @@ BOOST_AUTO_TEST_CASE(set_session_var_test) { parser::adapter_order_error); } +// OFFSET is not supported by qserv. +BOOST_AUTO_TEST_CASE(offset_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT objectId FROM Object LIMIT 10 OFFSET 5"), + parser::ParseException); +} + +// DISTINCT inside an aggregate function is not supported by qserv. +BOOST_AUTO_TEST_CASE(aggregate_distinct_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT COUNT(DISTINCT objectId) FROM Object"), + parser::ParseException); +} + +// Window functions (OVER clause) are not supported by qserv. +BOOST_AUTO_TEST_CASE(window_function_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt( + "SELECT SUM(ra_PS) OVER (PARTITION BY objectId) FROM Object"), + parser::ParseException); +} + +// Aggregate functions outside the supported set (COUNT/MIN/MAX/SUM/AVG) are not supported by qserv. +BOOST_AUTO_TEST_CASE(unsupported_aggregate_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT STDDEV(ra_PS) FROM Object"), + parser::ParseException); +} + +// Row locking clauses (FOR UPDATE / LOCK IN SHARE MODE) are not supported by qserv. +BOOST_AUTO_TEST_CASE(row_locking_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT objectId FROM Object FOR UPDATE"), + parser::ParseException); +} + +// NULLS FIRST/LAST ordering is not supported by qserv. +BOOST_AUTO_TEST_CASE(nulls_ordering_not_supported) { + BOOST_CHECK_THROW( + ccontrol::ParseRunner::makeSelectStmt("SELECT objectId FROM Object ORDER BY objectId NULLS LAST"), + parser::ParseException); +} + +// A qserv area restrictor may appear bare or compared against an integer literal ("= 1"). Comparing it +// against a column should be rejected +BOOST_AUTO_TEST_CASE(area_restrictor_against_column_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object WHERE qserv_areaspec_box(0, 0, 3, 10) = objectId"), + parser::ParseException); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/ccontrol/testCControl.cc b/src/ccontrol/testCControl.cc index 8d46b69ffc..d73ddc2657 100644 --- a/src/ccontrol/testCControl.cc +++ b/src/ccontrol/testCControl.cc @@ -34,6 +34,7 @@ // Qserv headers #include "ccontrol/UserQueryType.h" +#include "tests/ParserExpected.h" #include "parser/ParseException.h" #include "qproc/QuerySession.h" #include "query/AndTerm.h" @@ -78,10 +79,12 @@ static const std::vector PARSE_ERROR_QUERIES = { // "Expressions/functions in ORDER BY clauses are not allowed // In SQL92 ORDER BY is limited to actual table columns, thus expressions or functions in ORDER BY are // rejected. This is true for Qserv too. - ParseErrorQueryInfo("SELECT objectId, iE1_SG, ABS(iE1_SG) FROM Object WHERE iE1_SG between -0.1 and " - "0.1 ORDER BY ABS(iE1_SG)", - "ParseException:Error parsing query, near \"ABS(iE1_SG)\", qserv does not " - "support functions in ORDER BY."), + ParseErrorQueryInfo( + "SELECT objectId, iE1_SG, ABS(iE1_SG) FROM Object WHERE iE1_SG between -0.1 and " + "0.1 ORDER BY ABS(iE1_SG)", + PARSER_EXPECTED("ParseException:qserv does not support functions in ORDER BY.", + "ParseException:Error parsing query, near \"ABS(iE1_SG)\", qserv does not " + "support functions in ORDER BY.")), ParseErrorQueryInfo("SELECT foo from Filter f limit 5 garbage query !#$%!#$", "ParseException:Failed to instantiate query: \"SELECT foo from Filter f limit 5 " @@ -100,6 +103,30 @@ static const std::vector PARSE_ERROR_QUERIES = { "ParseException:Error parsing query, near \"_chunkId\", Identifiers in Qserv may not start " "with an underscore."), + ParseErrorQueryInfo( + "SELECT objectId AS _objectId FROM Object;", + "ParseException:Error parsing query, near \"_objectId\", Identifiers in Qserv may not " + "start with an underscore."), + + ParseErrorQueryInfo("SELECT _ra FROM Object;", + "ParseException:Error parsing query, near \"_ra\", Identifiers in Qserv may not " + "start with an underscore."), + + ParseErrorQueryInfo( + "SELECT `_ra` FROM Object;", + PARSER_EXPECTED("ParseException:Error parsing query, near \"_ra\", Identifiers in Qserv " + "may not start with an underscore.", + "ParseException:Error parsing query, near \"`_ra`\", Identifiers in Qserv " + "may not start with an underscore.")), + + ParseErrorQueryInfo( + "SELECT objectId AS `_objectId` FROM Object;", + PARSER_EXPECTED( + "ParseException:Error parsing query, near \"_objectId\", Identifiers in Qserv " + "may not start with an underscore.", + "ParseException:Error parsing query, near \"`_objectId`\", Identifiers in Qserv " + "may not start with an underscore.")), + ParseErrorQueryInfo( "LECT sce.filterName,sce.field " "FROM LSST.Science_Ccd_Exposure AS sce " @@ -112,7 +139,10 @@ static const std::vector PARSE_ERROR_QUERIES = { "SELECT COUNT(*) AS totalCount, " "SUM(CASE WHEN (typeId=3) THEN 1 ELSE 0 END) AS galaxyCount " "FROM Object WHERE rFlux_PS > 10;", - "ParseException:qserv can not parse query, near \"CASE WHEN (typeId=3) THEN 1 ELSE 0 END\""), + PARSER_EXPECTED("ParseException:qserv can not parse query: CASE expressions are not " + "supported.", + "ParseException:qserv can not parse query, near \"CASE WHEN (typeId=3) " + "THEN 1 ELSE 0 END\"")), }; BOOST_DATA_TEST_CASE(expected_parse_error, PARSE_ERROR_QUERIES, queryInfo) { @@ -122,6 +152,31 @@ BOOST_DATA_TEST_CASE(expected_parse_error, PARSE_ERROR_QUERIES, queryInfo) { BOOST_REQUIRE_EQUAL(querySession.getError(), queryInfo.errorMessage); } +// While underscores are not allowed in identifiers, we need to ensure the parser/adapter layers +// do not simply reject the presence of an underscore in the SQL string. +BOOST_AUTO_TEST_CASE(underscoreInStringLiteralIsAllowed) { + auto querySession = qproc::QuerySession(); + auto selectStmt = querySession.parseQuery("SELECT objectId FROM Object WHERE description = '_chunkId'"); + BOOST_REQUIRE(selectStmt != nullptr); + BOOST_REQUIRE(querySession.getError().empty()); +} + +// The parser/adapter should reject CASE WHEN, but this test ensures that it can still appear in a string. +BOOST_AUTO_TEST_CASE(caseWhenInStringLiteralIsAllowed) { + auto querySession = qproc::QuerySession(); + auto selectStmt = querySession.parseQuery( + "SELECT objectId FROM Object WHERE description = 'CASE WHEN this is text'"); + BOOST_REQUIRE(selectStmt != nullptr); + BOOST_REQUIRE(querySession.getError().empty()); +} + +BOOST_AUTO_TEST_CASE(repeatedTrailingSemicolonsAreAllowed) { + auto querySession = qproc::QuerySession(); + auto selectStmt = querySession.parseQuery("SELECT objectId FROM Object;;; "); + BOOST_REQUIRE(selectStmt != nullptr); + BOOST_REQUIRE(querySession.getError().empty()); +} + BOOST_AUTO_TEST_CASE(testSimpleCountStar) { using lsst::qserv::ccontrol::UserQueryType; auto querySession = qproc::QuerySession(); diff --git a/src/ccontrol/testHyriseGeneratedIR.cc b/src/ccontrol/testHyriseGeneratedIR.cc new file mode 100644 index 0000000000..201ab4a821 --- /dev/null +++ b/src/ccontrol/testHyriseGeneratedIR.cc @@ -0,0 +1,2515 @@ +// -*- LSST-C++ -*- +/* + * LSST Data Management System + * Copyright 2019 AURA/LSST. + * + * This product includes software developed by the + * LSST Project (http://www.lsst.org/). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the LSST License Statement and + * the GNU General Public License along with this program. If not, + * see . + */ + +// System headers +#include +#include +#include + +#define BOOST_TEST_MODULE HyriseGeneratedIR + +// Third-party headers +#include +#include + +// Qserv headers +#include "ccontrol/ParseRunner.h" +#include "ccontrol/UserQueryType.h" +#include "parser/ParseException.h" +#include "qproc/QuerySession.h" +#include "query/AndTerm.h" +#include "query/BetweenPredicate.h" +#include "query/BoolFactor.h" +#include "query/BoolFactorTerm.h" +#include "query/BoolTerm.h" +#include "query/BoolTermFactor.h" +#include "query/ColumnRef.h" +#include "query/CompPredicate.h" +#include "query/FromList.h" +#include "query/FuncExpr.h" +#include "query/GroupByClause.h" +#include "query/HavingClause.h" +#include "query/InPredicate.h" +#include "query/JoinRef.h" +#include "query/JoinSpec.h" +#include "query/LikePredicate.h" +#include "query/NullPredicate.h" +#include "query/OrTerm.h" +#include "query/PassTerm.h" +#include "query/AreaRestrictor.h" +#include "query/QueryTemplate.h" +#include "query/SelectList.h" +#include "query/SelectStmt.h" +#include "query/TableRef.h" +#include "query/ValueExpr.h" +#include "query/ValueFactor.h" +#include "query/WhereClause.h" + +using namespace std; +namespace test = boost::test_tools; +using namespace lsst::qserv; + +BOOST_AUTO_TEST_SUITE(Suite) + +/// Negation is used in class constructors where the class may be negated by 'NOT', where IS_NOT == "NOT", +/// and IS is the explicit absence of "NOT". +enum Negation { IS, IS_NOT }; + +/// InNotIn is used in the case where something may be specified as 'in' or 'not in' another thing (i.e. for +/// the query::InPredicate.) +enum InNotIn { IN, NOT_IN }; + +/// Star is used to indicate a star value, i.e. "*" as in "SELECT *" +enum Star { STAR }; + +/// Natural is used to indicate if a join is natural or not natural, in a JoinRef. +enum Natural { NATURAL, NOT_NATURAL }; + +/// Between is used to indicate if something is between, or not between. +enum Between { BETWEEN, NOT_BETWEEN }; + +/// Like is used to indicate is something is like, or not like. +enum Like { LIKE, NOT_LIKE }; + +/// Null is used to indicate IS_NULL or IS_NOT_NULL +enum IsNull { IS_NULL, IS_NOT_NULL }; + +/** + * @brief Pusher is a set of recursive variadic functions to receive a variable number of arguments and push + * them into a container that has a push_back function. + * + * This form of `pusher` is the last to get called, for the single remaining element. + * + * @tparam Container The type of container + * @tparam Types The template parameters the container accepts (e.g. for a vector it will be the element type + * and the allocator type) + * @tparam T The type of the object to push into the container. + * @tparam TArgs The type of the remaining objects to push onto the vector (this should match T) + * @param container The container to push objects into. + * @param first The object to push into the container. + */ +template +void pusher(Container& container, T&& first) { + container.push_back(forward(first)); +} + +/** + * @brief Pusher is a set of recursive variadic functions to receive a variable number of arguments and push + * them into a container that has a push_back function. + * + * @tparam Container The type of container + * @tparam Types The template parameters the container accepts (e.g. for a vector it will be the element type + * and the allocator type) + * @tparam T The type of the object to push into the container. + * @tparam TArgs The type of the remaining objects to push onto the vector (this should match T) + * @param container The container to push objects into. + * @param first The object to push into the container. + * @param args The rest of the objects to push into the container. + */ +template +void pusher(Container& container, T&& first, TArgs&&... args) { + container.push_back(forward(first)); + pusher(container, forward(args)...); +} + +/// Create a new AndTerm, with terms. Args should be a comma separated list of BoolTermPtr. +template +shared_ptr AndTerm(Targs... args) { + vector> terms; + pusher(terms, args...); + return make_shared(terms); +} + +/// Create a new BetweenPredicate. +shared_ptr BetweenPredicate(shared_ptr const& iValue, + Between between, + shared_ptr const& iMinValue, + shared_ptr const& iMaxValue) { + return make_shared(iValue, iMinValue, iMaxValue, (between == NOT_BETWEEN)); +} + +/// Create a new AndTerm, with terms. Args should be a comma separated list of BoolFactorPtr. +template +shared_ptr BoolFactor(Negation negation, Targs... args) { + vector> terms; + pusher(terms, args...); + return make_shared(terms, negation); +} + +/// Create a new BoolTermFactor with a BoolTerm member term. +shared_ptr BoolTermFactor(shared_ptr const& term) { + return make_shared(term); +} + +/// Create a new ColumnRef with given database, table, and column names. +shared_ptr ColumnRef(string const& db, string const& table, string const& column) { + return make_shared(db, table, column); +} + +/// Create a new ColumnRef with given TableRef and column name. +shared_ptr ColumnRef(shared_ptr const& tableRef, string const& column) { + return make_shared(tableRef, column); +} + +/// Create a new CompPredicate, comparising the `left` and `right` ValueExprPtrs, with an operator +shared_ptr CompPredicate(shared_ptr const& left, + query::CompPredicate::OpType op, + shared_ptr const& right) { + return make_shared(left, op, right); +} + +/// Create a FactorOp with a ValueFactor +query::ValueExpr::FactorOp FactorOp(shared_ptr const& factor, query::ValueExpr::Op op) { + return query::ValueExpr::FactorOp(factor, op); +} + +/// Create a FuncExpr +/// args should be instance of shared_ptr to query::ValueExpr. +template +shared_ptr FuncExpr(string const& name, Targs const&... args) { + vector> valueExprVec; + pusher(valueExprVec, args...); + return make_shared(name, valueExprVec); +} + +/// Create a new FromList. Args should be a comma separated list of TableRefPtr. +template +shared_ptr FromList(Targs... args) { + auto tableRefs = make_shared>>(); + pusher(*tableRefs, args...); + return make_shared(tableRefs); +} + +// No need to write a factory function for GroupByTerm; its cosntructor is named consistently with the +// factory functions here, and its ultimate owner wants an instance, not a shared_ptr. +// The 'using' statement is placed here to put the function (that is, class constructor) in alphabetical +// order with the other factory functions to make it as obvious as possible where the GroupByTerm function +// is coming from. +using query::GroupByTerm; + +/// Create a new GroupByClause. Args should be a comma separated list of GroupByTerm. +template +shared_ptr GroupByClause(Targs... args) { + auto terms = make_shared>(); + pusher(*terms, args...); + return make_shared(terms); +} + +/// Create a new HavingClause +shared_ptr HavingClause(shared_ptr const& term) { + return make_shared(term); +} + +/// Create a new InPredicate. Args should be a comma separated list of ValueExpr. +template +shared_ptr InPredicate(shared_ptr const& left, InNotIn in, + Targs const&... args) { + auto valueExprVec = vector>(); + pusher(valueExprVec, args...); + return make_shared(left, valueExprVec, in == NOT_IN); +} + +/// Create a new JoinRef +shared_ptr JoinRef(shared_ptr right, query::JoinRef::Type joinType, + Natural natural, shared_ptr joinSpec) { + bool isNatural = (NATURAL == natural); + return make_shared(right, joinType, isNatural, joinSpec); +} + +/// Create a new JoinSpec +shared_ptr JoinSpec(shared_ptr ref, + shared_ptr const& onTerm) { + return make_shared(ref, onTerm); +} + +/// Create a new LikePredicate with ValueExprPtrs, where `left LIKE right`. +shared_ptr LikePredicate(shared_ptr const& left, Like like, + shared_ptr const& right) { + return make_shared(left, right, NOT_LIKE == like); +} + +/// Create a new NullPredicate +shared_ptr NullPredicate(shared_ptr const& valueExpr, IsNull isNull) { + return make_shared(valueExpr, IS_NOT_NULL == isNull); +} + +/// Create a new OrderByClause. Args should be a comma separated list of OrderByTerm object instances (not +/// shared_ptr) +template +shared_ptr OrderByClause(Targs... args) { + auto orderByTerms = make_shared>(); + pusher(*orderByTerms, args...); + return make_shared(orderByTerms); +} + +/// Create an OrderByTerm with a ValueExprPtr term. +/// Note this does not new an object or create a shared_ptr, as dictated by the OrderByClause interface. +query::OrderByTerm OrderByTerm(shared_ptr const& term, query::OrderByTerm::Order order, + string collate) { + return query::OrderByTerm(term, order, collate); +} + +/// Create a new OrTerm. Args can be a shared_ptr to any kind of object that inherits from BoolTerm. +template +shared_ptr OrTerm(Targs... args) { + vector> terms; + pusher(terms, args...); + return make_shared(terms); +} + +/// Create a new PassTerm with given text. +shared_ptr PassTerm(string const& text) { return make_shared(text); } + +shared_ptr AreaRestrictorBox(std::string const& lonMinDegree, + std::string const& latMinDegree, + std::string const& lonMaxDegree, + std::string const& latMaxDegree) { + return make_shared(lonMinDegree, latMinDegree, lonMaxDegree, latMaxDegree); +} + +shared_ptr AreaRestrictorCircle(std::string const& centerLonDegree, + std::string const& centerLatDegree, + std::string const& radiusDegree) { + return make_shared(centerLonDegree, centerLatDegree, radiusDegree); +} + +shared_ptr AreaRestrictorEllipse(std::string const& centerLonDegree, + std::string const& centerLatDegree, + std::string const& semiMajorAxisAngleArcsec, + std::string const& semiMinorAxisAngleArcsec, + std::string const& positionAngleDegree) { + return make_shared(centerLonDegree, centerLatDegree, + semiMajorAxisAngleArcsec, semiMinorAxisAngleArcsec, + positionAngleDegree); +} + +shared_ptr AreaRestrictorPoly(std::vector const& parameters) { + return make_shared(parameters); +} + +/// Create a new SelectList. Args should be a comma separated list of shared_ptr to ValueExpr. +template +shared_ptr SelectList(Targs... args) { + auto ptr = make_shared>>(); + pusher(*ptr, args...); + return make_shared(ptr); +} + +/// Create a new SelectList with the given members. +shared_ptr SelectStmt(shared_ptr const& selectList, + shared_ptr const& fromList, + shared_ptr const& whereClause, + shared_ptr const& orderByClause, + shared_ptr const& groupByClause, + shared_ptr const& havingClause, + bool hasDistinct, int limit) { + return make_shared(selectList, fromList, whereClause, orderByClause, groupByClause, + havingClause, hasDistinct, limit); +} + +/// Create a new TableRef with the given database, table, alias name, and JoinRefs. Args should +/// be a comma separated list of shared_ptr to JoinRef. +template +shared_ptr TableRef(string const& db, string const& table, const string& alias, + Targs const&... args) { + vector> joinRefs; + pusher(joinRefs, args...); + auto tableRef = make_shared(db, table, alias); + tableRef->addJoins(joinRefs); + return tableRef; +} + +/// Create a new TableRef with the given database, table, and alias name. +shared_ptr TableRef(string const& db, string const& table, const string& alias) { + return make_shared(db, table, alias); +} + +/// Create a new ValueExpr with a ValueFactorPtr. +template +shared_ptr ValueExpr(string alias, Targs const&... factorOps) { + vector factorOpVec; + pusher(factorOpVec, factorOps...); + auto valueExpr = make_shared(factorOpVec); + if (!alias.empty()) { + valueExpr->setAlias(alias); + } + return valueExpr; +} + +/// Create a ValueFactor with a COLUMNREF value. +shared_ptr ValueFactor(shared_ptr const& columnRef) { + return make_shared(columnRef); +} + +/// Create a ValueFactor with a CONST value. +shared_ptr ValueFactor(string const& constVal) { + return make_shared(constVal); +} + +/// Create a ValueFactor with a FUNCTION value. +shared_ptr ValueFactor(query::ValueFactor::Type type, + shared_ptr const& funcExpr) { + if (query::ValueFactor::AGGFUNC == type) { + return query::ValueFactor::newAggFactor(funcExpr); + } else if (query::ValueFactor::FUNCTION == type) { + return query::ValueFactor::newFuncFactor(funcExpr); + } + BOOST_REQUIRE_MESSAGE(false, "ValueFactor with a FuncExpr may only be of type FUNCTION or AGGFUNC"); + return nullptr; +} + +/// Create a ValueFactor with a STAR value. +shared_ptr ValueFactor(Star star, string const& table) { + return query::ValueFactor::newStarFactor(table); +} + +/// Create a ValueFactor with a ValueExpr value. +shared_ptr ValueFactor(shared_ptr valueExpr) { + return query::ValueFactor::newExprFactor(valueExpr); +} + +/// Create a new WhereClause with a given OrTerm for its root term. +shared_ptr WhereClause( + shared_ptr const& orTerm, + shared_ptr const& areaRestrictor = nullptr) { + auto restrictorVec = make_shared(); + if (nullptr != areaRestrictor) { + restrictorVec->push_back(areaRestrictor); + } + return make_shared(orTerm, restrictorVec); +} + +/** + * @brief holds related test data. + * + */ +struct Antlr4TestQueries { + /** + * @brief Construct a new Antlr 4 Test Queries object + * + * @param iQuery The sql to parse and get generated IR. + * @param iCompareStmt a function that creates IR that should be equivalent to the parser-generated IR. + * @param iSerializedQuery The SQL string that should exactly match the string generated by serializing + * the IR. + */ + Antlr4TestQueries(string const& iQuery, function()> const& iCompareStmt, + string const& iSerializedQuery) + : query(iQuery), compareStmt(iCompareStmt), serializedQuery(iSerializedQuery) {} + + /// query to test, that will be turned into a SelectStmt by the andlr4-based parser. + string query; + + /// comparison query, that will be turned into a SelectStmt by the andlr4-based parser and then that will + /// be modified by modFunc + function()> compareStmt; + + /// the query as it should appear after serialization. + string serializedQuery; +}; + +ostream& operator<<(ostream& os, Antlr4TestQueries const& i) { + os << "Antlr4TestQueries(" << i.query << "...)"; + return os; +} + +static const vector ANTLR4_TEST_QUERIES = { + + // tests NOT LIKE (which is 'NOT LIKE', different than 'NOT' and 'LIKE' operators separately) + Antlr4TestQueries( + "SELECT sce.filterId, sce.filterName " + "FROM Science_Ccd_Exposure AS sce " + "WHERE (sce.visit = 887404831) AND (sce.raftName = '3,3') AND (sce.ccdName LIKE '%') " + "ORDER BY filterId", // case01/queries/0012.1_raftAndCcd.sql + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "sce", "filterId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "sce", "filterName")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Science_Ccd_Exposure", "sce")), + WhereClause(OrTerm(AndTerm( + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "sce", "visit")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", + FactorOp(ValueFactor("887404831"), + query::ValueExpr::NONE))))))), + PassTerm(")")), + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "sce", + "raftName")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", + FactorOp(ValueFactor("'3,3'"), + query::ValueExpr::NONE))))))), + PassTerm(")")), + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + LikePredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "sce", "ccdName")), + query::ValueExpr::NONE)), + LIKE, + ValueExpr("", + FactorOp(ValueFactor("'%'"), + query::ValueExpr::NONE))))))), + PassTerm(")"))))), + OrderByClause(OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "filterId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, // Group By Clause + nullptr, 0, -1); + }, + "SELECT `sce`.`filterId`,`sce`.`filterName` " + "FROM `Science_Ccd_Exposure` AS `sce` " + "WHERE `sce`.`visit`=887404831 AND `sce`.`raftName`='3,3' AND `sce`.`ccdName` LIKE '%' " + "ORDER BY `filterId` ASC"), + + // tests a query with 2 items in the GROUP BY expression + Antlr4TestQueries( + "SELECT objectId, filterId FROM Source GROUP BY objectId, filterId;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "filterId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "")), + nullptr, // WhereClause + nullptr, // OrderByClause + GroupByClause( + GroupByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ""), + GroupByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "filterId")), + query::ValueExpr::NONE)), + "")), + nullptr, 0, -1); + }, + "SELECT `objectId`,`filterId` FROM `Source` GROUP BY `objectId`,`filterId`"), + // test SELECT MAX... + Antlr4TestQueries( + "select max(filterID) from Filter", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr( + "", + FactorOp(ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("max", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", "filterID")), + query::ValueExpr::NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Filter", "")), nullptr, nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT max(`filterID`) FROM `Filter`"), + // test SELECT MIN... + Antlr4TestQueries( + "select min(filterID) from Filter", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr( + "", + FactorOp(ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("min", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", "filterID")), + query::ValueExpr::NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Filter", "")), nullptr, nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT min(`filterID`) FROM `Filter`"), + // test WHERE a = b + Antlr4TestQueries( + "SELECT objectId,iauId,ra_PS FROM Object WHERE objectId = 430213989148129", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "iauId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("430213989148129"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId`,`iauId`,`ra_PS` FROM `Object` WHERE `objectId`=430213989148129"), + // test WHERE a IN (...) + Antlr4TestQueries( + "select ra_Ps, decl_PS FROM Object WHERE objectId IN (390034570102582, 396210733076852, " + "393126946553816, 390030275138483)", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_Ps")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "decl_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, InPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", + "objectId")), + query::ValueExpr::NONE)), + IN, + ValueExpr("", FactorOp(ValueFactor("390034570102582"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("396210733076852"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("393126946553816"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("390030275138483"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_Ps`,`decl_PS` FROM `Object` WHERE `objectId` " + "IN(390034570102582,396210733076852,393126946553816,390030275138483)"), + // test SELECT * + Antlr4TestQueries( + "SELECT * FROM Object WHERE objectId = 430213989000", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(STAR, ""), query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("430213989000"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT * FROM `Object` WHERE `objectId`=430213989000"), + // test SELECT a.b + // test JOIN tablename tablealias + // test USING (a) + // test WHERE a.b ... + Antlr4TestQueries( + "SELECT s.ra, s.decl, o.raRange, o.declRange FROM Object o JOIN Source s USING (objectId) " + "WHERE o.objectId = 390034570102582 AND o.latestObsTime = s.taiMidPoint", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s", "ra")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s", "decl")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "o", "raRange")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "o", "declRange")), + query::ValueExpr::NONE))), + FromList(TableRef( + "", "Object", "o", + JoinRef(TableRef("", "Source", "s"), query::JoinRef::DEFAULT, NOT_NATURAL, + JoinSpec(ColumnRef("", "", "objectId"), nullptr)))), + WhereClause(OrTerm(AndTerm( + BoolFactor(IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "o", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("390034570102582"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "o", "latestObsTime")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "s", "taiMidPoint")), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `s`.`ra`,`s`.`decl`,`o`.`raRange`,`o`.`declRange` FROM `Object` AS `o` JOIN `Source` " + "AS `s` USING(`objectId`) " + "WHERE `o`.`objectId`=390034570102582 AND `o`.`latestObsTime`=`s`.`taiMidPoint`"), + // test ORDER BY + Antlr4TestQueries( + "SELECT sourceId, objectId FROM Source WHERE objectId = 386942193651348 ORDER BY sourceId;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "sourceId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("386942193651348"), + query::ValueExpr::NONE))))))), + OrderByClause(OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "sourceId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, nullptr, 0, -1); + }, + "SELECT `sourceId`,`objectId` FROM `Source` WHERE `objectId`=386942193651348 ORDER BY " + "`sourceId` ASC"), + // test COUNT(*) AS alias + Antlr4TestQueries( + "select COUNT(*) AS N FROM Source WHERE objectId IN (386950783579546, 386942193651348)", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr( + "N", + FactorOp(ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("COUNT", + ValueExpr("", + FactorOp(ValueFactor(STAR, ""), + query::ValueExpr::NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, InPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", + "objectId")), + query::ValueExpr::NONE)), + IN, + ValueExpr("", FactorOp(ValueFactor("386950783579546"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("386942193651348"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT COUNT(*) AS `N` FROM `Source` WHERE `objectId` IN(386950783579546,386942193651348)"), + // test LIKE + // test WHERE a and b + Antlr4TestQueries( + "SELECT sce.filterId, sce.filterName FROM Science_Ccd_Exposure AS sce " + "WHERE (sce.visit = 887404831) AND (sce.raftName = '3,3') AND (sce.ccdName LIKE '%') ORDER " + "BY filterId", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "sce", "filterId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "sce", "filterName")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Science_Ccd_Exposure", "sce")), + WhereClause(OrTerm(AndTerm( + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "sce", "visit")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", + FactorOp(ValueFactor("887404831"), + query::ValueExpr::NONE))))))), + PassTerm(")")), + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "sce", + "raftName")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", + FactorOp(ValueFactor("'3,3'"), + query::ValueExpr::NONE))))))), + PassTerm(")")), + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + LikePredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "sce", "ccdName")), + query::ValueExpr::NONE)), + LIKE, + ValueExpr("", + FactorOp(ValueFactor("'%'"), + query::ValueExpr::NONE))))))), + PassTerm(")"))))), + OrderByClause(OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "filterId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, nullptr, 0, -1); + }, + "SELECT `sce`.`filterId`,`sce`.`filterName` FROM `Science_Ccd_Exposure` AS `sce` " + "WHERE `sce`.`visit`=887404831 AND `sce`.`raftName`='3,3' AND `sce`.`ccdName` LIKE '%' " + "ORDER BY `filterId` ASC"), + // test LIMIT + Antlr4TestQueries( + "SELECT sce.filterId, sce.filterName FROM Science_Ccd_Exposure AS sce " + "WHERE (sce.visit = 887404831) AND (sce.raftName = '3,3') AND (sce.ccdName LIKE '%') ORDER " + "BY filterId LIMIT 5", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "sce", "filterId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "sce", "filterName")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Science_Ccd_Exposure", "sce")), + WhereClause(OrTerm(AndTerm( + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "sce", "visit")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", + FactorOp(ValueFactor("887404831"), + query::ValueExpr::NONE))))))), + PassTerm(")")), + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "sce", + "raftName")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", + FactorOp(ValueFactor("'3,3'"), + query::ValueExpr::NONE))))))), + PassTerm(")")), + BoolFactor( + IS, PassTerm("("), + BoolTermFactor(OrTerm(AndTerm(BoolFactor( + IS, + LikePredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "sce", "ccdName")), + query::ValueExpr::NONE)), + LIKE, + ValueExpr("", + FactorOp(ValueFactor("'%'"), + query::ValueExpr::NONE))))))), + PassTerm(")"))))), + OrderByClause(OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "filterId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, nullptr, 0, 5); + }, + "SELECT `sce`.`filterId`,`sce`.`filterName` " + "FROM `Science_Ccd_Exposure` AS `sce` " + "WHERE `sce`.`visit`=887404831 AND `sce`.`raftName`='3,3' AND `sce`.`ccdName` LIKE '%' " + "ORDER BY `filterId` ASC LIMIT 5"), + // test qserv_areaspec_box + // test scisql UDF + // test BETWEEN a and b + Antlr4TestQueries( + "SELECT COUNT(*) as OBJ_COUNT FROM Object " + "WHERE qserv_areaspec_box(0.1, -6, 4, 6) " + "AND scisql_fluxToAbMag(zFlux_PS) BETWEEN 20 AND 24 " + "AND scisql_fluxToAbMag(gFlux_PS)-scisql_fluxToAbMag(rFlux_PS) BETWEEN 0.1 AND 0.9 " + "AND scisql_fluxToAbMag(iFlux_PS)-scisql_fluxToAbMag(zFlux_PS) BETWEEN 0.1 AND 1.0", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr( + "OBJ_COUNT", + FactorOp(ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("COUNT", + ValueExpr("", + FactorOp(ValueFactor(STAR, ""), + query::ValueExpr::NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause( + OrTerm(AndTerm( + BoolFactor( + IS, + BetweenPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor:: + FUNCTION, + FuncExpr( + "scisql_" + "fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "zFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + BETWEEN, + ValueExpr("", FactorOp(ValueFactor("20"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("24"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + BetweenPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor:: + FUNCTION, + FuncExpr( + "scisql_" + "fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "gFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::MINUS), + FactorOp( + ValueFactor( + query::ValueFactor:: + FUNCTION, + FuncExpr( + "scisql_" + "fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "rFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + BETWEEN, + ValueExpr("", FactorOp(ValueFactor("0.1"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("0.9"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + BetweenPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor:: + FUNCTION, + FuncExpr( + "scisql_" + "fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "iFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::MINUS), + FactorOp( + ValueFactor( + query::ValueFactor:: + FUNCTION, + FuncExpr( + "scisql_" + "fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "zFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + BETWEEN, + ValueExpr("", FactorOp(ValueFactor("0.1"), + query::ValueExpr::NONE)), + ValueExpr("", + FactorOp(ValueFactor("1.0"), + query::ValueExpr::NONE)))))), + AreaRestrictorBox("0.1", "-6", "4", "6")), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT COUNT(*) AS `OBJ_COUNT` " + "FROM `Object` WHERE qserv_areaspec_box(0.1,-6,4,6) scisql_fluxToAbMag(`zFlux_PS`) BETWEEN " + "20 AND 24 " + "AND (scisql_fluxToAbMag(`gFlux_PS`)-scisql_fluxToAbMag(`rFlux_PS`)) BETWEEN 0.1 AND 0.9 " + "AND (scisql_fluxToAbMag(`iFlux_PS`)-scisql_fluxToAbMag(`zFlux_PS`)) BETWEEN 0.1 AND 1"), + // test AVG + Antlr4TestQueries( + "SELECT objectId, AVG(ra_PS) as ra FROM Object WHERE qserv_areaspec_box(0, 0, 3, 10) GROUP " + "BY objectId ORDER BY ra", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr( + "ra", + FactorOp( + ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("AVG", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", + "ra_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(nullptr, AreaRestrictorBox("0", "0", "3", "10")), + OrderByClause( + OrderByTerm(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + GroupByClause(GroupByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + "")), + nullptr, 0, -1); + }, + "SELECT `objectId`,AVG(`ra_PS`) AS `ra` FROM `Object` WHERE qserv_areaspec_box(0,0,3,10) " + "GROUP BY `objectId` ORDER BY `ra` ASC"), + // test multiple JOIN + // test ASC + Antlr4TestQueries( + "SELECT objectId, taiMidPoint, scisql_fluxToAbMag(psfFlux) " + "FROM Source JOIN Object USING(objectId) JOIN Filter USING(filterId) " + "WHERE qserv_areaspec_box(355, 0, 360, 20) AND filterName = 'g' ORDER BY objectId, " + "taiMidPoint ASC", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "taiMidPoint")), + query::ValueExpr::NONE)), + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr("scisql_fluxToAbMag", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", + "psfFlux")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef( + "", "Source", "", + JoinRef(TableRef("", "Object", ""), query::JoinRef::DEFAULT, NOT_NATURAL, + JoinSpec(ColumnRef("", "", "objectId"), nullptr)), + JoinRef(TableRef("", "Filter", ""), query::JoinRef::DEFAULT, NOT_NATURAL, + JoinSpec(ColumnRef("", "", "filterId"), nullptr)))), + WhereClause( + OrTerm(AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "filterName")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("'g'"), + query::ValueExpr::NONE)))))), + AreaRestrictorBox("355", "0", "360", "20")), + OrderByClause( + OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, ""), + OrderByTerm(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", + "taiMidPoint")), + query::ValueExpr::NONE)), + query::OrderByTerm::ASC, "")), + nullptr, nullptr, 0, -1); + }, + "SELECT `objectId`,`taiMidPoint`,scisql_fluxToAbMag(`psfFlux`) " + "FROM `Source` JOIN `Object` USING(`objectId`) JOIN `Filter` USING(`filterId`) WHERE " + "qserv_areaspec_box(355,0,360,20)`filterName`='g' ORDER BY `objectId` ASC, `taiMidPoint` " + "ASC"), + // test hex + Antlr4TestQueries( + "SELECT scienceCcdExposureId, hex(poly) as hexPoly FROM Science_Ccd_Exposure;", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "scienceCcdExposureId")), + query::ValueExpr::NONE)), + ValueExpr( + "hexPoly", + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr("hex", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", + "poly")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Science_Ccd_Exposure", "")), nullptr, nullptr, nullptr, + nullptr, 0, -1); + }, + "SELECT `scienceCcdExposureId`,hex(`poly`) AS `hexPoly` FROM `Science_Ccd_Exposure`"), + // test case insensitivity + Antlr4TestQueries( + "SELECT objectId FROM Object WHERE QsErV_ArEaSpEc_BoX(0, 0, 3, 10) ORDER BY objectId", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(nullptr, AreaRestrictorBox("0", "0", "3", "10")), + OrderByClause(OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE qserv_areaspec_box(0,0,3,10) ORDER BY `objectId` ASC"), + // test qserv_areaspec_box wrapped in an equality comparison (form used in some integration tests) + // The equality wrapper is a legacy compatibility form. Qserv extracts the area restrictor and + // ignores the `= 1` or `1 =` wrapper. + Antlr4TestQueries( + "SELECT objectId FROM Object WHERE qserv_areaspec_box(0, 0, 3, 10) = 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(nullptr, AreaRestrictorBox("0", "0", "3", "10")), nullptr, nullptr, + nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE qserv_areaspec_box(0,0,3,10)"), + Antlr4TestQueries( + "SELECT objectId FROM Object WHERE 1 = qserv_areaspec_box(0, 0, 3, 10)", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(nullptr, AreaRestrictorBox("0", "0", "3", "10")), nullptr, nullptr, + nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE qserv_areaspec_box(0,0,3,10)"), + // test null-safe equals operator <> + Antlr4TestQueries( + "SELECT o1.objectId AS objId1, o2.objectId AS objId2, scisql_angSep(o1.ra_PS, o1.decl_PS, " + "o2.ra_PS, o2.decl_PS) AS distance FROM Object o1, Object o2 WHERE qserv_areaspec_box(1.2, " + "3.3, 1.3, 3.4) AND scisql_angSep(o1.ra_PS, o1.decl_PS, o2.ra_PS, o2.decl_PS) < 0.016 AND " + "o1.objectId <> o2.objectId", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("objId1", FactorOp(ValueFactor(ColumnRef("", "o1", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("objId2", FactorOp(ValueFactor(ColumnRef("", "o2", "objectId")), + query::ValueExpr::NONE)), + ValueExpr( + "distance", + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_angSep", + ValueExpr( + "", + FactorOp(ValueFactor(ColumnRef( + "", "o1", + "ra_PS")), + query::ValueExpr::NONE)), + ValueExpr( + "", + FactorOp(ValueFactor(ColumnRef( + "", "o1", + "decl_PS")), + query::ValueExpr::NONE)), + ValueExpr( + "", + FactorOp(ValueFactor(ColumnRef( + "", "o2", + "ra_PS")), + query::ValueExpr::NONE)), + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "o2", + "decl_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "o1"), TableRef("", "Object", "o2")), + WhereClause( + OrTerm(AndTerm( + BoolFactor( + IS, + CompPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor:: + FUNCTION, + FuncExpr( + "scisql_angSep", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "o1", + "ra_PS")), + query::ValueExpr:: + NONE)), + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "o1", + "decl_PS")), + query::ValueExpr:: + NONE)), + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "o2", + "ra_PS")), + query::ValueExpr:: + NONE)), + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "o2", + "decl_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("0.016"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "o1", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::NOT_EQUALS_OP, + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "o2", "objectId")), + query::ValueExpr::NONE)))))), + AreaRestrictorBox("1.2", "3.3", "1.3", "3.4")), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `o1`.`objectId` AS `objId1`,`o2`.`objectId` AS " + "`objId2`,scisql_angSep(`o1`.`ra_PS`,`o1`.`decl_PS`,`o2`.`ra_PS`,`o2`.`decl_PS`) AS " + "`distance` " + "FROM `Object` AS `o1`,`Object` AS `o2` WHERE qserv_areaspec_box(1.2,3.3,1.3,3.4) " + "scisql_angSep(`o1`.`ra_PS`,`o1`.`decl_PS`,`o2`.`ra_PS`,`o2`.`decl_PS`)<0.016 " + "AND `o1`.`objectId`<>`o2`.`objectId`"), + // test less-than operator + Antlr4TestQueries( + "SELECT objectId FROM Object WHERE " + "scisql_fluxToAbMag(uFlux_PS)-scisql_fluxToAbMag(gFlux_PS) < 2.0 AND " + "scisql_fluxToAbMag(gFlux_PS)-scisql_fluxToAbMag(rFlux_PS) < 0.1 AND " + "scisql_fluxToAbMag(rFlux_PS)-scisql_fluxToAbMag(iFlux_PS) > -0.8 AND " + "scisql_fluxToAbMag(iFlux_PS)-scisql_fluxToAbMag(zFlux_PS) < 1.4", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm( + BoolFactor( + IS, + CompPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "uFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::MINUS), + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "gFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("2.0"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + CompPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "gFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::MINUS), + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "rFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("0.1"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + CompPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "rFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::MINUS), + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "iFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("-0.8"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + CompPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "iFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::MINUS), + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr( + "scisql_fluxToAbMag", + ValueExpr( + "", + FactorOp( + ValueFactor(ColumnRef( + "", + "", + "zFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1.4"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` " + "WHERE (scisql_fluxToAbMag(`uFlux_PS`)-scisql_fluxToAbMag(`gFlux_PS`))<2 " + "AND (scisql_fluxToAbMag(`gFlux_PS`)-scisql_fluxToAbMag(`rFlux_PS`))<0.1 " + "AND (scisql_fluxToAbMag(`rFlux_PS`)-scisql_fluxToAbMag(`iFlux_PS`))>-0.8 " + "AND (scisql_fluxToAbMag(`iFlux_PS`)-scisql_fluxToAbMag(`zFlux_PS`))<1.4"), + // test greater-than operator + Antlr4TestQueries( + "SELECT COUNT(*) AS OBJ_COUNT FROM Object WHERE gFlux_PS>1e-25", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr( + "OBJ_COUNT", + FactorOp(ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("COUNT", + ValueExpr("", + FactorOp(ValueFactor(STAR, ""), + query::ValueExpr::NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "gFlux_PS")), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1e-25"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT COUNT(*) AS `OBJ_COUNT` FROM `Object` WHERE `gFlux_PS`>1e-25"), + // test DISTINCT + Antlr4TestQueries( + "SELECT DISTINCT tract,patch,filterName FROM DeepCoadd ;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "tract")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "patch")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "filterName")), + query::ValueExpr::NONE))), + FromList(TableRef("", "DeepCoadd", "")), nullptr, nullptr, nullptr, nullptr, 1, + -1); + }, + "SELECT DISTINCT `tract`,`patch`,`filterName` FROM `DeepCoadd`"), + // test value + int + Antlr4TestQueries( + "SELECT s.ra, s.decl FROM Object o JOIN Source s USING (objectId) WHERE o.objectId = " + "433327840429024 AND o.latestObsTime BETWEEN s.taiMidPoint - 300 AND s.taiMidPoint + 300", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s", "ra")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s", "decl")), + query::ValueExpr::NONE))), + FromList(TableRef( + "", "Object", "o", + JoinRef(TableRef("", "Source", "s"), query::JoinRef::DEFAULT, NOT_NATURAL, + JoinSpec(ColumnRef("", "", "objectId"), nullptr)))), + WhereClause(OrTerm(AndTerm( + BoolFactor(IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "o", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("433327840429024"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + BetweenPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "o", "latestObsTime")), + query::ValueExpr::NONE)), + BETWEEN, + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "s", + "taiMidPoint")), + query::ValueExpr::MINUS), + FactorOp(ValueFactor("300"), + query::ValueExpr::NONE)), + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "s", + "taiMidPoint")), + query::ValueExpr::PLUS), + FactorOp(ValueFactor("300"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `s`.`ra`,`s`.`decl` " + "FROM `Object` AS `o` JOIN `Source` AS `s` USING(`objectId`) " + "WHERE `o`.`objectId`=433327840429024 AND `o`.`latestObsTime` BETWEEN(`s`.`taiMidPoint`-300) " + "AND (`s`.`taiMidPoint`+300)"), + // test function in select list + Antlr4TestQueries( + "SELECT f(one)/f2(two) FROM Object where qserv_areaspec_box(0,0,1,1);", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr( + "", + FactorOp(ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr("f", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", "one")), + query::ValueExpr::NONE)))), + query::ValueExpr::DIVIDE), + FactorOp(ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr("f2", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", "two")), + query::ValueExpr::NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(nullptr, AreaRestrictorBox("0", "0", "1", "1")), nullptr, nullptr, + nullptr, 0, -1); + }, + "SELECT (f(`one`)/f2(`two`)) FROM `Object` WHERE qserv_areaspec_box(0,0,1,1)"), + // test NATURAL LEFT JOIN + Antlr4TestQueries( + "SELECT s1.foo, s2.foo AS s2_foo FROM Source s1 NATURAL LEFT JOIN Source s2 WHERE s1.bar = " + "s2.bar;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s1", "foo")), + query::ValueExpr::NONE)), + ValueExpr("s2_foo", FactorOp(ValueFactor(ColumnRef("", "s2", "foo")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "s1", + JoinRef(TableRef("", "Source", "s2"), query::JoinRef::LEFT, + NATURAL, nullptr))), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s1", "bar")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s2", "bar")), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `s1`.`foo`,`s2`.`foo` AS `s2_foo` FROM `Source` AS `s1` NATURAL LEFT OUTER JOIN " + "`Source` AS `s2` WHERE `s1`.`bar`=`s2`.`bar`"), + // test NATURAL RIGHT JOIN + Antlr4TestQueries( + "SELECT s1.foo, s2.foo AS s2_foo FROM Source s1 NATURAL RIGHT JOIN Source s2 WHERE s1.bar = " + "s2.bar;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s1", "foo")), + query::ValueExpr::NONE)), + ValueExpr("s2_foo", FactorOp(ValueFactor(ColumnRef("", "s2", "foo")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "s1", + JoinRef(TableRef("", "Source", "s2"), query::JoinRef::RIGHT, + NATURAL, nullptr))), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s1", "bar")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s2", "bar")), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `s1`.`foo`,`s2`.`foo` AS `s2_foo` FROM `Source` AS `s1` NATURAL RIGHT OUTER JOIN " + "`Source` AS `s2` WHERE `s1`.`bar`=`s2`.`bar`"), + // test NATURAL JOIN + Antlr4TestQueries( + "SELECT s1.foo, s2.foo AS s2_foo FROM Source s1 NATURAL JOIN Source s2 WHERE s1.bar = " + "s2.bar;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s1", "foo")), + query::ValueExpr::NONE)), + ValueExpr("s2_foo", FactorOp(ValueFactor(ColumnRef("", "s2", "foo")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "s1", + JoinRef(TableRef("", "Source", "s2"), query::JoinRef::DEFAULT, + NATURAL, nullptr))), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s1", "bar")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s2", "bar")), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `s1`.`foo`,`s2`.`foo` AS `s2_foo` FROM `Source` AS `s1` NATURAL JOIN `Source` AS " + "`s2` WHERE `s1`.`bar`=`s2`.`bar`"), + // test CROSS JOIN + Antlr4TestQueries( + "SELECT * FROM Source s1 CROSS JOIN Source s2 WHERE s1.bar = s2.bar;", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(STAR, ""), query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "s1", + JoinRef(TableRef("", "Source", "s2"), query::JoinRef::CROSS, + NOT_NATURAL, nullptr))), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s1", "bar")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "s2", "bar")), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT * FROM `Source` AS `s1` CROSS JOIN `Source` AS `s2` WHERE `s1`.`bar`=`s2`.`bar`"), + // test = operator + Antlr4TestQueries( + "SELECT ra_PS FROM Object WHERE objectId = 417857368235490;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_PS` FROM `Object` WHERE `objectId`=417857368235490"), + // test <> operator + Antlr4TestQueries( + "SELECT ra_PS FROM Object WHERE objectId <> 417857368235490;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::NOT_EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_PS` FROM `Object` WHERE `objectId`<>417857368235490"), + // test != operator + Antlr4TestQueries( + "SELECT ra_PS FROM Object WHERE objectId != 417857368235490;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::NOT_EQUALS_OP_ALT, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_PS` FROM `Object` WHERE `objectId`<>417857368235490"), + // test < operator + Antlr4TestQueries( + "SELECT ra_PS FROM Object WHERE objectId < 417857368235490;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_PS` FROM `Object` WHERE `objectId`<417857368235490"), + // test <= operator + Antlr4TestQueries( + "SELECT ra_PS FROM Object WHERE objectId <= 417857368235490;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OR_EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_PS` FROM `Object` WHERE `objectId`<=417857368235490"), + // test >= operator + Antlr4TestQueries( + "SELECT ra_PS FROM Object WHERE objectId >= 417857368235490;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OR_EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_PS` FROM `Object` WHERE `objectId`>=417857368235490"), + // test >= operator + Antlr4TestQueries( + "SELECT ra_PS FROM Object WHERE objectId > 417857368235490;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `ra_PS` FROM `Object` WHERE `objectId`>417857368235490"), + // test IS NULL + Antlr4TestQueries( + "select objectId from Object where zFlags is NULL;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, NullPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", + "zFlags")), + query::ValueExpr::NONE)), + IS_NULL))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE `zFlags` IS NULL"), + // test IS NOT NULL + Antlr4TestQueries( + "select objectId from Object where zFlags is NOT NULL;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, NullPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", + "zFlags")), + query::ValueExpr::NONE)), + IS_NOT_NULL))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE `zFlags` IS NOT NULL"), + // tests NOT LIKE (which is 'NOT LIKE', different than 'NOT' and 'LIKE' operators separately) + Antlr4TestQueries( + "SELECT filterId FROM Filter WHERE filterName NOT LIKE 'Z'", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "filterId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Filter", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, LikePredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "filterName")), + query::ValueExpr::NONE)), + NOT_LIKE, + ValueExpr("", FactorOp(ValueFactor("'Z'"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `filterId` FROM `Filter` WHERE `filterName` NOT LIKE 'Z'"), + // tests quoted IDs + Antlr4TestQueries( + "SELECT `Source`.`sourceId`, `Source`.`objectId` From Source WHERE `Source`.`objectId` IN " + "(386942193651348) ORDER BY `Source`.`sourceId`", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "Source", "sourceId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "Source", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Source", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, InPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "Source", + "objectId")), + query::ValueExpr::NONE)), + IN, + ValueExpr("", FactorOp(ValueFactor("386942193651348"), + query::ValueExpr::NONE))))))), + OrderByClause(OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "Source", "sourceId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, nullptr, 0, -1); + }, + "SELECT `Source`.`sourceId`,`Source`.`objectId` FROM `Source` WHERE `Source`.`objectId` " + "IN(386942193651348) ORDER BY `Source`.`sourceId` ASC"), + + // tests the NOT BETWEEN operator + Antlr4TestQueries( + "SELECT objectId,ra_PS FROM Object WHERE objectId NOT BETWEEN 417857368235490 AND " + "420949744686724", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, + BetweenPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + NOT_BETWEEN, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("420949744686724"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId`,`ra_PS` FROM `Object` WHERE `objectId` NOT BETWEEN 417857368235490 AND " + "420949744686724"), + + // tests the && operator. + // The Qserv IR converts && to AND as a result of the IR structure and how it serializes it to string. + Antlr4TestQueries( + "select objectId, iRadius_SG, ra_PS, decl_PS from Object where iRadius_SG > .5 && ra_PS < 2 " + "&& decl_PS < 3;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "iRadius_SG")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "decl_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm( + BoolFactor(IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "iRadius_SG")), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor(".5"), + query::ValueExpr::NONE)))), + BoolFactor(IS, CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "ra_PS")), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("2"), + query::ValueExpr::NONE)))), + BoolFactor(IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "decl_PS")), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("3"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId`,`iRadius_SG`,`ra_PS`,`decl_PS` FROM `Object` WHERE `iRadius_SG`>0.5 AND " + "`ra_PS`<2 AND `decl_PS`<3"), + + // tests the || operator. + // The Qserv IR converts || to OR as a result of the IR structure and how it serializes it to string. + Antlr4TestQueries( + "select objectId from Object where objectId < 400000000000000 || objectId > 430000000000000 " + "ORDER BY objectId;", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm( + AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("400000000000000"), + query::ValueExpr::NONE))))), + AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "objectId")), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("430000000000000"), + query::ValueExpr::NONE))))))), + OrderByClause(OrderByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE `objectId`<400000000000000 OR " + "`objectId`>430000000000000 ORDER BY `objectId` ASC"), + + // tests NOT IN in the InPredicate + Antlr4TestQueries( + "SELECT objectId, ra_PS FROM Object WHERE objectId NOT IN (417857368235490, 420949744686724, " + "420954039650823);", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, InPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", + "objectId")), + query::ValueExpr::NONE)), + NOT_IN, + ValueExpr("", FactorOp(ValueFactor("417857368235490"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("420949744686724"), + query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor("420954039650823"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId`,`ra_PS` FROM `Object` WHERE `objectId` NOT " + "IN(417857368235490,420949744686724,420954039650823)"), + + // tests the modulo operator + Antlr4TestQueries( + "select objectId, ra_PS % 3, decl_PS from Object where ra_PS % 3 > 1.5", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::MODULO), + FactorOp(ValueFactor("3"), query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "decl_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::MODULO), + FactorOp(ValueFactor("3"), query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1.5"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId`,(`ra_PS`% 3),`decl_PS` FROM `Object` WHERE (`ra_PS`% 3)>1.5"), + + // tests the MOD operator + Antlr4TestQueries( + "select objectId, ra_PS MOD 3, decl_PS from Object where ra_PS MOD 3 > 1.5", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::MOD), + FactorOp(ValueFactor("3"), query::ValueExpr::NONE)), + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "decl_PS")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::MOD), + FactorOp(ValueFactor("3"), query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1.5"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId`,(`ra_PS` MOD 3),`decl_PS` FROM `Object` WHERE (`ra_PS` MOD 3)>1.5"), + + // tests the DIV operator + Antlr4TestQueries( + "SELECT objectId from Object where ra_PS DIV 2 > 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::DIV), + FactorOp(ValueFactor("2"), query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE (`ra_PS` DIV 2)>1"), + + // tests the & operator + Antlr4TestQueries( + "SELECT objectId from Object where objectID & 1 = 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "objectID")), + query::ValueExpr::BIT_AND), + FactorOp(ValueFactor("1"), query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE (`objectID`&1)=1"), + + // tests the | operator + Antlr4TestQueries( + "SELECT objectId from Object where objectID | 1 = 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "objectID")), + query::ValueExpr::BIT_OR), + FactorOp(ValueFactor("1"), query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE (`objectID`|1)=1"), + + // tests the << operator + Antlr4TestQueries( + "SELECT objectId from Object where objectID << 10 = 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "objectID")), + query::ValueExpr::BIT_SHIFT_LEFT), + FactorOp(ValueFactor("10"), query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE (`objectID`<<10)=1"), + + // tests the >> operator + Antlr4TestQueries( + "SELECT objectId from Object where objectID >> 10 = 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "objectID")), + query::ValueExpr::BIT_SHIFT_RIGHT), + FactorOp(ValueFactor("10"), query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE (`objectID`>>10)=1"), + + // tests the ^ operator + Antlr4TestQueries( + "SELECT objectId from Object where objectID ^ 1 = 1", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS, CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef("", "", "objectID")), + query::ValueExpr::BIT_XOR), + FactorOp(ValueFactor("1"), query::ValueExpr::NONE)), + query::CompPredicate::EQUALS_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` WHERE (`objectID`^1)=1"), + + // tests NOT with a BoolFactor + Antlr4TestQueries( + "select * from Filter where NOT filterId > 1 AND filterId < 6", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(STAR, ""), query::ValueExpr::NONE))), + FromList(TableRef("", "Filter", "")), + WhereClause(OrTerm(AndTerm( + BoolFactor( + IS_NOT, + CompPredicate(ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "filterId")), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE)))), + BoolFactor(IS, + CompPredicate( + ValueExpr("", FactorOp(ValueFactor(ColumnRef( + "", "", "filterId")), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("6"), + query::ValueExpr::NONE))))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT * FROM `Filter` WHERE NOT `filterId`>1 AND `filterId`<6"), + + // tests NOT with an AND term + Antlr4TestQueries( + "select * from Filter where NOT (filterId > 1 AND filterId < 6)", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(STAR, ""), query::ValueExpr::NONE))), + FromList(TableRef("", "Filter", "")), + WhereClause(OrTerm(AndTerm(BoolFactor( + IS_NOT, PassTerm("("), + BoolTermFactor(AndTerm( + BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", "filterId")), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE)))), + BoolFactor( + IS, + CompPredicate( + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", "filterId")), + query::ValueExpr::NONE)), + query::CompPredicate::LESS_THAN_OP, + ValueExpr("", + FactorOp(ValueFactor("6"), + query::ValueExpr::NONE)))))), + PassTerm(")"))))), + nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT * FROM `Filter` WHERE NOT(`filterId`>1 AND `filterId`<6)"), + + // tests expression with alias in select list + Antlr4TestQueries( + "SELECT objectId - 1 AS o FROM Object", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr( + "o", + FactorOp(ValueFactor(ColumnRef(TableRef("", "", ""), "objectId")), + query::ValueExpr::MINUS), + FactorOp(ValueFactor("1"), query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), nullptr, nullptr, nullptr, nullptr, 0, -1); + }, + "SELECT (`objectId`-1) AS `o` FROM `Object`"), + + // test HAVING with an aggregate + Antlr4TestQueries( + "SELECT objectId, COUNT(*) FROM Object GROUP BY objectId HAVING COUNT(*) > 1", + []() -> shared_ptr { + return SelectStmt( + SelectList( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr("COUNT", + ValueExpr("", + FactorOp(ValueFactor(STAR, ""), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + nullptr, // WhereClause + nullptr, // OrderByClause + GroupByClause(GroupByTerm( + ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE)), + "")), + HavingClause(OrTerm(AndTerm(BoolFactor( + IS, + CompPredicate( + ValueExpr( + "", + FactorOp( + ValueFactor( + query::ValueFactor::AGGFUNC, + FuncExpr( + "COUNT", + ValueExpr( + "", + FactorOp( + ValueFactor(STAR, + ""), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::CompPredicate::GREATER_THAN_OP, + ValueExpr("", FactorOp(ValueFactor("1"), + query::ValueExpr::NONE))))))), + 0, -1); + }, + "SELECT `objectId`,COUNT(*) FROM `Object` GROUP BY `objectId` HAVING COUNT(*)>1"), + + // test a function nested inside an ORDER BY expression. A bare "ORDER BY f(x)" is rejected, but a + // function within a larger expression is allowed. + Antlr4TestQueries( + "SELECT objectId FROM Object ORDER BY ra_PS + scisql_fluxToAbMag(gFlux_PS)", + []() -> shared_ptr { + return SelectStmt( + SelectList(ValueExpr("", FactorOp(ValueFactor(ColumnRef("", "", "objectId")), + query::ValueExpr::NONE))), + FromList(TableRef("", "Object", "")), + nullptr, // WhereClause + OrderByClause(OrderByTerm( + ValueExpr( + "", + FactorOp(ValueFactor(ColumnRef("", "", "ra_PS")), + query::ValueExpr::PLUS), + FactorOp( + ValueFactor( + query::ValueFactor::FUNCTION, + FuncExpr("scisql_fluxToAbMag", + ValueExpr("", + FactorOp(ValueFactor(ColumnRef( + "", "", + "gFlux_PS")), + query::ValueExpr:: + NONE)))), + query::ValueExpr::NONE)), + query::OrderByTerm::DEFAULT, "")), + nullptr, // GroupByClause + nullptr, 0, -1); + }, + "SELECT `objectId` FROM `Object` ORDER BY(`ra_PS`+scisql_fluxToAbMag(`gFlux_PS`)) ASC"), +}; + +BOOST_DATA_TEST_CASE(hyrise_test, ANTLR4_TEST_QUERIES, queryInfo) { + query::SelectStmt::Ptr selectStatement; + BOOST_REQUIRE_NO_THROW(selectStatement = ccontrol::ParseRunner::makeSelectStmt(queryInfo.query)); + BOOST_REQUIRE(selectStatement != nullptr); + // Verify the Hyrise parser renders the SQL form we expect. + std::string serializedQuery; + BOOST_REQUIRE_NO_THROW(serializedQuery = selectStatement->getQueryTemplate().sqlFragment()); + std::string expectedSerializedQuery = + (queryInfo.serializedQuery != "" ? queryInfo.serializedQuery : queryInfo.query); + BOOST_REQUIRE_EQUAL(serializedQuery, expectedSerializedQuery); +} + +BOOST_AUTO_TEST_CASE(set_session_var_test) { + std::string varName, varValue; + + BOOST_REQUIRE(ccontrol::UserQueryType::isSet("SET GLOBAL QSERV_ROW_COUNTER_OPTIMIZATION = 0;", varName, + varValue)); + BOOST_REQUIRE_EQUAL(varName, "QSERV_ROW_COUNTER_OPTIMIZATION"); + BOOST_REQUIRE_EQUAL(varValue, "0"); + + BOOST_REQUIRE(ccontrol::UserQueryType::isSet("SET GLOBAL QSERV_ROW_COUNTER_OPTIMIZATION = 1;", varName, + varValue)); + BOOST_REQUIRE_EQUAL(varName, "QSERV_ROW_COUNTER_OPTIMIZATION"); + BOOST_REQUIRE_EQUAL(varValue, "1"); + + // Verify that bool vals (not handled) are explicitly rejected (to prevent a case where a + // non-zero value "FALSE" evaluates to ON) + BOOST_REQUIRE(!ccontrol::UserQueryType::isSet("SET GLOBAL QSERV_ROW_COUNTER_OPTIMIZATION = FALSE;", + varName, varValue)); + BOOST_REQUIRE(!ccontrol::UserQueryType::isSet("SET GLOBAL QSERV_ROW_COUNTER_OPTIMIZATION = TRUE;", + varName, varValue)); +} + +// OFFSET is not supported by qserv. +BOOST_AUTO_TEST_CASE(offset_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT objectId FROM Object LIMIT 10 OFFSET 5"), + parser::ParseException); +} + +// DISTINCT inside an aggregate function is not supported by qserv. +BOOST_AUTO_TEST_CASE(aggregate_distinct_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT COUNT(DISTINCT objectId) FROM Object"), + parser::ParseException); +} + +// Window functions (OVER clause) are not supported by qserv. +BOOST_AUTO_TEST_CASE(window_function_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt( + "SELECT SUM(ra_PS) OVER (PARTITION BY objectId) FROM Object"), + parser::ParseException); +} + +// Aggregate functions outside the supported set (COUNT/MIN/MAX/SUM/AVG) are not supported by qserv. +BOOST_AUTO_TEST_CASE(unsupported_aggregate_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT STDDEV(ra_PS) FROM Object"), + parser::ParseException); +} + +// Row locking clauses (FOR UPDATE / LOCK IN SHARE MODE) are not supported by qserv. +BOOST_AUTO_TEST_CASE(row_locking_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt("SELECT objectId FROM Object FOR UPDATE"), + parser::ParseException); +} + +// NULLS FIRST/LAST ordering is not supported by qserv. +BOOST_AUTO_TEST_CASE(nulls_ordering_not_supported) { + BOOST_CHECK_THROW( + ccontrol::ParseRunner::makeSelectStmt("SELECT objectId FROM Object ORDER BY objectId NULLS LAST"), + parser::ParseException); +} + +// A qserv area restrictor may appear bare or compared against an integer literal ("= 1"). Comparing it +// against a column must be rejected. +BOOST_AUTO_TEST_CASE(area_restrictor_against_column_not_supported) { + BOOST_CHECK_THROW(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object WHERE qserv_areaspec_box(0, 0, 3, 10) = objectId"), + parser::ParseException); +} + +bool areaRestrictorNotAllowed(parser::ParseException const& err) { + return std::string(err.what()) + .find("qserv area restrictors are only supported in conjunctive (AND) contexts") != + std::string::npos; +} + +void checkAreaRestrictorConjunctionIr(std::string const& query, std::string const& expectedRootTerm) { + auto selectStmt = ccontrol::ParseRunner::makeSelectStmt(query); + BOOST_REQUIRE(selectStmt != nullptr); + BOOST_REQUIRE(selectStmt->hasWhereClause()); + + auto& whereClause = selectStmt->getWhereClause(); + BOOST_REQUIRE(whereClause.hasRestrs()); + BOOST_REQUIRE(whereClause.getRestrs() != nullptr); + BOOST_REQUIRE_EQUAL(whereClause.getRestrs()->size(), 1); + BOOST_REQUIRE(whereClause.getRootTerm() != nullptr); + + query::QueryTemplate rootTermTemplate; + whereClause.getRootTerm()->renderTo(rootTermTemplate); + BOOST_REQUIRE_EQUAL(rootTermTemplate.sqlFragment(), expectedRootTerm); +} + +BOOST_AUTO_TEST_CASE(area_restrictor_in_conjunction_supported) { + checkAreaRestrictorConjunctionIr( + "SELECT objectId FROM Object " + "WHERE filterName='g' AND (qserv_areaspec_box(0, 0, 3, 10) AND ra_PS > 1)", + "`filterName`='g' AND `ra_PS`>1"); + checkAreaRestrictorConjunctionIr( + "SELECT objectId FROM Object " + "WHERE qserv_areaspec_box(0, 0, 3, 10) AND (filterName='g' OR filterName='r')", + "`filterName`='g' OR `filterName`='r'"); + checkAreaRestrictorConjunctionIr( + "SELECT objectId FROM Object " + "WHERE qserv_areaspec_box(0, 0, 3, 10) AND NOT (filterName='g')", + "NOT `filterName`='g'"); +} + +// A qserv area restrictor under OR would be silently extracted to an AND side-channel, changing +// semantics: "restrictor OR x=1" would become effectively "restrictor AND x=1". Reject explicitly. +BOOST_AUTO_TEST_CASE(area_restrictor_under_or_rejected) { + BOOST_CHECK_EXCEPTION( + ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object WHERE qserv_areaspec_box(0, 0, 3, 10) OR filterName='g'"), + parser::ParseException, areaRestrictorNotAllowed); + BOOST_CHECK_EXCEPTION( + ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object WHERE filterName='g' OR qserv_areaspec_box(0, 0, 3, 10)"), + parser::ParseException, areaRestrictorNotAllowed); + BOOST_CHECK_EXCEPTION(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object " + "WHERE (qserv_areaspec_box(0, 0, 3, 10) AND ra_PS > 1) OR filterName='g'"), + parser::ParseException, areaRestrictorNotAllowed); + BOOST_CHECK_EXCEPTION(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object " + "WHERE filterName='g' OR (qserv_areaspec_box(0, 0, 3, 10) AND ra_PS > 1)"), + parser::ParseException, areaRestrictorNotAllowed); + BOOST_CHECK_EXCEPTION(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object " + "WHERE qserv_areaspec_box(0, 0, 3, 10) = 1 OR filterName='g'"), + parser::ParseException, areaRestrictorNotAllowed); + BOOST_CHECK_EXCEPTION(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object " + "WHERE filterName='g' OR 1 = qserv_areaspec_box(0, 0, 3, 10)"), + parser::ParseException, areaRestrictorNotAllowed); +} + +BOOST_AUTO_TEST_CASE(area_restrictor_under_not_rejected) { + BOOST_CHECK_EXCEPTION(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object WHERE NOT qserv_areaspec_box(0, 0, 3, 10)"), + parser::ParseException, areaRestrictorNotAllowed); + BOOST_CHECK_EXCEPTION(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object " + "WHERE NOT (qserv_areaspec_box(0, 0, 3, 10) AND filterName='g')"), + parser::ParseException, areaRestrictorNotAllowed); + BOOST_CHECK_EXCEPTION(ccontrol::ParseRunner::makeSelectStmt( + "SELECT objectId FROM Object " + "WHERE NOT (qserv_areaspec_box(0, 0, 3, 10) OR filterName='g')"), + parser::ParseException, areaRestrictorNotAllowed); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/ccontrol/testParserCorpus.cc b/src/ccontrol/testParserCorpus.cc new file mode 100644 index 0000000000..917ea154ba --- /dev/null +++ b/src/ccontrol/testParserCorpus.cc @@ -0,0 +1,90 @@ +// -*- LSST-C++ -*- +/* + * LSST Data Management System + * Copyright 2026 LSST. + * + * This product includes software developed by the + * LSST Project (http://www.lsst.org/). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the LSST License Statement and + * the GNU General Public License along with this program. If not, + * see . + */ + +// System headers +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BOOST_TEST_MODULE ParserCorpus + +// Third-party headers +#include +#include + +// Qserv headers +#include "ccontrol/ParseRunner.h" + +using namespace std; +namespace fs = std::filesystem; +using namespace lsst::qserv; + +namespace { + +string readFile(fs::path const& path) { + ifstream input(path); + BOOST_REQUIRE_MESSAGE(input.is_open(), "Failed to open file: " << path); + ostringstream content; + content << input.rdbuf(); + return content.str(); +} + +} // namespace + +BOOST_AUTO_TEST_SUITE(Suite) + +// This test case reads files from QSERV_PARSER_CORPUS_DIR, runs them through the parser, +// and converts them to Qserv IR. It serves as both a stress test for the parser/adapter +// and also will highlight any performance regressions in either. +BOOST_AUTO_TEST_CASE(parseCorpus) { + auto corpusDir = QSERV_PARSER_CORPUS_DIR; + BOOST_REQUIRE_MESSAGE(fs::exists(corpusDir), "Parser corpus directory does not exist: " << corpusDir); + BOOST_REQUIRE_MESSAGE(fs::is_directory(corpusDir), "Parser corpus path not a directory: " << corpusDir); + + uint corpusSize = 0; + auto const start = chrono::steady_clock::now(); + for (auto const& entry : fs::recursive_directory_iterator(corpusDir)) { + if (entry.is_regular_file() && entry.path().extension() == ".sql") { + ++corpusSize; + cout << entry.path() << "\n"; + BOOST_TEST_CONTEXT("file=" << entry.path()) { + auto testSql = readFile(entry.path()); + auto selectStmt = ccontrol::ParseRunner::makeSelectStmt(testSql); + BOOST_REQUIRE_MESSAGE(selectStmt != nullptr, + "Test produced null Qserv IR: " << entry.path() << " -> " << testSql); + } + } + } + + auto const stop = chrono::steady_clock::now(); + auto const elapsed = chrono::duration(stop - start).count(); + cout << "testParserCorpus: parsed " << corpusSize << " statement(s) in " << elapsed << "s\n"; +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/ccontrol/testUserQueryType.cc b/src/ccontrol/testUserQueryType.cc index 0c6c56add2..4b6896084c 100644 --- a/src/ccontrol/testUserQueryType.cc +++ b/src/ccontrol/testUserQueryType.cc @@ -39,4 +39,41 @@ BOOST_AUTO_TEST_CASE(testCallQueryType) { BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isCall("submit call QSERV_RESULT_DELETE foo"), false); } +BOOST_AUTO_TEST_CASE(testResultDelete) { + std::string queryId; + BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isResultDelete("CALL QSERV_RESULT_DELETE(1)", queryId), true); + BOOST_CHECK_EQUAL(queryId, "1"); + BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isResultDelete("call qserv_result_delete( 42 ) ;", queryId), + true); + BOOST_CHECK_EQUAL(queryId, "42"); + // Not QSERV_RESULT_DELETE: must not match (only supported CALL form). + BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isResultDelete("CALL SOMETHING_ELSE(1)", queryId), false); +} + +BOOST_AUTO_TEST_CASE(testSetQueryType) { + std::string varName, varValue; + BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isSet("SET GLOBAL QSERV_ROW_COUNTER_OPTIMIZATION = 0", varName, + varValue), + true); + BOOST_CHECK_EQUAL(varName, "QSERV_ROW_COUNTER_OPTIMIZATION"); + BOOST_CHECK_EQUAL(varValue, "0"); + BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isSet("set global QSERV_ROW_COUNTER_OPTIMIZATION = 1;", + varName, varValue), + true); + BOOST_CHECK_EQUAL(varValue, "1"); + + // Boolean values are rejected + BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isSet("SET GLOBAL QSERV_ROW_COUNTER_OPTIMIZATION = FALSE", + varName, varValue), + false); + BOOST_CHECK_EQUAL(ccontrol::UserQueryType::isSet("SET GLOBAL QSERV_ROW_COUNTER_OPTIMIZATION = TRUE", + varName, varValue), + false); + + // GLOBAL is required + BOOST_CHECK_EQUAL( + ccontrol::UserQueryType::isSet("SET QSERV_ROW_COUNTER_OPTIMIZATION = 0", varName, varValue), + false); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/ccontrol/testdata/parser-corpus/README.md b/src/ccontrol/testdata/parser-corpus/README.md new file mode 100644 index 0000000000..e1cc2acdbd --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/README.md @@ -0,0 +1,9 @@ +Place parser corpus SQL files in this directory. + +testParserCorpus reads files ending in `.sql`, parses each statement, and +verifies that Qserv IR can be built. It assumes that there is ONE statement +per file. + +The two main ideas behind this test: + * Stress test the parser and Qserv IR adapter + * Catch parse speed regressions \ No newline at end of file diff --git a/src/ccontrol/testdata/parser-corpus/q01_small.sql b/src/ccontrol/testdata/parser-corpus/q01_small.sql new file mode 100644 index 0000000000..1ab451ef71 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q01_small.sql @@ -0,0 +1,3 @@ +SELECT dp1.Object.objectId, dp1.Object.coord_ra, dp1.Object.coord_dec +FROM dp1.Object +WHERE dp1.Object.objectId = 0 diff --git a/src/ccontrol/testdata/parser-corpus/q02_medium.sql b/src/ccontrol/testdata/parser-corpus/q02_medium.sql new file mode 100644 index 0000000000..64bdfd2335 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q02_medium.sql @@ -0,0 +1,111 @@ +SELECT + dp1.Object.qserv_trans_id AS qserv_trans_id_raw, + dp1.Object.objectId AS objectId_raw, + dp1.Object.iauId AS iauId_raw, + dp1.Object.ra_PS AS ra_PS_raw, + dp1.Object.ra_PS_Sigma AS ra_PS_Sigma_raw, + dp1.Object.decl_PS AS decl_PS_raw, + dp1.Object.decl_PS_Sigma AS decl_PS_Sigma_raw, + dp1.Object.radecl_PS_Cov AS radecl_PS_Cov_raw, + dp1.Object.htmId20 AS htmId20_raw, + dp1.Object.ra_SG AS ra_SG_raw, + dp1.Object.ra_SG_Sigma AS ra_SG_Sigma_raw, + dp1.Object.decl_SG AS decl_SG_raw, + dp1.Object.decl_SG_Sigma AS decl_SG_Sigma_raw, + dp1.Object.radecl_SG_Cov AS radecl_SG_Cov_raw, + dp1.Object.raRange AS raRange_raw, + dp1.Object.declRange AS declRange_raw, + dp1.Object.muRa_PS AS muRa_PS_raw, + dp1.Object.muRa_PS_Sigma AS muRa_PS_Sigma_raw, + dp1.Object.muDecl_PS AS muDecl_PS_raw, + dp1.Object.muDecl_PS_Sigma AS muDecl_PS_Sigma_raw, + dp1.Object.muRaDecl_PS_Cov AS muRaDecl_PS_Cov_raw, + dp1.Object.parallax_PS AS parallax_PS_raw, + dp1.Object.parallax_PS_Sigma AS parallax_PS_Sigma_raw, + dp1.Object.canonicalFilterId AS canonicalFilterId_raw, + dp1.Object.extendedness AS extendedness_raw, + dp1.Object.varProb AS varProb_raw, + dp1.Object.earliestObsTime AS earliestObsTime_raw, + dp1.Object.latestObsTime AS latestObsTime_raw, + dp1.Object.meanObsTime AS meanObsTime_raw, + dp1.Object.flags AS flags_raw, + dp1.Object.uNumObs AS uNumObs_raw, + dp1.Object.uExtendedness AS uExtendedness_raw, + dp1.Object.uVarProb AS uVarProb_raw, + dp1.Object.uRaOffset_PS AS uRaOffset_PS_raw, + dp1.Object.uRaOffset_PS_Sigma AS uRaOffset_PS_Sigma_raw, + dp1.Object.uDeclOffset_PS AS uDeclOffset_PS_raw, + dp1.Object.uDeclOffset_PS_Sigma AS uDeclOffset_PS_Sigma_raw, + dp1.Object.uRaDeclOffset_PS_Cov AS uRaDeclOffset_PS_Cov_raw, + dp1.Object.uRaOffset_SG AS uRaOffset_SG_raw, + dp1.Object.uRaOffset_SG_Sigma AS uRaOffset_SG_Sigma_raw, + dp1.Object.uDeclOffset_SG AS uDeclOffset_SG_raw, + dp1.Object.uDeclOffset_SG_Sigma AS uDeclOffset_SG_Sigma_raw, + dp1.Object.uRaDeclOffset_SG_Cov AS uRaDeclOffset_SG_Cov_raw, + dp1.Object.uLnL_PS AS uLnL_PS_raw, + dp1.Object.uLnL_SG AS uLnL_SG_raw, + dp1.Object.coord_dec AS coord_dec_raw, + dp1.Object.coord_decErr AS coord_decErr_raw, + dp1.Object.coord_ra AS coord_ra_raw, + dp1.Object.coord_ra_dec_Cov AS coord_ra_dec_Cov_raw, + dp1.Object.coord_raErr AS coord_raErr_raw, + dp1.Object.deblend_failed AS deblend_failed_raw, + dp1.Object.deblend_incompleteData AS deblend_incompleteData_raw, + dp1.Object.deblend_isolatedParent AS deblend_isolatedParent_raw, + dp1.Object.deblend_iterations AS deblend_iterations_raw, + dp1.Object.deblend_logL AS deblend_logL_raw, + dp1.Object.deblend_masked AS deblend_masked_raw, + dp1.Object.deblend_nChild AS deblend_nChild_raw, + dp1.Object.deblend_nPeaks AS deblend_nPeaks_raw, + dp1.Object.deblend_parentTooBig AS deblend_parentTooBig_raw, + dp1.Object.deblend_peak_center_x AS deblend_peak_center_x_raw, + ((dp1.Object.qserv_trans_id + dp1.Object.decl_SG) * 1) AS expr_0_qserv_trans_id, + ((dp1.Object.objectId + dp1.Object.decl_SG_Sigma) * 2) AS expr_1_objectId, + ((dp1.Object.iauId + dp1.Object.radecl_SG_Cov) * 3) AS expr_2_iauId, + ((dp1.Object.ra_PS + dp1.Object.raRange) * 4) AS expr_3_ra_PS, + ((dp1.Object.ra_PS_Sigma + dp1.Object.declRange) * 5) AS expr_4_ra_PS_Sigma, + ((dp1.Object.decl_PS + dp1.Object.muRa_PS) * 1) AS expr_5_decl_PS, + ((dp1.Object.decl_PS_Sigma + dp1.Object.muRa_PS_Sigma) * 2) AS expr_6_decl_PS_Sigma, + ((dp1.Object.radecl_PS_Cov + dp1.Object.muDecl_PS) * 3) AS expr_7_radecl_PS_Cov, + ((dp1.Object.htmId20 + dp1.Object.muDecl_PS_Sigma) * 4) AS expr_8_htmId20, + ((dp1.Object.ra_SG + dp1.Object.muRaDecl_PS_Cov) * 5) AS expr_9_ra_SG, + ((dp1.Object.ra_SG_Sigma + dp1.Object.parallax_PS) * 1) AS expr_10_ra_SG_Sigma, + ((dp1.Object.decl_SG + dp1.Object.parallax_PS_Sigma) * 2) AS expr_11_decl_SG, + ((dp1.Object.decl_SG_Sigma + dp1.Object.canonicalFilterId) * 3) AS expr_12_decl_SG_Sigma, + ((dp1.Object.radecl_SG_Cov + dp1.Object.extendedness) * 4) AS expr_13_radecl_SG_Cov, + ((dp1.Object.raRange + dp1.Object.varProb) * 5) AS expr_14_raRange, + ((dp1.Object.declRange + dp1.Object.earliestObsTime) * 1) AS expr_15_declRange, + ((dp1.Object.muRa_PS + dp1.Object.latestObsTime) * 2) AS expr_16_muRa_PS, + ((dp1.Object.muRa_PS_Sigma + dp1.Object.meanObsTime) * 3) AS expr_17_muRa_PS_Sigma, + ((dp1.Object.muDecl_PS + dp1.Object.flags) * 4) AS expr_18_muDecl_PS, + ((dp1.Object.muDecl_PS_Sigma + dp1.Object.uNumObs) * 5) AS expr_19_muDecl_PS_Sigma, + ((dp1.Object.muRaDecl_PS_Cov + dp1.Object.uExtendedness) * 1) AS expr_20_muRaDecl_PS_Cov, + ((dp1.Object.parallax_PS + dp1.Object.uVarProb) * 2) AS expr_21_parallax_PS, + ((dp1.Object.parallax_PS_Sigma + dp1.Object.uRaOffset_PS) * 3) AS expr_22_parallax_PS_Sigma, + ((dp1.Object.canonicalFilterId + dp1.Object.uRaOffset_PS_Sigma) * 4) AS expr_23_canonicalFilterId, + ((dp1.Object.extendedness + dp1.Object.uDeclOffset_PS) * 5) AS expr_24_extendedness, + ((dp1.Object.varProb + dp1.Object.uDeclOffset_PS_Sigma) * 1) AS expr_25_varProb, + ((dp1.Object.earliestObsTime + dp1.Object.uRaDeclOffset_PS_Cov) * 2) AS expr_26_earliestObsTime, + ((dp1.Object.latestObsTime + dp1.Object.uRaOffset_SG) * 3) AS expr_27_latestObsTime, + ((dp1.Object.meanObsTime + dp1.Object.uRaOffset_SG_Sigma) * 4) AS expr_28_meanObsTime, + ((dp1.Object.flags + dp1.Object.uDeclOffset_SG) * 5) AS expr_29_flags, + ((dp1.Object.uNumObs + dp1.Object.uDeclOffset_SG_Sigma) * 1) AS expr_30_uNumObs, + ((dp1.Object.uExtendedness + dp1.Object.uRaDeclOffset_SG_Cov) * 2) AS expr_31_uExtendedness, + ((dp1.Object.uVarProb + dp1.Object.uLnL_PS) * 3) AS expr_32_uVarProb, + ((dp1.Object.uRaOffset_PS + dp1.Object.uLnL_SG) * 4) AS expr_33_uRaOffset_PS, + ((dp1.Object.uRaOffset_PS_Sigma + dp1.Object.coord_dec) * 5) AS expr_34_uRaOffset_PS_Sigma +FROM dp1.Object +WHERE + (dp1.Object.qserv_trans_id > 0 AND dp1.Object.objectId < 1 AND dp1.Object.iauId >= 2) + OR (dp1.Object.ra_PS > 3 AND dp1.Object.ra_PS_Sigma < 4 AND dp1.Object.decl_PS >= 5) + OR (dp1.Object.decl_PS_Sigma > 6 AND dp1.Object.radecl_PS_Cov < 7 AND dp1.Object.htmId20 >= 8) + OR (dp1.Object.ra_SG > 9 AND dp1.Object.ra_SG_Sigma < 10 AND dp1.Object.decl_SG >= 11) + OR (dp1.Object.decl_SG_Sigma > 12 AND dp1.Object.radecl_SG_Cov < 13 AND dp1.Object.raRange >= 14) + OR (dp1.Object.declRange > 15 AND dp1.Object.muRa_PS < 16 AND dp1.Object.muRa_PS_Sigma >= 17) + OR (dp1.Object.muDecl_PS > 18 AND dp1.Object.muDecl_PS_Sigma < 19 AND dp1.Object.muRaDecl_PS_Cov >= 0) + OR (dp1.Object.parallax_PS > 1 AND dp1.Object.parallax_PS_Sigma < 2 AND dp1.Object.canonicalFilterId >= 3) + OR (dp1.Object.extendedness > 4 AND dp1.Object.varProb < 5 AND dp1.Object.earliestObsTime >= 6) + OR (dp1.Object.latestObsTime > 7 AND dp1.Object.meanObsTime < 8 AND dp1.Object.flags >= 9) + OR (dp1.Object.uNumObs > 10 AND dp1.Object.uExtendedness < 11 AND dp1.Object.uVarProb >= 12) + OR (dp1.Object.uRaOffset_PS > 13 AND dp1.Object.uRaOffset_PS_Sigma < 14 AND dp1.Object.uDeclOffset_PS >= 15) +ORDER BY dp1.Object.objectId diff --git a/src/ccontrol/testdata/parser-corpus/q03_original.sql b/src/ccontrol/testdata/parser-corpus/q03_original.sql new file mode 100644 index 0000000000..2258c3b0dd --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q03_original.sql @@ -0,0 +1 @@ +SELECT dp1.Object.coord_dec, dp1.Object.coord_decErr, dp1.Object.coord_ra, dp1.Object.coord_ra_dec_Cov, dp1.Object.coord_raErr, dp1.Object.deblend_failed, dp1.Object.deblend_incompleteData, dp1.Object.deblend_isolatedParent, dp1.Object.deblend_iterations, dp1.Object.deblend_logL, dp1.Object.deblend_masked, dp1.Object.deblend_nChild, dp1.Object.deblend_nPeaks, dp1.Object.deblend_parentTooBig, dp1.Object.deblend_peak_center_x, dp1.Object.deblend_peak_center_y, dp1.Object.deblend_skipped, dp1.Object.deblend_tooManyPeaks, dp1.Object.detect_fromBlend, dp1.Object.detect_isDeblendedModelSource, dp1.Object.detect_isIsolated, dp1.Object.ebv, dp1.Object.footprintArea, dp1.Object.g_ap03Flux, dp1.Object.g_ap03Flux_flag, dp1.Object.g_ap03FluxErr, dp1.Object.g_ap06Flux, dp1.Object.g_ap06Flux_flag, dp1.Object.g_ap06FluxErr, dp1.Object.g_ap09Flux, dp1.Object.g_ap09Flux_flag, dp1.Object.g_ap09FluxErr, dp1.Object.g_ap12Flux, dp1.Object.g_ap12Flux_flag, dp1.Object.g_ap12FluxErr, dp1.Object.g_ap17Flux, dp1.Object.g_ap17Flux_flag, dp1.Object.g_ap17FluxErr, dp1.Object.g_ap25Flux, dp1.Object.g_ap25Flux_flag, dp1.Object.g_ap25FluxErr, dp1.Object.g_ap35Flux, dp1.Object.g_ap35Flux_flag, dp1.Object.g_ap35FluxErr, dp1.Object.g_ap50Flux, dp1.Object.g_ap50Flux_flag, dp1.Object.g_ap50FluxErr, dp1.Object.g_ap70Flux, dp1.Object.g_ap70Flux_flag, dp1.Object.g_ap70FluxErr, dp1.Object.g_apFlux_flag, dp1.Object.g_apFlux_flag_apertureTruncated, dp1.Object.g_apFlux_flag_sincCoeffsTruncated, dp1.Object.g_bdChi2, dp1.Object.g_bdE1, dp1.Object.g_bdE2, dp1.Object.g_bdFluxB, dp1.Object.g_bdFluxBErr, dp1.Object.g_bdFluxD, dp1.Object.g_bdFluxDErr, dp1.Object.g_bdReB, dp1.Object.g_bdReD, dp1.Object.g_blendedness, dp1.Object.g_blendedness_flag, dp1.Object.g_calib_astrometry_used, dp1.Object.g_calib_photometry_reserved, dp1.Object.g_calib_photometry_used, dp1.Object.g_calib_psf_candidate, dp1.Object.g_calib_psf_reserved, dp1.Object.g_calib_psf_used, dp1.Object.g_calibFlux, dp1.Object.g_calibFlux_flag, dp1.Object.g_calibFlux_flag_apertureTruncated, dp1.Object.g_calibFlux_flag_sincCoeffsTruncated, dp1.Object.g_calibFluxErr, dp1.Object.g_centroid_flag, dp1.Object.g_centroid_x, dp1.Object.g_centroid_xErr, dp1.Object.g_centroid_y, dp1.Object.g_centroid_yErr, dp1.Object.g_cModel_flag, dp1.Object.g_cModel_flag_apCorr, dp1.Object.g_cModelFlux, dp1.Object.g_cModelFlux_inner, dp1.Object.g_cModelFluxErr, dp1.Object.g_cModelMag, dp1.Object.g_cModelMagErr, dp1.Object.g_deblend_blendedness, dp1.Object.g_deblend_dataCoverage, dp1.Object.g_deblend_fluxOverlap, dp1.Object.g_deblend_fluxOverlapFraction, dp1.Object.g_deblend_zeroFlux, dp1.Object.g_dec, dp1.Object.g_decErr, dp1.Object.g_epoch, dp1.Object.g_extendedness, dp1.Object.g_extendedness_flag, dp1.Object.g_free_cModelFlux, dp1.Object.g_free_cModelFlux_flag, dp1.Object.g_free_cModelFlux_inner, dp1.Object.g_free_cModelFluxErr, dp1.Object.g_free_psfFlux, dp1.Object.g_free_psfFlux_flag, dp1.Object.g_free_psfFluxErr, dp1.Object.g_gaap0p7Flux, dp1.Object.g_gaap0p7Flux_flag_bigPsf, dp1.Object.g_gaap0p7FluxErr, dp1.Object.g_gaap1p0Flux, dp1.Object.g_gaap1p0Flux_flag_bigPsf, dp1.Object.g_gaap1p0FluxErr, dp1.Object.g_gaap1p5Flux, dp1.Object.g_gaap1p5Flux_flag_bigPsf, dp1.Object.g_gaap1p5FluxErr, dp1.Object.g_gaap2p5Flux, dp1.Object.g_gaap2p5Flux_flag_bigPsf, dp1.Object.g_gaap2p5FluxErr, dp1.Object.g_gaap3p0Flux, dp1.Object.g_gaap3p0Flux_flag_bigPsf, dp1.Object.g_gaap3p0FluxErr, dp1.Object.g_gaapFlux_flag, dp1.Object.g_gaapFlux_flag_edge, dp1.Object.g_gaapFlux_flag_gaussianization, dp1.Object.g_gaapOptimalFlux, dp1.Object.g_gaapOptimalFlux_flag_bigPsf, dp1.Object.g_gaapOptimalFluxErr, dp1.Object.g_gaapPsfFlux, dp1.Object.g_gaapPsfFluxErr, dp1.Object.g_hsm_moments_03, dp1.Object.g_hsm_moments_04, dp1.Object.g_hsm_moments_12, dp1.Object.g_hsm_moments_13, dp1.Object.g_hsm_moments_21, dp1.Object.g_hsm_moments_22, dp1.Object.g_hsm_moments_30, dp1.Object.g_hsm_moments_31, dp1.Object.g_hsm_moments_40, dp1.Object.g_hsm_moments_flag, dp1.Object.g_hsm_momentsPsf_03, dp1.Object.g_hsm_momentsPsf_04, dp1.Object.g_hsm_momentsPsf_12, dp1.Object.g_hsm_momentsPsf_13, dp1.Object.g_hsm_momentsPsf_21, dp1.Object.g_hsm_momentsPsf_22, dp1.Object.g_hsm_momentsPsf_30, dp1.Object.g_hsm_momentsPsf_31, dp1.Object.g_hsm_momentsPsf_40, dp1.Object.g_hsm_momentsPsf_flag, dp1.Object.g_hsmShapeRegauss_e1, dp1.Object.g_hsmShapeRegauss_e2, dp1.Object.g_hsmShapeRegauss_flag, dp1.Object.g_hsmShapeRegauss_sigma, dp1.Object.g_i_flag, dp1.Object.g_iDebiasedPSF_flag, dp1.Object.g_inputCount, dp1.Object.g_inputCount_flag, dp1.Object.g_inputCount_flag_noInputs, dp1.Object.g_invalidPsfFlag, dp1.Object.g_iPSF_flag, dp1.Object.g_iRound_flag, dp1.Object.g_ixx, dp1.Object.g_ixxDebiasedPSF, dp1.Object.g_ixxPSF, dp1.Object.g_ixxRound, dp1.Object.g_ixy, dp1.Object.g_ixyDebiasedPSF, dp1.Object.g_ixyPSF, dp1.Object.g_ixyRound, dp1.Object.g_iyy, dp1.Object.g_iyyDebiasedPSF, dp1.Object.g_iyyPSF, dp1.Object.g_iyyRound, dp1.Object.g_kronFlux, dp1.Object.g_kronFlux_flag, dp1.Object.g_kronFlux_flag_bad_radius, dp1.Object.g_kronFlux_flag_bad_shape, dp1.Object.g_kronFlux_flag_bad_shape_no_psf, dp1.Object.g_kronFlux_flag_edge, dp1.Object.g_kronFlux_flag_no_fallback_radius, dp1.Object.g_kronFlux_flag_no_minimum_radius, dp1.Object.g_kronFlux_flag_small_radius, dp1.Object.g_kronFlux_flag_used_minimum_radius, dp1.Object.g_kronFlux_flag_used_psf_radius, dp1.Object.g_kronFluxErr, dp1.Object.g_kronRad, dp1.Object.g_pixelFlags_bad, dp1.Object.g_pixelFlags_clipped, dp1.Object.g_pixelFlags_clippedCenter, dp1.Object.g_pixelFlags_cr, dp1.Object.g_pixelFlags_crCenter, dp1.Object.g_pixelFlags_edge, dp1.Object.g_pixelFlags_inexact_psf, dp1.Object.g_pixelFlags_inexact_psfCenter, dp1.Object.g_pixelFlags_interpolated, dp1.Object.g_pixelFlags_interpolatedCenter, dp1.Object.g_pixelFlags_nodata, dp1.Object.g_pixelFlags_offimage, dp1.Object.g_pixelFlags_saturated, dp1.Object.g_pixelFlags_saturatedCenter, dp1.Object.g_pixelFlags_sensor_edge, dp1.Object.g_pixelFlags_sensor_edgeCenter, dp1.Object.g_pixelFlags_suspect, dp1.Object.g_pixelFlags_suspectCenter, dp1.Object.g_psfFlux, dp1.Object.g_psfFlux_area, dp1.Object.g_psfFlux_flag, dp1.Object.g_psfFlux_flag_apCorr, dp1.Object.g_psfFlux_flag_edge, dp1.Object.g_psfFlux_flag_noGoodPixels, dp1.Object.g_psfFluxErr, dp1.Object.g_psfMag, dp1.Object.g_psfMagErr, dp1.Object.g_psfModel_TwoGaussian_chisq_reduced, dp1.Object.g_psfModel_TwoGaussian_gauss1_fluxfrac, dp1.Object.g_psfModel_TwoGaussian_gauss1_rho, dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_x, dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_y, dp1.Object.g_psfModel_TwoGaussian_gauss2_rho, dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_x, dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_y, dp1.Object.g_psfModel_TwoGaussian_n_iter, dp1.Object.g_psfModel_TwoGaussian_no_inputs_flag, dp1.Object.g_psfModel_TwoGaussian_unknown_flag, dp1.Object.g_ra, dp1.Object.g_ra_dec_Cov, dp1.Object.g_raErr, dp1.Object.g_sersicFlux, dp1.Object.g_sersicFluxErr, dp1.Object.g_sizeExtendedness, dp1.Object.g_sizeExtendedness_flag, dp1.Object.i_ap03Flux, dp1.Object.i_ap03Flux_flag, dp1.Object.i_ap03FluxErr, dp1.Object.i_ap06Flux, dp1.Object.i_ap06Flux_flag, dp1.Object.i_ap06FluxErr, dp1.Object.i_ap09Flux, dp1.Object.i_ap09Flux_flag, dp1.Object.i_ap09FluxErr, dp1.Object.i_ap12Flux, dp1.Object.i_ap12Flux_flag, dp1.Object.i_ap12FluxErr, dp1.Object.i_ap17Flux, dp1.Object.i_ap17Flux_flag, dp1.Object.i_ap17FluxErr, dp1.Object.i_ap25Flux, dp1.Object.i_ap25Flux_flag, dp1.Object.i_ap25FluxErr, dp1.Object.i_ap35Flux, dp1.Object.i_ap35Flux_flag, dp1.Object.i_ap35FluxErr, dp1.Object.i_ap50Flux, dp1.Object.i_ap50Flux_flag, dp1.Object.i_ap50FluxErr, dp1.Object.i_ap70Flux, dp1.Object.i_ap70Flux_flag, dp1.Object.i_ap70FluxErr, dp1.Object.i_apFlux_flag, dp1.Object.i_apFlux_flag_apertureTruncated, dp1.Object.i_apFlux_flag_sincCoeffsTruncated, dp1.Object.i_bdChi2, dp1.Object.i_bdE1, dp1.Object.i_bdE2, dp1.Object.i_bdFluxB, dp1.Object.i_bdFluxBErr, dp1.Object.i_bdFluxD, dp1.Object.i_bdFluxDErr, dp1.Object.i_bdReB, dp1.Object.i_bdReD, dp1.Object.i_blendedness, dp1.Object.i_blendedness_flag, dp1.Object.i_calib_astrometry_used, dp1.Object.i_calib_photometry_reserved, dp1.Object.i_calib_photometry_used, dp1.Object.i_calib_psf_candidate, dp1.Object.i_calib_psf_reserved, dp1.Object.i_calib_psf_used, dp1.Object.i_calibFlux, dp1.Object.i_calibFlux_flag, dp1.Object.i_calibFlux_flag_apertureTruncated, dp1.Object.i_calibFlux_flag_sincCoeffsTruncated, dp1.Object.i_calibFluxErr, dp1.Object.i_centroid_flag, dp1.Object.i_centroid_x, dp1.Object.i_centroid_xErr, dp1.Object.i_centroid_y, dp1.Object.i_centroid_yErr, dp1.Object.i_cModel_flag, dp1.Object.i_cModel_flag_apCorr, dp1.Object.i_cModelFlux, dp1.Object.i_cModelFlux_inner, dp1.Object.i_cModelFluxErr, dp1.Object.i_cModelMag, dp1.Object.i_cModelMagErr, dp1.Object.i_deblend_blendedness, dp1.Object.i_deblend_dataCoverage, dp1.Object.i_deblend_fluxOverlap, dp1.Object.i_deblend_fluxOverlapFraction, dp1.Object.i_deblend_zeroFlux, dp1.Object.i_dec, dp1.Object.i_decErr, dp1.Object.i_epoch, dp1.Object.i_extendedness, dp1.Object.i_extendedness_flag, dp1.Object.i_free_cModelFlux, dp1.Object.i_free_cModelFlux_flag, dp1.Object.i_free_cModelFlux_inner, dp1.Object.i_free_cModelFluxErr, dp1.Object.i_free_psfFlux, dp1.Object.i_free_psfFlux_flag, dp1.Object.i_free_psfFluxErr, dp1.Object.i_gaap0p7Flux, dp1.Object.i_gaap0p7Flux_flag_bigPsf, dp1.Object.i_gaap0p7FluxErr, dp1.Object.i_gaap1p0Flux, dp1.Object.i_gaap1p0Flux_flag_bigPsf, dp1.Object.i_gaap1p0FluxErr, dp1.Object.i_gaap1p5Flux, dp1.Object.i_gaap1p5Flux_flag_bigPsf, dp1.Object.i_gaap1p5FluxErr, dp1.Object.i_gaap2p5Flux, dp1.Object.i_gaap2p5Flux_flag_bigPsf, dp1.Object.i_gaap2p5FluxErr, dp1.Object.i_gaap3p0Flux, dp1.Object.i_gaap3p0Flux_flag_bigPsf, dp1.Object.i_gaap3p0FluxErr, dp1.Object.i_gaapFlux_flag, dp1.Object.i_gaapFlux_flag_edge, dp1.Object.i_gaapFlux_flag_gaussianization, dp1.Object.i_gaapOptimalFlux, dp1.Object.i_gaapOptimalFlux_flag_bigPsf, dp1.Object.i_gaapOptimalFluxErr, dp1.Object.i_gaapPsfFlux, dp1.Object.i_gaapPsfFluxErr, dp1.Object.i_hsm_moments_03, dp1.Object.i_hsm_moments_04, dp1.Object.i_hsm_moments_12, dp1.Object.i_hsm_moments_13, dp1.Object.i_hsm_moments_21, dp1.Object.i_hsm_moments_22, dp1.Object.i_hsm_moments_30, dp1.Object.i_hsm_moments_31, dp1.Object.i_hsm_moments_40, dp1.Object.i_hsm_moments_flag, dp1.Object.i_hsm_momentsPsf_03, dp1.Object.i_hsm_momentsPsf_04, dp1.Object.i_hsm_momentsPsf_12, dp1.Object.i_hsm_momentsPsf_13, dp1.Object.i_hsm_momentsPsf_21, dp1.Object.i_hsm_momentsPsf_22, dp1.Object.i_hsm_momentsPsf_30, dp1.Object.i_hsm_momentsPsf_31, dp1.Object.i_hsm_momentsPsf_40, dp1.Object.i_hsm_momentsPsf_flag, dp1.Object.i_hsmShapeRegauss_e1, dp1.Object.i_hsmShapeRegauss_e2, dp1.Object.i_hsmShapeRegauss_flag, dp1.Object.i_hsmShapeRegauss_sigma, dp1.Object.i_i_flag, dp1.Object.i_iDebiasedPSF_flag, dp1.Object.i_inputCount, dp1.Object.i_inputCount_flag, dp1.Object.i_inputCount_flag_noInputs, dp1.Object.i_invalidPsfFlag, dp1.Object.i_iPSF_flag, dp1.Object.i_iRound_flag, dp1.Object.i_ixx, dp1.Object.i_ixxDebiasedPSF, dp1.Object.i_ixxPSF, dp1.Object.i_ixxRound, dp1.Object.i_ixy, dp1.Object.i_ixyDebiasedPSF, dp1.Object.i_ixyPSF, dp1.Object.i_ixyRound, dp1.Object.i_iyy, dp1.Object.i_iyyDebiasedPSF, dp1.Object.i_iyyPSF, dp1.Object.i_iyyRound, dp1.Object.i_kronFlux, dp1.Object.i_kronFlux_flag, dp1.Object.i_kronFlux_flag_bad_radius, dp1.Object.i_kronFlux_flag_bad_shape, dp1.Object.i_kronFlux_flag_bad_shape_no_psf, dp1.Object.i_kronFlux_flag_edge, dp1.Object.i_kronFlux_flag_no_fallback_radius, dp1.Object.i_kronFlux_flag_no_minimum_radius, dp1.Object.i_kronFlux_flag_small_radius, dp1.Object.i_kronFlux_flag_used_minimum_radius, dp1.Object.i_kronFlux_flag_used_psf_radius, dp1.Object.i_kronFluxErr, dp1.Object.i_kronRad, dp1.Object.i_pixelFlags_bad, dp1.Object.i_pixelFlags_clipped, dp1.Object.i_pixelFlags_clippedCenter, dp1.Object.i_pixelFlags_cr, dp1.Object.i_pixelFlags_crCenter, dp1.Object.i_pixelFlags_edge, dp1.Object.i_pixelFlags_inexact_psf, dp1.Object.i_pixelFlags_inexact_psfCenter, dp1.Object.i_pixelFlags_interpolated, dp1.Object.i_pixelFlags_interpolatedCenter, dp1.Object.i_pixelFlags_nodata, dp1.Object.i_pixelFlags_offimage, dp1.Object.i_pixelFlags_saturated, dp1.Object.i_pixelFlags_saturatedCenter, dp1.Object.i_pixelFlags_sensor_edge, dp1.Object.i_pixelFlags_sensor_edgeCenter, dp1.Object.i_pixelFlags_suspect, dp1.Object.i_pixelFlags_suspectCenter, dp1.Object.i_psfFlux, dp1.Object.i_psfFlux_area, dp1.Object.i_psfFlux_flag, dp1.Object.i_psfFlux_flag_apCorr, dp1.Object.i_psfFlux_flag_edge, dp1.Object.i_psfFlux_flag_noGoodPixels, dp1.Object.i_psfFluxErr, dp1.Object.i_psfMag, dp1.Object.i_psfMagErr, dp1.Object.i_psfModel_TwoGaussian_chisq_reduced, dp1.Object.i_psfModel_TwoGaussian_gauss1_fluxfrac, dp1.Object.i_psfModel_TwoGaussian_gauss1_rho, dp1.Object.i_psfModel_TwoGaussian_gauss1_sigma_x, dp1.Object.i_psfModel_TwoGaussian_gauss1_sigma_y, dp1.Object.i_psfModel_TwoGaussian_gauss2_rho, dp1.Object.i_psfModel_TwoGaussian_gauss2_sigma_x, dp1.Object.i_psfModel_TwoGaussian_gauss2_sigma_y, dp1.Object.i_psfModel_TwoGaussian_n_iter, dp1.Object.i_psfModel_TwoGaussian_no_inputs_flag, dp1.Object.i_psfModel_TwoGaussian_unknown_flag, dp1.Object.i_ra, dp1.Object.i_ra_dec_Cov, dp1.Object.i_raErr, dp1.Object.i_sersicFlux, dp1.Object.i_sersicFluxErr, dp1.Object.i_sizeExtendedness, dp1.Object.i_sizeExtendedness_flag, dp1.Object.objectId, dp1.Object.parentObjectId, dp1.Object.patch, dp1.Object.r_ap03Flux, dp1.Object.r_ap03Flux_flag, dp1.Object.r_ap03FluxErr, dp1.Object.r_ap06Flux, dp1.Object.r_ap06Flux_flag, dp1.Object.r_ap06FluxErr, dp1.Object.r_ap09Flux, dp1.Object.r_ap09Flux_flag, dp1.Object.r_ap09FluxErr, dp1.Object.r_ap12Flux, dp1.Object.r_ap12Flux_flag, dp1.Object.r_ap12FluxErr, dp1.Object.r_ap17Flux, dp1.Object.r_ap17Flux_flag, dp1.Object.r_ap17FluxErr, dp1.Object.r_ap25Flux, dp1.Object.r_ap25Flux_flag, dp1.Object.r_ap25FluxErr, dp1.Object.r_ap35Flux, dp1.Object.r_ap35Flux_flag, dp1.Object.r_ap35FluxErr, dp1.Object.r_ap50Flux, dp1.Object.r_ap50Flux_flag, dp1.Object.r_ap50FluxErr, dp1.Object.r_ap70Flux, dp1.Object.r_ap70Flux_flag, dp1.Object.r_ap70FluxErr, dp1.Object.r_apFlux_flag, dp1.Object.r_apFlux_flag_apertureTruncated, dp1.Object.r_apFlux_flag_sincCoeffsTruncated, dp1.Object.r_bdChi2, dp1.Object.r_bdE1, dp1.Object.r_bdE2, dp1.Object.r_bdFluxB, dp1.Object.r_bdFluxBErr, dp1.Object.r_bdFluxD, dp1.Object.r_bdFluxDErr, dp1.Object.r_bdReB, dp1.Object.r_bdReD, dp1.Object.r_blendedness, dp1.Object.r_blendedness_flag, dp1.Object.r_calib_astrometry_used, dp1.Object.r_calib_photometry_reserved, dp1.Object.r_calib_photometry_used, dp1.Object.r_calib_psf_candidate, dp1.Object.r_calib_psf_reserved, dp1.Object.r_calib_psf_used, dp1.Object.r_calibFlux, dp1.Object.r_calibFlux_flag, dp1.Object.r_calibFlux_flag_apertureTruncated, dp1.Object.r_calibFlux_flag_sincCoeffsTruncated, dp1.Object.r_calibFluxErr, dp1.Object.r_centroid_flag, dp1.Object.r_centroid_x, dp1.Object.r_centroid_xErr, dp1.Object.r_centroid_y, dp1.Object.r_centroid_yErr, dp1.Object.r_cModel_flag, dp1.Object.r_cModel_flag_apCorr, dp1.Object.r_cModelFlux, dp1.Object.r_cModelFlux_inner, dp1.Object.r_cModelFluxErr, dp1.Object.r_cModelMag, dp1.Object.r_cModelMagErr, dp1.Object.r_deblend_blendedness, dp1.Object.r_deblend_dataCoverage, dp1.Object.r_deblend_fluxOverlap, dp1.Object.r_deblend_fluxOverlapFraction, dp1.Object.r_deblend_zeroFlux, dp1.Object.r_dec, dp1.Object.r_decErr, dp1.Object.r_epoch, dp1.Object.r_extendedness, dp1.Object.r_extendedness_flag, dp1.Object.r_free_cModelFlux, dp1.Object.r_free_cModelFlux_flag, dp1.Object.r_free_cModelFlux_inner, dp1.Object.r_free_cModelFluxErr, dp1.Object.r_free_psfFlux, dp1.Object.r_free_psfFlux_flag, dp1.Object.r_free_psfFluxErr, dp1.Object.r_gaap0p7Flux, dp1.Object.r_gaap0p7Flux_flag_bigPsf, dp1.Object.r_gaap0p7FluxErr, dp1.Object.r_gaap1p0Flux, dp1.Object.r_gaap1p0Flux_flag_bigPsf, dp1.Object.r_gaap1p0FluxErr, dp1.Object.r_gaap1p5Flux, dp1.Object.r_gaap1p5Flux_flag_bigPsf, dp1.Object.r_gaap1p5FluxErr, dp1.Object.r_gaap2p5Flux, dp1.Object.r_gaap2p5Flux_flag_bigPsf, dp1.Object.r_gaap2p5FluxErr, dp1.Object.r_gaap3p0Flux, dp1.Object.r_gaap3p0Flux_flag_bigPsf, dp1.Object.r_gaap3p0FluxErr, dp1.Object.r_gaapFlux_flag, dp1.Object.r_gaapFlux_flag_edge, dp1.Object.r_gaapFlux_flag_gaussianization, dp1.Object.r_gaapOptimalFlux, dp1.Object.r_gaapOptimalFlux_flag_bigPsf, dp1.Object.r_gaapOptimalFluxErr, dp1.Object.r_gaapPsfFlux, dp1.Object.r_gaapPsfFluxErr, dp1.Object.r_hsm_moments_03, dp1.Object.r_hsm_moments_04, dp1.Object.r_hsm_moments_12, dp1.Object.r_hsm_moments_13, dp1.Object.r_hsm_moments_21, dp1.Object.r_hsm_moments_22, dp1.Object.r_hsm_moments_30, dp1.Object.r_hsm_moments_31, dp1.Object.r_hsm_moments_40, dp1.Object.r_hsm_moments_flag, dp1.Object.r_hsm_momentsPsf_03, dp1.Object.r_hsm_momentsPsf_04, dp1.Object.r_hsm_momentsPsf_12, dp1.Object.r_hsm_momentsPsf_13, dp1.Object.r_hsm_momentsPsf_21, dp1.Object.r_hsm_momentsPsf_22, dp1.Object.r_hsm_momentsPsf_30, dp1.Object.r_hsm_momentsPsf_31, dp1.Object.r_hsm_momentsPsf_40, dp1.Object.r_hsm_momentsPsf_flag, dp1.Object.r_hsmShapeRegauss_e1, dp1.Object.r_hsmShapeRegauss_e2, dp1.Object.r_hsmShapeRegauss_flag, dp1.Object.r_hsmShapeRegauss_sigma, dp1.Object.r_i_flag, dp1.Object.r_iDebiasedPSF_flag, dp1.Object.r_inputCount, dp1.Object.r_inputCount_flag, dp1.Object.r_inputCount_flag_noInputs, dp1.Object.r_invalidPsfFlag, dp1.Object.r_iPSF_flag, dp1.Object.r_iRound_flag, dp1.Object.r_ixx, dp1.Object.r_ixxDebiasedPSF, dp1.Object.r_ixxPSF, dp1.Object.r_ixxRound, dp1.Object.r_ixy, dp1.Object.r_ixyDebiasedPSF, dp1.Object.r_ixyPSF, dp1.Object.r_ixyRound, dp1.Object.r_iyy, dp1.Object.r_iyyDebiasedPSF, dp1.Object.r_iyyPSF, dp1.Object.r_iyyRound, dp1.Object.r_kronFlux, dp1.Object.r_kronFlux_flag, dp1.Object.r_kronFlux_flag_bad_radius, dp1.Object.r_kronFlux_flag_bad_shape, dp1.Object.r_kronFlux_flag_bad_shape_no_psf, dp1.Object.r_kronFlux_flag_edge, dp1.Object.r_kronFlux_flag_no_fallback_radius, dp1.Object.r_kronFlux_flag_no_minimum_radius, dp1.Object.r_kronFlux_flag_small_radius, dp1.Object.r_kronFlux_flag_used_minimum_radius, dp1.Object.r_kronFlux_flag_used_psf_radius, dp1.Object.r_kronFluxErr, dp1.Object.r_kronRad, dp1.Object.r_pixelFlags_bad, dp1.Object.r_pixelFlags_clipped, dp1.Object.r_pixelFlags_clippedCenter, dp1.Object.r_pixelFlags_cr, dp1.Object.r_pixelFlags_crCenter, dp1.Object.r_pixelFlags_edge, dp1.Object.r_pixelFlags_inexact_psf, dp1.Object.r_pixelFlags_inexact_psfCenter, dp1.Object.r_pixelFlags_interpolated, dp1.Object.r_pixelFlags_interpolatedCenter, dp1.Object.r_pixelFlags_nodata, dp1.Object.r_pixelFlags_offimage, dp1.Object.r_pixelFlags_saturated, dp1.Object.r_pixelFlags_saturatedCenter, dp1.Object.r_pixelFlags_sensor_edge, dp1.Object.r_pixelFlags_sensor_edgeCenter, dp1.Object.r_pixelFlags_suspect, dp1.Object.r_pixelFlags_suspectCenter, dp1.Object.r_psfFlux, dp1.Object.r_psfFlux_area, dp1.Object.r_psfFlux_flag, dp1.Object.r_psfFlux_flag_apCorr, dp1.Object.r_psfFlux_flag_edge, dp1.Object.r_psfFlux_flag_noGoodPixels, dp1.Object.r_psfFluxErr, dp1.Object.r_psfMag, dp1.Object.r_psfMagErr, dp1.Object.r_psfModel_TwoGaussian_chisq_reduced, dp1.Object.r_psfModel_TwoGaussian_gauss1_fluxfrac, dp1.Object.r_psfModel_TwoGaussian_gauss1_rho, dp1.Object.r_psfModel_TwoGaussian_gauss1_sigma_x, dp1.Object.r_psfModel_TwoGaussian_gauss1_sigma_y, dp1.Object.r_psfModel_TwoGaussian_gauss2_rho, dp1.Object.r_psfModel_TwoGaussian_gauss2_sigma_x, dp1.Object.r_psfModel_TwoGaussian_gauss2_sigma_y, dp1.Object.r_psfModel_TwoGaussian_n_iter, dp1.Object.r_psfModel_TwoGaussian_no_inputs_flag, dp1.Object.r_psfModel_TwoGaussian_unknown_flag, dp1.Object.r_ra, dp1.Object.r_ra_dec_Cov, dp1.Object.r_raErr, dp1.Object.r_sersicFlux, dp1.Object.r_sersicFluxErr, dp1.Object.r_sizeExtendedness, dp1.Object.r_sizeExtendedness_flag, dp1.Object.refBand, dp1.Object.refExtendedness, dp1.Object.refSizeExtendedness, dp1.Object.sersic_chisq_reduced, dp1.Object.sersic_dec, dp1.Object.sersic_decErr, dp1.Object.sersic_index, dp1.Object.sersic_indexErr, dp1.Object.sersic_n_eval_jac, dp1.Object.sersic_n_iter, dp1.Object.sersic_no_data_flag, dp1.Object.sersic_ra, dp1.Object.sersic_raErr, dp1.Object.sersic_reff_x, dp1.Object.sersic_reff_xErr, dp1.Object.sersic_reff_y, dp1.Object.sersic_reff_yErr, dp1.Object.sersic_rho, dp1.Object.sersic_rhoErr, dp1.Object.sersic_unknown_flag, dp1.Object.sersic_x, dp1.Object.sersic_xErr, dp1.Object.sersic_y, dp1.Object.sersic_yErr, dp1.Object.shape_flag, dp1.Object.shape_xx, dp1.Object.shape_xy, dp1.Object.shape_yy, dp1.Object.tract, dp1.Object.u_ap03Flux, dp1.Object.u_ap03Flux_flag, dp1.Object.u_ap03FluxErr, dp1.Object.u_ap06Flux, dp1.Object.u_ap06Flux_flag, dp1.Object.u_ap06FluxErr, dp1.Object.u_ap09Flux, dp1.Object.u_ap09Flux_flag, dp1.Object.u_ap09FluxErr, dp1.Object.u_ap12Flux, dp1.Object.u_ap12Flux_flag, dp1.Object.u_ap12FluxErr, dp1.Object.u_ap17Flux, dp1.Object.u_ap17Flux_flag, dp1.Object.u_ap17FluxErr, dp1.Object.u_ap25Flux, dp1.Object.u_ap25Flux_flag, dp1.Object.u_ap25FluxErr, dp1.Object.u_ap35Flux, dp1.Object.u_ap35Flux_flag, dp1.Object.u_ap35FluxErr, dp1.Object.u_ap50Flux, dp1.Object.u_ap50Flux_flag, dp1.Object.u_ap50FluxErr, dp1.Object.u_ap70Flux, dp1.Object.u_ap70Flux_flag, dp1.Object.u_ap70FluxErr, dp1.Object.u_apFlux_flag, dp1.Object.u_apFlux_flag_apertureTruncated, dp1.Object.u_apFlux_flag_sincCoeffsTruncated, dp1.Object.u_bdChi2, dp1.Object.u_bdE1, dp1.Object.u_bdE2, dp1.Object.u_bdFluxB, dp1.Object.u_bdFluxBErr, dp1.Object.u_bdFluxD, dp1.Object.u_bdFluxDErr, dp1.Object.u_bdReB, dp1.Object.u_bdReD, dp1.Object.u_blendedness, dp1.Object.u_blendedness_flag, dp1.Object.u_calib_astrometry_used, dp1.Object.u_calib_photometry_reserved, dp1.Object.u_calib_photometry_used, dp1.Object.u_calib_psf_candidate, dp1.Object.u_calib_psf_reserved, dp1.Object.u_calib_psf_used, dp1.Object.u_calibFlux, dp1.Object.u_calibFlux_flag, dp1.Object.u_calibFlux_flag_apertureTruncated, dp1.Object.u_calibFlux_flag_sincCoeffsTruncated, dp1.Object.u_calibFluxErr, dp1.Object.u_centroid_flag, dp1.Object.u_centroid_x, dp1.Object.u_centroid_xErr, dp1.Object.u_centroid_y, dp1.Object.u_centroid_yErr, dp1.Object.u_cModel_flag, dp1.Object.u_cModel_flag_apCorr, dp1.Object.u_cModelFlux, dp1.Object.u_cModelFlux_inner, dp1.Object.u_cModelFluxErr, dp1.Object.u_cModelMag, dp1.Object.u_cModelMagErr, dp1.Object.u_deblend_blendedness, dp1.Object.u_deblend_dataCoverage, dp1.Object.u_deblend_fluxOverlap, dp1.Object.u_deblend_fluxOverlapFraction, dp1.Object.u_deblend_zeroFlux, dp1.Object.u_dec, dp1.Object.u_decErr, dp1.Object.u_epoch, dp1.Object.u_extendedness, dp1.Object.u_extendedness_flag, dp1.Object.u_free_cModelFlux, dp1.Object.u_free_cModelFlux_flag, dp1.Object.u_free_cModelFlux_inner, dp1.Object.u_free_cModelFluxErr, dp1.Object.u_free_psfFlux, dp1.Object.u_free_psfFlux_flag, dp1.Object.u_free_psfFluxErr, dp1.Object.u_gaap0p7Flux, dp1.Object.u_gaap0p7Flux_flag_bigPsf, dp1.Object.u_gaap0p7FluxErr, dp1.Object.u_gaap1p0Flux, dp1.Object.u_gaap1p0Flux_flag_bigPsf, dp1.Object.u_gaap1p0FluxErr, dp1.Object.u_gaap1p5Flux, dp1.Object.u_gaap1p5Flux_flag_bigPsf, dp1.Object.u_gaap1p5FluxErr, dp1.Object.u_gaap2p5Flux, dp1.Object.u_gaap2p5Flux_flag_bigPsf, dp1.Object.u_gaap2p5FluxErr, dp1.Object.u_gaap3p0Flux, dp1.Object.u_gaap3p0Flux_flag_bigPsf, dp1.Object.u_gaap3p0FluxErr, dp1.Object.u_gaapFlux_flag, dp1.Object.u_gaapFlux_flag_edge, dp1.Object.u_gaapFlux_flag_gaussianization, dp1.Object.u_gaapOptimalFlux, dp1.Object.u_gaapOptimalFlux_flag_bigPsf, dp1.Object.u_gaapOptimalFluxErr, dp1.Object.u_gaapPsfFlux, dp1.Object.u_gaapPsfFluxErr, dp1.Object.u_hsm_moments_03, dp1.Object.u_hsm_moments_04, dp1.Object.u_hsm_moments_12, dp1.Object.u_hsm_moments_13, dp1.Object.u_hsm_moments_21, dp1.Object.u_hsm_moments_22, dp1.Object.u_hsm_moments_30, dp1.Object.u_hsm_moments_31, dp1.Object.u_hsm_moments_40, dp1.Object.u_hsm_moments_flag, dp1.Object.u_hsm_momentsPsf_03, dp1.Object.u_hsm_momentsPsf_04, dp1.Object.u_hsm_momentsPsf_12, dp1.Object.u_hsm_momentsPsf_13, dp1.Object.u_hsm_momentsPsf_21, dp1.Object.u_hsm_momentsPsf_22, dp1.Object.u_hsm_momentsPsf_30, dp1.Object.u_hsm_momentsPsf_31, dp1.Object.u_hsm_momentsPsf_40, dp1.Object.u_hsm_momentsPsf_flag, dp1.Object.u_hsmShapeRegauss_e1, dp1.Object.u_hsmShapeRegauss_e2, dp1.Object.u_hsmShapeRegauss_flag, dp1.Object.u_hsmShapeRegauss_sigma, dp1.Object.u_i_flag, dp1.Object.u_iDebiasedPSF_flag, dp1.Object.u_inputCount, dp1.Object.u_inputCount_flag, dp1.Object.u_inputCount_flag_noInputs, dp1.Object.u_invalidPsfFlag, dp1.Object.u_iPSF_flag, dp1.Object.u_iRound_flag, dp1.Object.u_ixx, dp1.Object.u_ixxDebiasedPSF, dp1.Object.u_ixxPSF, dp1.Object.u_ixxRound, dp1.Object.u_ixy, dp1.Object.u_ixyDebiasedPSF, dp1.Object.u_ixyPSF, dp1.Object.u_ixyRound, dp1.Object.u_iyy, dp1.Object.u_iyyDebiasedPSF, dp1.Object.u_iyyPSF, dp1.Object.u_iyyRound, dp1.Object.u_kronFlux, dp1.Object.u_kronFlux_flag, dp1.Object.u_kronFlux_flag_bad_radius, dp1.Object.u_kronFlux_flag_bad_shape, dp1.Object.u_kronFlux_flag_bad_shape_no_psf, dp1.Object.u_kronFlux_flag_edge, dp1.Object.u_kronFlux_flag_no_fallback_radius, dp1.Object.u_kronFlux_flag_no_minimum_radius, dp1.Object.u_kronFlux_flag_small_radius, dp1.Object.u_kronFlux_flag_used_minimum_radius, dp1.Object.u_kronFlux_flag_used_psf_radius, dp1.Object.u_kronFluxErr, dp1.Object.u_kronRad, dp1.Object.u_pixelFlags_bad, dp1.Object.u_pixelFlags_clipped, dp1.Object.u_pixelFlags_clippedCenter, dp1.Object.u_pixelFlags_cr, dp1.Object.u_pixelFlags_crCenter, dp1.Object.u_pixelFlags_edge, dp1.Object.u_pixelFlags_inexact_psf, dp1.Object.u_pixelFlags_inexact_psfCenter, dp1.Object.u_pixelFlags_interpolated, dp1.Object.u_pixelFlags_interpolatedCenter, dp1.Object.u_pixelFlags_nodata, dp1.Object.u_pixelFlags_offimage, dp1.Object.u_pixelFlags_saturated, dp1.Object.u_pixelFlags_saturatedCenter, dp1.Object.u_pixelFlags_sensor_edge, dp1.Object.u_pixelFlags_sensor_edgeCenter, dp1.Object.u_pixelFlags_suspect, dp1.Object.u_pixelFlags_suspectCenter, dp1.Object.u_psfFlux, dp1.Object.u_psfFlux_area, dp1.Object.u_psfFlux_flag, dp1.Object.u_psfFlux_flag_apCorr, dp1.Object.u_psfFlux_flag_edge, dp1.Object.u_psfFlux_flag_noGoodPixels, dp1.Object.u_psfFluxErr, dp1.Object.u_psfMag, dp1.Object.u_psfMagErr, dp1.Object.u_psfModel_TwoGaussian_chisq_reduced, dp1.Object.u_psfModel_TwoGaussian_gauss1_fluxfrac, dp1.Object.u_psfModel_TwoGaussian_gauss1_rho, dp1.Object.u_psfModel_TwoGaussian_gauss1_sigma_x, dp1.Object.u_psfModel_TwoGaussian_gauss1_sigma_y, dp1.Object.u_psfModel_TwoGaussian_gauss2_rho, dp1.Object.u_psfModel_TwoGaussian_gauss2_sigma_x, dp1.Object.u_psfModel_TwoGaussian_gauss2_sigma_y, dp1.Object.u_psfModel_TwoGaussian_n_iter, dp1.Object.u_psfModel_TwoGaussian_no_inputs_flag, dp1.Object.u_psfModel_TwoGaussian_unknown_flag, dp1.Object.u_ra, dp1.Object.u_ra_dec_Cov, dp1.Object.u_raErr, dp1.Object.u_sersicFlux, dp1.Object.u_sersicFluxErr, dp1.Object.u_sizeExtendedness, dp1.Object.u_sizeExtendedness_flag, dp1.Object.x, dp1.Object.xErr, dp1.Object.xy_flag, dp1.Object.y, dp1.Object.y_ap03Flux, dp1.Object.y_ap03Flux_flag, dp1.Object.y_ap03FluxErr, dp1.Object.y_ap06Flux, dp1.Object.y_ap06Flux_flag, dp1.Object.y_ap06FluxErr, dp1.Object.y_ap09Flux, dp1.Object.y_ap09Flux_flag, dp1.Object.y_ap09FluxErr, dp1.Object.y_ap12Flux, dp1.Object.y_ap12Flux_flag, dp1.Object.y_ap12FluxErr, dp1.Object.y_ap17Flux, dp1.Object.y_ap17Flux_flag, dp1.Object.y_ap17FluxErr, dp1.Object.y_ap25Flux, dp1.Object.y_ap25Flux_flag, dp1.Object.y_ap25FluxErr, dp1.Object.y_ap35Flux, dp1.Object.y_ap35Flux_flag, dp1.Object.y_ap35FluxErr, dp1.Object.y_ap50Flux, dp1.Object.y_ap50Flux_flag, dp1.Object.y_ap50FluxErr, dp1.Object.y_ap70Flux, dp1.Object.y_ap70Flux_flag, dp1.Object.y_ap70FluxErr, dp1.Object.y_apFlux_flag, dp1.Object.y_apFlux_flag_apertureTruncated, dp1.Object.y_apFlux_flag_sincCoeffsTruncated, dp1.Object.y_bdChi2, dp1.Object.y_bdE1, dp1.Object.y_bdE2, dp1.Object.y_bdFluxB, dp1.Object.y_bdFluxBErr, dp1.Object.y_bdFluxD, dp1.Object.y_bdFluxDErr, dp1.Object.y_bdReB, dp1.Object.y_bdReD, dp1.Object.y_blendedness, dp1.Object.y_blendedness_flag, dp1.Object.y_calib_astrometry_used, dp1.Object.y_calib_photometry_reserved, dp1.Object.y_calib_photometry_used, dp1.Object.y_calib_psf_candidate, dp1.Object.y_calib_psf_reserved, dp1.Object.y_calib_psf_used, dp1.Object.y_calibFlux, dp1.Object.y_calibFlux_flag, dp1.Object.y_calibFlux_flag_apertureTruncated, dp1.Object.y_calibFlux_flag_sincCoeffsTruncated, dp1.Object.y_calibFluxErr, dp1.Object.y_centroid_flag, dp1.Object.y_centroid_x, dp1.Object.y_centroid_xErr, dp1.Object.y_centroid_y, dp1.Object.y_centroid_yErr, dp1.Object.y_cModel_flag, dp1.Object.y_cModel_flag_apCorr, dp1.Object.y_cModelFlux, dp1.Object.y_cModelFlux_inner, dp1.Object.y_cModelFluxErr, dp1.Object.y_cModelMag, dp1.Object.y_cModelMagErr, dp1.Object.y_deblend_blendedness, dp1.Object.y_deblend_dataCoverage, dp1.Object.y_deblend_fluxOverlap, dp1.Object.y_deblend_fluxOverlapFraction, dp1.Object.y_deblend_zeroFlux, dp1.Object.y_dec, dp1.Object.y_decErr, dp1.Object.y_epoch, dp1.Object.y_extendedness, dp1.Object.y_extendedness_flag, dp1.Object.y_free_cModelFlux, dp1.Object.y_free_cModelFlux_flag, dp1.Object.y_free_cModelFlux_inner, dp1.Object.y_free_cModelFluxErr, dp1.Object.y_free_psfFlux, dp1.Object.y_free_psfFlux_flag, dp1.Object.y_free_psfFluxErr, dp1.Object.y_gaap0p7Flux, dp1.Object.y_gaap0p7Flux_flag_bigPsf, dp1.Object.y_gaap0p7FluxErr, dp1.Object.y_gaap1p0Flux, dp1.Object.y_gaap1p0Flux_flag_bigPsf, dp1.Object.y_gaap1p0FluxErr, dp1.Object.y_gaap1p5Flux, dp1.Object.y_gaap1p5Flux_flag_bigPsf, dp1.Object.y_gaap1p5FluxErr, dp1.Object.y_gaap2p5Flux, dp1.Object.y_gaap2p5Flux_flag_bigPsf, dp1.Object.y_gaap2p5FluxErr, dp1.Object.y_gaap3p0Flux, dp1.Object.y_gaap3p0Flux_flag_bigPsf, dp1.Object.y_gaap3p0FluxErr, dp1.Object.y_gaapFlux_flag, dp1.Object.y_gaapFlux_flag_edge, dp1.Object.y_gaapFlux_flag_gaussianization, dp1.Object.y_gaapOptimalFlux, dp1.Object.y_gaapOptimalFlux_flag_bigPsf, dp1.Object.y_gaapOptimalFluxErr, dp1.Object.y_gaapPsfFlux, dp1.Object.y_gaapPsfFluxErr, dp1.Object.y_hsm_moments_03, dp1.Object.y_hsm_moments_04, dp1.Object.y_hsm_moments_12, dp1.Object.y_hsm_moments_13, dp1.Object.y_hsm_moments_21, dp1.Object.y_hsm_moments_22, dp1.Object.y_hsm_moments_30, dp1.Object.y_hsm_moments_31, dp1.Object.y_hsm_moments_40, dp1.Object.y_hsm_moments_flag, dp1.Object.y_hsm_momentsPsf_03, dp1.Object.y_hsm_momentsPsf_04, dp1.Object.y_hsm_momentsPsf_12, dp1.Object.y_hsm_momentsPsf_13, dp1.Object.y_hsm_momentsPsf_21, dp1.Object.y_hsm_momentsPsf_22, dp1.Object.y_hsm_momentsPsf_30, dp1.Object.y_hsm_momentsPsf_31, dp1.Object.y_hsm_momentsPsf_40, dp1.Object.y_hsm_momentsPsf_flag, dp1.Object.y_hsmShapeRegauss_e1, dp1.Object.y_hsmShapeRegauss_e2, dp1.Object.y_hsmShapeRegauss_flag, dp1.Object.y_hsmShapeRegauss_sigma, dp1.Object.y_i_flag, dp1.Object.y_iDebiasedPSF_flag, dp1.Object.y_inputCount, dp1.Object.y_inputCount_flag, dp1.Object.y_inputCount_flag_noInputs, dp1.Object.y_invalidPsfFlag, dp1.Object.y_iPSF_flag, dp1.Object.y_iRound_flag, dp1.Object.y_ixx, dp1.Object.y_ixxDebiasedPSF, dp1.Object.y_ixxPSF, dp1.Object.y_ixxRound, dp1.Object.y_ixy, dp1.Object.y_ixyDebiasedPSF, dp1.Object.y_ixyPSF, dp1.Object.y_ixyRound, dp1.Object.y_iyy, dp1.Object.y_iyyDebiasedPSF, dp1.Object.y_iyyPSF, dp1.Object.y_iyyRound, dp1.Object.y_kronFlux, dp1.Object.y_kronFlux_flag, dp1.Object.y_kronFlux_flag_bad_radius, dp1.Object.y_kronFlux_flag_bad_shape, dp1.Object.y_kronFlux_flag_bad_shape_no_psf, dp1.Object.y_kronFlux_flag_edge, dp1.Object.y_kronFlux_flag_no_fallback_radius, dp1.Object.y_kronFlux_flag_no_minimum_radius, dp1.Object.y_kronFlux_flag_small_radius, dp1.Object.y_kronFlux_flag_used_minimum_radius, dp1.Object.y_kronFlux_flag_used_psf_radius, dp1.Object.y_kronFluxErr, dp1.Object.y_kronRad, dp1.Object.y_pixelFlags_bad, dp1.Object.y_pixelFlags_clipped, dp1.Object.y_pixelFlags_clippedCenter, dp1.Object.y_pixelFlags_cr, dp1.Object.y_pixelFlags_crCenter, dp1.Object.y_pixelFlags_edge, dp1.Object.y_pixelFlags_inexact_psf, dp1.Object.y_pixelFlags_inexact_psfCenter, dp1.Object.y_pixelFlags_interpolated, dp1.Object.y_pixelFlags_interpolatedCenter, dp1.Object.y_pixelFlags_nodata, dp1.Object.y_pixelFlags_offimage, dp1.Object.y_pixelFlags_saturated, dp1.Object.y_pixelFlags_saturatedCenter, dp1.Object.y_pixelFlags_sensor_edge, dp1.Object.y_pixelFlags_sensor_edgeCenter, dp1.Object.y_pixelFlags_suspect, dp1.Object.y_pixelFlags_suspectCenter, dp1.Object.y_psfFlux, dp1.Object.y_psfFlux_area, dp1.Object.y_psfFlux_flag, dp1.Object.y_psfFlux_flag_apCorr, dp1.Object.y_psfFlux_flag_edge, dp1.Object.y_psfFlux_flag_noGoodPixels, dp1.Object.y_psfFluxErr, dp1.Object.y_psfMag, dp1.Object.y_psfMagErr, dp1.Object.y_psfModel_TwoGaussian_chisq_reduced, dp1.Object.y_psfModel_TwoGaussian_gauss1_fluxfrac, dp1.Object.y_psfModel_TwoGaussian_gauss1_rho, dp1.Object.y_psfModel_TwoGaussian_gauss1_sigma_x, dp1.Object.y_psfModel_TwoGaussian_gauss1_sigma_y, dp1.Object.y_psfModel_TwoGaussian_gauss2_rho, dp1.Object.y_psfModel_TwoGaussian_gauss2_sigma_x, dp1.Object.y_psfModel_TwoGaussian_gauss2_sigma_y, dp1.Object.y_psfModel_TwoGaussian_n_iter, dp1.Object.y_psfModel_TwoGaussian_no_inputs_flag, dp1.Object.y_psfModel_TwoGaussian_unknown_flag, dp1.Object.y_ra, dp1.Object.y_ra_dec_Cov, dp1.Object.y_raErr, dp1.Object.y_sersicFlux, dp1.Object.y_sersicFluxErr, dp1.Object.y_sizeExtendedness, dp1.Object.y_sizeExtendedness_flag, dp1.Object.yErr, dp1.Object.z_ap03Flux, dp1.Object.z_ap03Flux_flag, dp1.Object.z_ap03FluxErr, dp1.Object.z_ap06Flux, dp1.Object.z_ap06Flux_flag, dp1.Object.z_ap06FluxErr, dp1.Object.z_ap09Flux, dp1.Object.z_ap09Flux_flag, dp1.Object.z_ap09FluxErr, dp1.Object.z_ap12Flux, dp1.Object.z_ap12Flux_flag, dp1.Object.z_ap12FluxErr, dp1.Object.z_ap17Flux, dp1.Object.z_ap17Flux_flag, dp1.Object.z_ap17FluxErr, dp1.Object.z_ap25Flux, dp1.Object.z_ap25Flux_flag, dp1.Object.z_ap25FluxErr, dp1.Object.z_ap35Flux, dp1.Object.z_ap35Flux_flag, dp1.Object.z_ap35FluxErr, dp1.Object.z_ap50Flux, dp1.Object.z_ap50Flux_flag, dp1.Object.z_ap50FluxErr, dp1.Object.z_ap70Flux, dp1.Object.z_ap70Flux_flag, dp1.Object.z_ap70FluxErr, dp1.Object.z_apFlux_flag, dp1.Object.z_apFlux_flag_apertureTruncated, dp1.Object.z_apFlux_flag_sincCoeffsTruncated, dp1.Object.z_bdChi2, dp1.Object.z_bdE1, dp1.Object.z_bdE2, dp1.Object.z_bdFluxB, dp1.Object.z_bdFluxBErr, dp1.Object.z_bdFluxD, dp1.Object.z_bdFluxDErr, dp1.Object.z_bdReB, dp1.Object.z_bdReD, dp1.Object.z_blendedness, dp1.Object.z_blendedness_flag, dp1.Object.z_calib_astrometry_used, dp1.Object.z_calib_photometry_reserved, dp1.Object.z_calib_photometry_used, dp1.Object.z_calib_psf_candidate, dp1.Object.z_calib_psf_reserved, dp1.Object.z_calib_psf_used, dp1.Object.z_calibFlux, dp1.Object.z_calibFlux_flag, dp1.Object.z_calibFlux_flag_apertureTruncated, dp1.Object.z_calibFlux_flag_sincCoeffsTruncated, dp1.Object.z_calibFluxErr, dp1.Object.z_centroid_flag, dp1.Object.z_centroid_x, dp1.Object.z_centroid_xErr, dp1.Object.z_centroid_y, dp1.Object.z_centroid_yErr, dp1.Object.z_cModel_flag, dp1.Object.z_cModel_flag_apCorr, dp1.Object.z_cModelFlux, dp1.Object.z_cModelFlux_inner, dp1.Object.z_cModelFluxErr, dp1.Object.z_cModelMag, dp1.Object.z_cModelMagErr, dp1.Object.z_deblend_blendedness, dp1.Object.z_deblend_dataCoverage, dp1.Object.z_deblend_fluxOverlap, dp1.Object.z_deblend_fluxOverlapFraction, dp1.Object.z_deblend_zeroFlux, dp1.Object.z_dec, dp1.Object.z_decErr, dp1.Object.z_epoch, dp1.Object.z_extendedness, dp1.Object.z_extendedness_flag, dp1.Object.z_free_cModelFlux, dp1.Object.z_free_cModelFlux_flag, dp1.Object.z_free_cModelFlux_inner, dp1.Object.z_free_cModelFluxErr, dp1.Object.z_free_psfFlux, dp1.Object.z_free_psfFlux_flag, dp1.Object.z_free_psfFluxErr, dp1.Object.z_gaap0p7Flux, dp1.Object.z_gaap0p7Flux_flag_bigPsf, dp1.Object.z_gaap0p7FluxErr, dp1.Object.z_gaap1p0Flux, dp1.Object.z_gaap1p0Flux_flag_bigPsf, dp1.Object.z_gaap1p0FluxErr, dp1.Object.z_gaap1p5Flux, dp1.Object.z_gaap1p5Flux_flag_bigPsf, dp1.Object.z_gaap1p5FluxErr, dp1.Object.z_gaap2p5Flux, dp1.Object.z_gaap2p5Flux_flag_bigPsf, dp1.Object.z_gaap2p5FluxErr, dp1.Object.z_gaap3p0Flux, dp1.Object.z_gaap3p0Flux_flag_bigPsf, dp1.Object.z_gaap3p0FluxErr, dp1.Object.z_gaapFlux_flag, dp1.Object.z_gaapFlux_flag_edge, dp1.Object.z_gaapFlux_flag_gaussianization, dp1.Object.z_gaapOptimalFlux, dp1.Object.z_gaapOptimalFlux_flag_bigPsf, dp1.Object.z_gaapOptimalFluxErr, dp1.Object.z_gaapPsfFlux, dp1.Object.z_gaapPsfFluxErr, dp1.Object.z_hsm_moments_03, dp1.Object.z_hsm_moments_04, dp1.Object.z_hsm_moments_12, dp1.Object.z_hsm_moments_13, dp1.Object.z_hsm_moments_21, dp1.Object.z_hsm_moments_22, dp1.Object.z_hsm_moments_30, dp1.Object.z_hsm_moments_31, dp1.Object.z_hsm_moments_40, dp1.Object.z_hsm_moments_flag, dp1.Object.z_hsm_momentsPsf_03, dp1.Object.z_hsm_momentsPsf_04, dp1.Object.z_hsm_momentsPsf_12, dp1.Object.z_hsm_momentsPsf_13, dp1.Object.z_hsm_momentsPsf_21, dp1.Object.z_hsm_momentsPsf_22, dp1.Object.z_hsm_momentsPsf_30, dp1.Object.z_hsm_momentsPsf_31, dp1.Object.z_hsm_momentsPsf_40, dp1.Object.z_hsm_momentsPsf_flag, dp1.Object.z_hsmShapeRegauss_e1, dp1.Object.z_hsmShapeRegauss_e2, dp1.Object.z_hsmShapeRegauss_flag, dp1.Object.z_hsmShapeRegauss_sigma, dp1.Object.z_i_flag, dp1.Object.z_iDebiasedPSF_flag, dp1.Object.z_inputCount, dp1.Object.z_inputCount_flag, dp1.Object.z_inputCount_flag_noInputs, dp1.Object.z_invalidPsfFlag, dp1.Object.z_iPSF_flag, dp1.Object.z_iRound_flag, dp1.Object.z_ixx, dp1.Object.z_ixxDebiasedPSF, dp1.Object.z_ixxPSF, dp1.Object.z_ixxRound, dp1.Object.z_ixy, dp1.Object.z_ixyDebiasedPSF, dp1.Object.z_ixyPSF, dp1.Object.z_ixyRound, dp1.Object.z_iyy, dp1.Object.z_iyyDebiasedPSF, dp1.Object.z_iyyPSF, dp1.Object.z_iyyRound, dp1.Object.z_kronFlux, dp1.Object.z_kronFlux_flag, dp1.Object.z_kronFlux_flag_bad_radius, dp1.Object.z_kronFlux_flag_bad_shape, dp1.Object.z_kronFlux_flag_bad_shape_no_psf, dp1.Object.z_kronFlux_flag_edge, dp1.Object.z_kronFlux_flag_no_fallback_radius, dp1.Object.z_kronFlux_flag_no_minimum_radius, dp1.Object.z_kronFlux_flag_small_radius, dp1.Object.z_kronFlux_flag_used_minimum_radius, dp1.Object.z_kronFlux_flag_used_psf_radius, dp1.Object.z_kronFluxErr, dp1.Object.z_kronRad, dp1.Object.z_pixelFlags_bad, dp1.Object.z_pixelFlags_clipped, dp1.Object.z_pixelFlags_clippedCenter, dp1.Object.z_pixelFlags_cr, dp1.Object.z_pixelFlags_crCenter, dp1.Object.z_pixelFlags_edge, dp1.Object.z_pixelFlags_inexact_psf, dp1.Object.z_pixelFlags_inexact_psfCenter, dp1.Object.z_pixelFlags_interpolated, dp1.Object.z_pixelFlags_interpolatedCenter, dp1.Object.z_pixelFlags_nodata, dp1.Object.z_pixelFlags_offimage, dp1.Object.z_pixelFlags_saturated, dp1.Object.z_pixelFlags_saturatedCenter, dp1.Object.z_pixelFlags_sensor_edge, dp1.Object.z_pixelFlags_sensor_edgeCenter, dp1.Object.z_pixelFlags_suspect, dp1.Object.z_pixelFlags_suspectCenter, dp1.Object.z_psfFlux, dp1.Object.z_psfFlux_area, dp1.Object.z_psfFlux_flag, dp1.Object.z_psfFlux_flag_apCorr, dp1.Object.z_psfFlux_flag_edge, dp1.Object.z_psfFlux_flag_noGoodPixels, dp1.Object.z_psfFluxErr, dp1.Object.z_psfMag, dp1.Object.z_psfMagErr, dp1.Object.z_psfModel_TwoGaussian_chisq_reduced, dp1.Object.z_psfModel_TwoGaussian_gauss1_fluxfrac, dp1.Object.z_psfModel_TwoGaussian_gauss1_rho, dp1.Object.z_psfModel_TwoGaussian_gauss1_sigma_x, dp1.Object.z_psfModel_TwoGaussian_gauss1_sigma_y, dp1.Object.z_psfModel_TwoGaussian_gauss2_rho, dp1.Object.z_psfModel_TwoGaussian_gauss2_sigma_x, dp1.Object.z_psfModel_TwoGaussian_gauss2_sigma_y, dp1.Object.z_psfModel_TwoGaussian_n_iter, dp1.Object.z_psfModel_TwoGaussian_no_inputs_flag, dp1.Object.z_psfModel_TwoGaussian_unknown_flag, dp1.Object.z_ra, dp1.Object.z_ra_dec_Cov, dp1.Object.z_raErr, dp1.Object.z_sersicFlux, dp1.Object.z_sersicFluxErr, dp1.Object.z_sizeExtendedness, dp1.Object.z_sizeExtendedness_flag FROM dp1.Object WHERE objectId=0 diff --git a/src/ccontrol/testdata/parser-corpus/q03_stripped.sql b/src/ccontrol/testdata/parser-corpus/q03_stripped.sql new file mode 100644 index 0000000000..345d78159e --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q03_stripped.sql @@ -0,0 +1 @@ +SELECT Object.coord_dec, Object.coord_decErr, Object.coord_ra, Object.coord_ra_dec_Cov, Object.coord_raErr, Object.deblend_failed, Object.deblend_incompleteData, Object.deblend_isolatedParent, Object.deblend_iterations, Object.deblend_logL, Object.deblend_masked, Object.deblend_nChild, Object.deblend_nPeaks, Object.deblend_parentTooBig, Object.deblend_peak_center_x, Object.deblend_peak_center_y, Object.deblend_skipped, Object.deblend_tooManyPeaks, Object.detect_fromBlend, Object.detect_isDeblendedModelSource, Object.detect_isIsolated, Object.ebv, Object.footprintArea, Object.g_ap03Flux, Object.g_ap03Flux_flag, Object.g_ap03FluxErr, Object.g_ap06Flux, Object.g_ap06Flux_flag, Object.g_ap06FluxErr, Object.g_ap09Flux, Object.g_ap09Flux_flag, Object.g_ap09FluxErr, Object.g_ap12Flux, Object.g_ap12Flux_flag, Object.g_ap12FluxErr, Object.g_ap17Flux, Object.g_ap17Flux_flag, Object.g_ap17FluxErr, Object.g_ap25Flux, Object.g_ap25Flux_flag, Object.g_ap25FluxErr, Object.g_ap35Flux, Object.g_ap35Flux_flag, Object.g_ap35FluxErr, Object.g_ap50Flux, Object.g_ap50Flux_flag, Object.g_ap50FluxErr, Object.g_ap70Flux, Object.g_ap70Flux_flag, Object.g_ap70FluxErr, Object.g_apFlux_flag, Object.g_apFlux_flag_apertureTruncated, Object.g_apFlux_flag_sincCoeffsTruncated, Object.g_bdChi2, Object.g_bdE1, Object.g_bdE2, Object.g_bdFluxB, Object.g_bdFluxBErr, Object.g_bdFluxD, Object.g_bdFluxDErr, Object.g_bdReB, Object.g_bdReD, Object.g_blendedness, Object.g_blendedness_flag, Object.g_calib_astrometry_used, Object.g_calib_photometry_reserved, Object.g_calib_photometry_used, Object.g_calib_psf_candidate, Object.g_calib_psf_reserved, Object.g_calib_psf_used, Object.g_calibFlux, Object.g_calibFlux_flag, Object.g_calibFlux_flag_apertureTruncated, Object.g_calibFlux_flag_sincCoeffsTruncated, Object.g_calibFluxErr, Object.g_centroid_flag, Object.g_centroid_x, Object.g_centroid_xErr, Object.g_centroid_y, Object.g_centroid_yErr, Object.g_cModel_flag, Object.g_cModel_flag_apCorr, Object.g_cModelFlux, Object.g_cModelFlux_inner, Object.g_cModelFluxErr, Object.g_cModelMag, Object.g_cModelMagErr, Object.g_deblend_blendedness, Object.g_deblend_dataCoverage, Object.g_deblend_fluxOverlap, Object.g_deblend_fluxOverlapFraction, Object.g_deblend_zeroFlux, Object.g_dec, Object.g_decErr, Object.g_epoch, Object.g_extendedness, Object.g_extendedness_flag, Object.g_free_cModelFlux, Object.g_free_cModelFlux_flag, Object.g_free_cModelFlux_inner, Object.g_free_cModelFluxErr, Object.g_free_psfFlux, Object.g_free_psfFlux_flag, Object.g_free_psfFluxErr, Object.g_gaap0p7Flux, Object.g_gaap0p7Flux_flag_bigPsf, Object.g_gaap0p7FluxErr, Object.g_gaap1p0Flux, Object.g_gaap1p0Flux_flag_bigPsf, Object.g_gaap1p0FluxErr, Object.g_gaap1p5Flux, Object.g_gaap1p5Flux_flag_bigPsf, Object.g_gaap1p5FluxErr, Object.g_gaap2p5Flux, Object.g_gaap2p5Flux_flag_bigPsf, Object.g_gaap2p5FluxErr, Object.g_gaap3p0Flux, Object.g_gaap3p0Flux_flag_bigPsf, Object.g_gaap3p0FluxErr, Object.g_gaapFlux_flag, Object.g_gaapFlux_flag_edge, Object.g_gaapFlux_flag_gaussianization, Object.g_gaapOptimalFlux, Object.g_gaapOptimalFlux_flag_bigPsf, Object.g_gaapOptimalFluxErr, Object.g_gaapPsfFlux, Object.g_gaapPsfFluxErr, Object.g_hsm_moments_03, Object.g_hsm_moments_04, Object.g_hsm_moments_12, Object.g_hsm_moments_13, Object.g_hsm_moments_21, Object.g_hsm_moments_22, Object.g_hsm_moments_30, Object.g_hsm_moments_31, Object.g_hsm_moments_40, Object.g_hsm_moments_flag, Object.g_hsm_momentsPsf_03, Object.g_hsm_momentsPsf_04, Object.g_hsm_momentsPsf_12, Object.g_hsm_momentsPsf_13, Object.g_hsm_momentsPsf_21, Object.g_hsm_momentsPsf_22, Object.g_hsm_momentsPsf_30, Object.g_hsm_momentsPsf_31, Object.g_hsm_momentsPsf_40, Object.g_hsm_momentsPsf_flag, Object.g_hsmShapeRegauss_e1, Object.g_hsmShapeRegauss_e2, Object.g_hsmShapeRegauss_flag, Object.g_hsmShapeRegauss_sigma, Object.g_i_flag, Object.g_iDebiasedPSF_flag, Object.g_inputCount, Object.g_inputCount_flag, Object.g_inputCount_flag_noInputs, Object.g_invalidPsfFlag, Object.g_iPSF_flag, Object.g_iRound_flag, Object.g_ixx, Object.g_ixxDebiasedPSF, Object.g_ixxPSF, Object.g_ixxRound, Object.g_ixy, Object.g_ixyDebiasedPSF, Object.g_ixyPSF, Object.g_ixyRound, Object.g_iyy, Object.g_iyyDebiasedPSF, Object.g_iyyPSF, Object.g_iyyRound, Object.g_kronFlux, Object.g_kronFlux_flag, Object.g_kronFlux_flag_bad_radius, Object.g_kronFlux_flag_bad_shape, Object.g_kronFlux_flag_bad_shape_no_psf, Object.g_kronFlux_flag_edge, Object.g_kronFlux_flag_no_fallback_radius, Object.g_kronFlux_flag_no_minimum_radius, Object.g_kronFlux_flag_small_radius, Object.g_kronFlux_flag_used_minimum_radius, Object.g_kronFlux_flag_used_psf_radius, Object.g_kronFluxErr, Object.g_kronRad, Object.g_pixelFlags_bad, Object.g_pixelFlags_clipped, Object.g_pixelFlags_clippedCenter, Object.g_pixelFlags_cr, Object.g_pixelFlags_crCenter, Object.g_pixelFlags_edge, Object.g_pixelFlags_inexact_psf, Object.g_pixelFlags_inexact_psfCenter, Object.g_pixelFlags_interpolated, Object.g_pixelFlags_interpolatedCenter, Object.g_pixelFlags_nodata, Object.g_pixelFlags_offimage, Object.g_pixelFlags_saturated, Object.g_pixelFlags_saturatedCenter, Object.g_pixelFlags_sensor_edge, Object.g_pixelFlags_sensor_edgeCenter, Object.g_pixelFlags_suspect, Object.g_pixelFlags_suspectCenter, Object.g_psfFlux, Object.g_psfFlux_area, Object.g_psfFlux_flag, Object.g_psfFlux_flag_apCorr, Object.g_psfFlux_flag_edge, Object.g_psfFlux_flag_noGoodPixels, Object.g_psfFluxErr, Object.g_psfMag, Object.g_psfMagErr, Object.g_psfModel_TwoGaussian_chisq_reduced, Object.g_psfModel_TwoGaussian_gauss1_fluxfrac, Object.g_psfModel_TwoGaussian_gauss1_rho, Object.g_psfModel_TwoGaussian_gauss1_sigma_x, Object.g_psfModel_TwoGaussian_gauss1_sigma_y, Object.g_psfModel_TwoGaussian_gauss2_rho, Object.g_psfModel_TwoGaussian_gauss2_sigma_x, Object.g_psfModel_TwoGaussian_gauss2_sigma_y, Object.g_psfModel_TwoGaussian_n_iter, Object.g_psfModel_TwoGaussian_no_inputs_flag, Object.g_psfModel_TwoGaussian_unknown_flag, Object.g_ra, Object.g_ra_dec_Cov, Object.g_raErr, Object.g_sersicFlux, Object.g_sersicFluxErr, Object.g_sizeExtendedness, Object.g_sizeExtendedness_flag, Object.i_ap03Flux, Object.i_ap03Flux_flag, Object.i_ap03FluxErr, Object.i_ap06Flux, Object.i_ap06Flux_flag, Object.i_ap06FluxErr, Object.i_ap09Flux, Object.i_ap09Flux_flag, Object.i_ap09FluxErr, Object.i_ap12Flux, Object.i_ap12Flux_flag, Object.i_ap12FluxErr, Object.i_ap17Flux, Object.i_ap17Flux_flag, Object.i_ap17FluxErr, Object.i_ap25Flux, Object.i_ap25Flux_flag, Object.i_ap25FluxErr, Object.i_ap35Flux, Object.i_ap35Flux_flag, Object.i_ap35FluxErr, Object.i_ap50Flux, Object.i_ap50Flux_flag, Object.i_ap50FluxErr, Object.i_ap70Flux, Object.i_ap70Flux_flag, Object.i_ap70FluxErr, Object.i_apFlux_flag, Object.i_apFlux_flag_apertureTruncated, Object.i_apFlux_flag_sincCoeffsTruncated, Object.i_bdChi2, Object.i_bdE1, Object.i_bdE2, Object.i_bdFluxB, Object.i_bdFluxBErr, Object.i_bdFluxD, Object.i_bdFluxDErr, Object.i_bdReB, Object.i_bdReD, Object.i_blendedness, Object.i_blendedness_flag, Object.i_calib_astrometry_used, Object.i_calib_photometry_reserved, Object.i_calib_photometry_used, Object.i_calib_psf_candidate, Object.i_calib_psf_reserved, Object.i_calib_psf_used, Object.i_calibFlux, Object.i_calibFlux_flag, Object.i_calibFlux_flag_apertureTruncated, Object.i_calibFlux_flag_sincCoeffsTruncated, Object.i_calibFluxErr, Object.i_centroid_flag, Object.i_centroid_x, Object.i_centroid_xErr, Object.i_centroid_y, Object.i_centroid_yErr, Object.i_cModel_flag, Object.i_cModel_flag_apCorr, Object.i_cModelFlux, Object.i_cModelFlux_inner, Object.i_cModelFluxErr, Object.i_cModelMag, Object.i_cModelMagErr, Object.i_deblend_blendedness, Object.i_deblend_dataCoverage, Object.i_deblend_fluxOverlap, Object.i_deblend_fluxOverlapFraction, Object.i_deblend_zeroFlux, Object.i_dec, Object.i_decErr, Object.i_epoch, Object.i_extendedness, Object.i_extendedness_flag, Object.i_free_cModelFlux, Object.i_free_cModelFlux_flag, Object.i_free_cModelFlux_inner, Object.i_free_cModelFluxErr, Object.i_free_psfFlux, Object.i_free_psfFlux_flag, Object.i_free_psfFluxErr, Object.i_gaap0p7Flux, Object.i_gaap0p7Flux_flag_bigPsf, Object.i_gaap0p7FluxErr, Object.i_gaap1p0Flux, Object.i_gaap1p0Flux_flag_bigPsf, Object.i_gaap1p0FluxErr, Object.i_gaap1p5Flux, Object.i_gaap1p5Flux_flag_bigPsf, Object.i_gaap1p5FluxErr, Object.i_gaap2p5Flux, Object.i_gaap2p5Flux_flag_bigPsf, Object.i_gaap2p5FluxErr, Object.i_gaap3p0Flux, Object.i_gaap3p0Flux_flag_bigPsf, Object.i_gaap3p0FluxErr, Object.i_gaapFlux_flag, Object.i_gaapFlux_flag_edge, Object.i_gaapFlux_flag_gaussianization, Object.i_gaapOptimalFlux, Object.i_gaapOptimalFlux_flag_bigPsf, Object.i_gaapOptimalFluxErr, Object.i_gaapPsfFlux, Object.i_gaapPsfFluxErr, Object.i_hsm_moments_03, Object.i_hsm_moments_04, Object.i_hsm_moments_12, Object.i_hsm_moments_13, Object.i_hsm_moments_21, Object.i_hsm_moments_22, Object.i_hsm_moments_30, Object.i_hsm_moments_31, Object.i_hsm_moments_40, Object.i_hsm_moments_flag, Object.i_hsm_momentsPsf_03, Object.i_hsm_momentsPsf_04, Object.i_hsm_momentsPsf_12, Object.i_hsm_momentsPsf_13, Object.i_hsm_momentsPsf_21, Object.i_hsm_momentsPsf_22, Object.i_hsm_momentsPsf_30, Object.i_hsm_momentsPsf_31, Object.i_hsm_momentsPsf_40, Object.i_hsm_momentsPsf_flag, Object.i_hsmShapeRegauss_e1, Object.i_hsmShapeRegauss_e2, Object.i_hsmShapeRegauss_flag, Object.i_hsmShapeRegauss_sigma, Object.i_i_flag, Object.i_iDebiasedPSF_flag, Object.i_inputCount, Object.i_inputCount_flag, Object.i_inputCount_flag_noInputs, Object.i_invalidPsfFlag, Object.i_iPSF_flag, Object.i_iRound_flag, Object.i_ixx, Object.i_ixxDebiasedPSF, Object.i_ixxPSF, Object.i_ixxRound, Object.i_ixy, Object.i_ixyDebiasedPSF, Object.i_ixyPSF, Object.i_ixyRound, Object.i_iyy, Object.i_iyyDebiasedPSF, Object.i_iyyPSF, Object.i_iyyRound, Object.i_kronFlux, Object.i_kronFlux_flag, Object.i_kronFlux_flag_bad_radius, Object.i_kronFlux_flag_bad_shape, Object.i_kronFlux_flag_bad_shape_no_psf, Object.i_kronFlux_flag_edge, Object.i_kronFlux_flag_no_fallback_radius, Object.i_kronFlux_flag_no_minimum_radius, Object.i_kronFlux_flag_small_radius, Object.i_kronFlux_flag_used_minimum_radius, Object.i_kronFlux_flag_used_psf_radius, Object.i_kronFluxErr, Object.i_kronRad, Object.i_pixelFlags_bad, Object.i_pixelFlags_clipped, Object.i_pixelFlags_clippedCenter, Object.i_pixelFlags_cr, Object.i_pixelFlags_crCenter, Object.i_pixelFlags_edge, Object.i_pixelFlags_inexact_psf, Object.i_pixelFlags_inexact_psfCenter, Object.i_pixelFlags_interpolated, Object.i_pixelFlags_interpolatedCenter, Object.i_pixelFlags_nodata, Object.i_pixelFlags_offimage, Object.i_pixelFlags_saturated, Object.i_pixelFlags_saturatedCenter, Object.i_pixelFlags_sensor_edge, Object.i_pixelFlags_sensor_edgeCenter, Object.i_pixelFlags_suspect, Object.i_pixelFlags_suspectCenter, Object.i_psfFlux, Object.i_psfFlux_area, Object.i_psfFlux_flag, Object.i_psfFlux_flag_apCorr, Object.i_psfFlux_flag_edge, Object.i_psfFlux_flag_noGoodPixels, Object.i_psfFluxErr, Object.i_psfMag, Object.i_psfMagErr, Object.i_psfModel_TwoGaussian_chisq_reduced, Object.i_psfModel_TwoGaussian_gauss1_fluxfrac, Object.i_psfModel_TwoGaussian_gauss1_rho, Object.i_psfModel_TwoGaussian_gauss1_sigma_x, Object.i_psfModel_TwoGaussian_gauss1_sigma_y, Object.i_psfModel_TwoGaussian_gauss2_rho, Object.i_psfModel_TwoGaussian_gauss2_sigma_x, Object.i_psfModel_TwoGaussian_gauss2_sigma_y, Object.i_psfModel_TwoGaussian_n_iter, Object.i_psfModel_TwoGaussian_no_inputs_flag, Object.i_psfModel_TwoGaussian_unknown_flag, Object.i_ra, Object.i_ra_dec_Cov, Object.i_raErr, Object.i_sersicFlux, Object.i_sersicFluxErr, Object.i_sizeExtendedness, Object.i_sizeExtendedness_flag, Object.objectId, Object.parentObjectId, Object.patch, Object.r_ap03Flux, Object.r_ap03Flux_flag, Object.r_ap03FluxErr, Object.r_ap06Flux, Object.r_ap06Flux_flag, Object.r_ap06FluxErr, Object.r_ap09Flux, Object.r_ap09Flux_flag, Object.r_ap09FluxErr, Object.r_ap12Flux, Object.r_ap12Flux_flag, Object.r_ap12FluxErr, Object.r_ap17Flux, Object.r_ap17Flux_flag, Object.r_ap17FluxErr, Object.r_ap25Flux, Object.r_ap25Flux_flag, Object.r_ap25FluxErr, Object.r_ap35Flux, Object.r_ap35Flux_flag, Object.r_ap35FluxErr, Object.r_ap50Flux, Object.r_ap50Flux_flag, Object.r_ap50FluxErr, Object.r_ap70Flux, Object.r_ap70Flux_flag, Object.r_ap70FluxErr, Object.r_apFlux_flag, Object.r_apFlux_flag_apertureTruncated, Object.r_apFlux_flag_sincCoeffsTruncated, Object.r_bdChi2, Object.r_bdE1, Object.r_bdE2, Object.r_bdFluxB, Object.r_bdFluxBErr, Object.r_bdFluxD, Object.r_bdFluxDErr, Object.r_bdReB, Object.r_bdReD, Object.r_blendedness, Object.r_blendedness_flag, Object.r_calib_astrometry_used, Object.r_calib_photometry_reserved, Object.r_calib_photometry_used, Object.r_calib_psf_candidate, Object.r_calib_psf_reserved, Object.r_calib_psf_used, Object.r_calibFlux, Object.r_calibFlux_flag, Object.r_calibFlux_flag_apertureTruncated, Object.r_calibFlux_flag_sincCoeffsTruncated, Object.r_calibFluxErr, Object.r_centroid_flag, Object.r_centroid_x, Object.r_centroid_xErr, Object.r_centroid_y, Object.r_centroid_yErr, Object.r_cModel_flag, Object.r_cModel_flag_apCorr, Object.r_cModelFlux, Object.r_cModelFlux_inner, Object.r_cModelFluxErr, Object.r_cModelMag, Object.r_cModelMagErr, Object.r_deblend_blendedness, Object.r_deblend_dataCoverage, Object.r_deblend_fluxOverlap, Object.r_deblend_fluxOverlapFraction, Object.r_deblend_zeroFlux, Object.r_dec, Object.r_decErr, Object.r_epoch, Object.r_extendedness, Object.r_extendedness_flag, Object.r_free_cModelFlux, Object.r_free_cModelFlux_flag, Object.r_free_cModelFlux_inner, Object.r_free_cModelFluxErr, Object.r_free_psfFlux, Object.r_free_psfFlux_flag, Object.r_free_psfFluxErr, Object.r_gaap0p7Flux, Object.r_gaap0p7Flux_flag_bigPsf, Object.r_gaap0p7FluxErr, Object.r_gaap1p0Flux, Object.r_gaap1p0Flux_flag_bigPsf, Object.r_gaap1p0FluxErr, Object.r_gaap1p5Flux, Object.r_gaap1p5Flux_flag_bigPsf, Object.r_gaap1p5FluxErr, Object.r_gaap2p5Flux, Object.r_gaap2p5Flux_flag_bigPsf, Object.r_gaap2p5FluxErr, Object.r_gaap3p0Flux, Object.r_gaap3p0Flux_flag_bigPsf, Object.r_gaap3p0FluxErr, Object.r_gaapFlux_flag, Object.r_gaapFlux_flag_edge, Object.r_gaapFlux_flag_gaussianization, Object.r_gaapOptimalFlux, Object.r_gaapOptimalFlux_flag_bigPsf, Object.r_gaapOptimalFluxErr, Object.r_gaapPsfFlux, Object.r_gaapPsfFluxErr, Object.r_hsm_moments_03, Object.r_hsm_moments_04, Object.r_hsm_moments_12, Object.r_hsm_moments_13, Object.r_hsm_moments_21, Object.r_hsm_moments_22, Object.r_hsm_moments_30, Object.r_hsm_moments_31, Object.r_hsm_moments_40, Object.r_hsm_moments_flag, Object.r_hsm_momentsPsf_03, Object.r_hsm_momentsPsf_04, Object.r_hsm_momentsPsf_12, Object.r_hsm_momentsPsf_13, Object.r_hsm_momentsPsf_21, Object.r_hsm_momentsPsf_22, Object.r_hsm_momentsPsf_30, Object.r_hsm_momentsPsf_31, Object.r_hsm_momentsPsf_40, Object.r_hsm_momentsPsf_flag, Object.r_hsmShapeRegauss_e1, Object.r_hsmShapeRegauss_e2, Object.r_hsmShapeRegauss_flag, Object.r_hsmShapeRegauss_sigma, Object.r_i_flag, Object.r_iDebiasedPSF_flag, Object.r_inputCount, Object.r_inputCount_flag, Object.r_inputCount_flag_noInputs, Object.r_invalidPsfFlag, Object.r_iPSF_flag, Object.r_iRound_flag, Object.r_ixx, Object.r_ixxDebiasedPSF, Object.r_ixxPSF, Object.r_ixxRound, Object.r_ixy, Object.r_ixyDebiasedPSF, Object.r_ixyPSF, Object.r_ixyRound, Object.r_iyy, Object.r_iyyDebiasedPSF, Object.r_iyyPSF, Object.r_iyyRound, Object.r_kronFlux, Object.r_kronFlux_flag, Object.r_kronFlux_flag_bad_radius, Object.r_kronFlux_flag_bad_shape, Object.r_kronFlux_flag_bad_shape_no_psf, Object.r_kronFlux_flag_edge, Object.r_kronFlux_flag_no_fallback_radius, Object.r_kronFlux_flag_no_minimum_radius, Object.r_kronFlux_flag_small_radius, Object.r_kronFlux_flag_used_minimum_radius, Object.r_kronFlux_flag_used_psf_radius, Object.r_kronFluxErr, Object.r_kronRad, Object.r_pixelFlags_bad, Object.r_pixelFlags_clipped, Object.r_pixelFlags_clippedCenter, Object.r_pixelFlags_cr, Object.r_pixelFlags_crCenter, Object.r_pixelFlags_edge, Object.r_pixelFlags_inexact_psf, Object.r_pixelFlags_inexact_psfCenter, Object.r_pixelFlags_interpolated, Object.r_pixelFlags_interpolatedCenter, Object.r_pixelFlags_nodata, Object.r_pixelFlags_offimage, Object.r_pixelFlags_saturated, Object.r_pixelFlags_saturatedCenter, Object.r_pixelFlags_sensor_edge, Object.r_pixelFlags_sensor_edgeCenter, Object.r_pixelFlags_suspect, Object.r_pixelFlags_suspectCenter, Object.r_psfFlux, Object.r_psfFlux_area, Object.r_psfFlux_flag, Object.r_psfFlux_flag_apCorr, Object.r_psfFlux_flag_edge, Object.r_psfFlux_flag_noGoodPixels, Object.r_psfFluxErr, Object.r_psfMag, Object.r_psfMagErr, Object.r_psfModel_TwoGaussian_chisq_reduced, Object.r_psfModel_TwoGaussian_gauss1_fluxfrac, Object.r_psfModel_TwoGaussian_gauss1_rho, Object.r_psfModel_TwoGaussian_gauss1_sigma_x, Object.r_psfModel_TwoGaussian_gauss1_sigma_y, Object.r_psfModel_TwoGaussian_gauss2_rho, Object.r_psfModel_TwoGaussian_gauss2_sigma_x, Object.r_psfModel_TwoGaussian_gauss2_sigma_y, Object.r_psfModel_TwoGaussian_n_iter, Object.r_psfModel_TwoGaussian_no_inputs_flag, Object.r_psfModel_TwoGaussian_unknown_flag, Object.r_ra, Object.r_ra_dec_Cov, Object.r_raErr, Object.r_sersicFlux, Object.r_sersicFluxErr, Object.r_sizeExtendedness, Object.r_sizeExtendedness_flag, Object.refBand, Object.refExtendedness, Object.refSizeExtendedness, Object.sersic_chisq_reduced, Object.sersic_dec, Object.sersic_decErr, Object.sersic_index, Object.sersic_indexErr, Object.sersic_n_eval_jac, Object.sersic_n_iter, Object.sersic_no_data_flag, Object.sersic_ra, Object.sersic_raErr, Object.sersic_reff_x, Object.sersic_reff_xErr, Object.sersic_reff_y, Object.sersic_reff_yErr, Object.sersic_rho, Object.sersic_rhoErr, Object.sersic_unknown_flag, Object.sersic_x, Object.sersic_xErr, Object.sersic_y, Object.sersic_yErr, Object.shape_flag, Object.shape_xx, Object.shape_xy, Object.shape_yy, Object.tract, Object.u_ap03Flux, Object.u_ap03Flux_flag, Object.u_ap03FluxErr, Object.u_ap06Flux, Object.u_ap06Flux_flag, Object.u_ap06FluxErr, Object.u_ap09Flux, Object.u_ap09Flux_flag, Object.u_ap09FluxErr, Object.u_ap12Flux, Object.u_ap12Flux_flag, Object.u_ap12FluxErr, Object.u_ap17Flux, Object.u_ap17Flux_flag, Object.u_ap17FluxErr, Object.u_ap25Flux, Object.u_ap25Flux_flag, Object.u_ap25FluxErr, Object.u_ap35Flux, Object.u_ap35Flux_flag, Object.u_ap35FluxErr, Object.u_ap50Flux, Object.u_ap50Flux_flag, Object.u_ap50FluxErr, Object.u_ap70Flux, Object.u_ap70Flux_flag, Object.u_ap70FluxErr, Object.u_apFlux_flag, Object.u_apFlux_flag_apertureTruncated, Object.u_apFlux_flag_sincCoeffsTruncated, Object.u_bdChi2, Object.u_bdE1, Object.u_bdE2, Object.u_bdFluxB, Object.u_bdFluxBErr, Object.u_bdFluxD, Object.u_bdFluxDErr, Object.u_bdReB, Object.u_bdReD, Object.u_blendedness, Object.u_blendedness_flag, Object.u_calib_astrometry_used, Object.u_calib_photometry_reserved, Object.u_calib_photometry_used, Object.u_calib_psf_candidate, Object.u_calib_psf_reserved, Object.u_calib_psf_used, Object.u_calibFlux, Object.u_calibFlux_flag, Object.u_calibFlux_flag_apertureTruncated, Object.u_calibFlux_flag_sincCoeffsTruncated, Object.u_calibFluxErr, Object.u_centroid_flag, Object.u_centroid_x, Object.u_centroid_xErr, Object.u_centroid_y, Object.u_centroid_yErr, Object.u_cModel_flag, Object.u_cModel_flag_apCorr, Object.u_cModelFlux, Object.u_cModelFlux_inner, Object.u_cModelFluxErr, Object.u_cModelMag, Object.u_cModelMagErr, Object.u_deblend_blendedness, Object.u_deblend_dataCoverage, Object.u_deblend_fluxOverlap, Object.u_deblend_fluxOverlapFraction, Object.u_deblend_zeroFlux, Object.u_dec, Object.u_decErr, Object.u_epoch, Object.u_extendedness, Object.u_extendedness_flag, Object.u_free_cModelFlux, Object.u_free_cModelFlux_flag, Object.u_free_cModelFlux_inner, Object.u_free_cModelFluxErr, Object.u_free_psfFlux, Object.u_free_psfFlux_flag, Object.u_free_psfFluxErr, Object.u_gaap0p7Flux, Object.u_gaap0p7Flux_flag_bigPsf, Object.u_gaap0p7FluxErr, Object.u_gaap1p0Flux, Object.u_gaap1p0Flux_flag_bigPsf, Object.u_gaap1p0FluxErr, Object.u_gaap1p5Flux, Object.u_gaap1p5Flux_flag_bigPsf, Object.u_gaap1p5FluxErr, Object.u_gaap2p5Flux, Object.u_gaap2p5Flux_flag_bigPsf, Object.u_gaap2p5FluxErr, Object.u_gaap3p0Flux, Object.u_gaap3p0Flux_flag_bigPsf, Object.u_gaap3p0FluxErr, Object.u_gaapFlux_flag, Object.u_gaapFlux_flag_edge, Object.u_gaapFlux_flag_gaussianization, Object.u_gaapOptimalFlux, Object.u_gaapOptimalFlux_flag_bigPsf, Object.u_gaapOptimalFluxErr, Object.u_gaapPsfFlux, Object.u_gaapPsfFluxErr, Object.u_hsm_moments_03, Object.u_hsm_moments_04, Object.u_hsm_moments_12, Object.u_hsm_moments_13, Object.u_hsm_moments_21, Object.u_hsm_moments_22, Object.u_hsm_moments_30, Object.u_hsm_moments_31, Object.u_hsm_moments_40, Object.u_hsm_moments_flag, Object.u_hsm_momentsPsf_03, Object.u_hsm_momentsPsf_04, Object.u_hsm_momentsPsf_12, Object.u_hsm_momentsPsf_13, Object.u_hsm_momentsPsf_21, Object.u_hsm_momentsPsf_22, Object.u_hsm_momentsPsf_30, Object.u_hsm_momentsPsf_31, Object.u_hsm_momentsPsf_40, Object.u_hsm_momentsPsf_flag, Object.u_hsmShapeRegauss_e1, Object.u_hsmShapeRegauss_e2, Object.u_hsmShapeRegauss_flag, Object.u_hsmShapeRegauss_sigma, Object.u_i_flag, Object.u_iDebiasedPSF_flag, Object.u_inputCount, Object.u_inputCount_flag, Object.u_inputCount_flag_noInputs, Object.u_invalidPsfFlag, Object.u_iPSF_flag, Object.u_iRound_flag, Object.u_ixx, Object.u_ixxDebiasedPSF, Object.u_ixxPSF, Object.u_ixxRound, Object.u_ixy, Object.u_ixyDebiasedPSF, Object.u_ixyPSF, Object.u_ixyRound, Object.u_iyy, Object.u_iyyDebiasedPSF, Object.u_iyyPSF, Object.u_iyyRound, Object.u_kronFlux, Object.u_kronFlux_flag, Object.u_kronFlux_flag_bad_radius, Object.u_kronFlux_flag_bad_shape, Object.u_kronFlux_flag_bad_shape_no_psf, Object.u_kronFlux_flag_edge, Object.u_kronFlux_flag_no_fallback_radius, Object.u_kronFlux_flag_no_minimum_radius, Object.u_kronFlux_flag_small_radius, Object.u_kronFlux_flag_used_minimum_radius, Object.u_kronFlux_flag_used_psf_radius, Object.u_kronFluxErr, Object.u_kronRad, Object.u_pixelFlags_bad, Object.u_pixelFlags_clipped, Object.u_pixelFlags_clippedCenter, Object.u_pixelFlags_cr, Object.u_pixelFlags_crCenter, Object.u_pixelFlags_edge, Object.u_pixelFlags_inexact_psf, Object.u_pixelFlags_inexact_psfCenter, Object.u_pixelFlags_interpolated, Object.u_pixelFlags_interpolatedCenter, Object.u_pixelFlags_nodata, Object.u_pixelFlags_offimage, Object.u_pixelFlags_saturated, Object.u_pixelFlags_saturatedCenter, Object.u_pixelFlags_sensor_edge, Object.u_pixelFlags_sensor_edgeCenter, Object.u_pixelFlags_suspect, Object.u_pixelFlags_suspectCenter, Object.u_psfFlux, Object.u_psfFlux_area, Object.u_psfFlux_flag, Object.u_psfFlux_flag_apCorr, Object.u_psfFlux_flag_edge, Object.u_psfFlux_flag_noGoodPixels, Object.u_psfFluxErr, Object.u_psfMag, Object.u_psfMagErr, Object.u_psfModel_TwoGaussian_chisq_reduced, Object.u_psfModel_TwoGaussian_gauss1_fluxfrac, Object.u_psfModel_TwoGaussian_gauss1_rho, Object.u_psfModel_TwoGaussian_gauss1_sigma_x, Object.u_psfModel_TwoGaussian_gauss1_sigma_y, Object.u_psfModel_TwoGaussian_gauss2_rho, Object.u_psfModel_TwoGaussian_gauss2_sigma_x, Object.u_psfModel_TwoGaussian_gauss2_sigma_y, Object.u_psfModel_TwoGaussian_n_iter, Object.u_psfModel_TwoGaussian_no_inputs_flag, Object.u_psfModel_TwoGaussian_unknown_flag, Object.u_ra, Object.u_ra_dec_Cov, Object.u_raErr, Object.u_sersicFlux, Object.u_sersicFluxErr, Object.u_sizeExtendedness, Object.u_sizeExtendedness_flag, Object.x, Object.xErr, Object.xy_flag, Object.y, Object.y_ap03Flux, Object.y_ap03Flux_flag, Object.y_ap03FluxErr, Object.y_ap06Flux, Object.y_ap06Flux_flag, Object.y_ap06FluxErr, Object.y_ap09Flux, Object.y_ap09Flux_flag, Object.y_ap09FluxErr, Object.y_ap12Flux, Object.y_ap12Flux_flag, Object.y_ap12FluxErr, Object.y_ap17Flux, Object.y_ap17Flux_flag, Object.y_ap17FluxErr, Object.y_ap25Flux, Object.y_ap25Flux_flag, Object.y_ap25FluxErr, Object.y_ap35Flux, Object.y_ap35Flux_flag, Object.y_ap35FluxErr, Object.y_ap50Flux, Object.y_ap50Flux_flag, Object.y_ap50FluxErr, Object.y_ap70Flux, Object.y_ap70Flux_flag, Object.y_ap70FluxErr, Object.y_apFlux_flag, Object.y_apFlux_flag_apertureTruncated, Object.y_apFlux_flag_sincCoeffsTruncated, Object.y_bdChi2, Object.y_bdE1, Object.y_bdE2, Object.y_bdFluxB, Object.y_bdFluxBErr, Object.y_bdFluxD, Object.y_bdFluxDErr, Object.y_bdReB, Object.y_bdReD, Object.y_blendedness, Object.y_blendedness_flag, Object.y_calib_astrometry_used, Object.y_calib_photometry_reserved, Object.y_calib_photometry_used, Object.y_calib_psf_candidate, Object.y_calib_psf_reserved, Object.y_calib_psf_used, Object.y_calibFlux, Object.y_calibFlux_flag, Object.y_calibFlux_flag_apertureTruncated, Object.y_calibFlux_flag_sincCoeffsTruncated, Object.y_calibFluxErr, Object.y_centroid_flag, Object.y_centroid_x, Object.y_centroid_xErr, Object.y_centroid_y, Object.y_centroid_yErr, Object.y_cModel_flag, Object.y_cModel_flag_apCorr, Object.y_cModelFlux, Object.y_cModelFlux_inner, Object.y_cModelFluxErr, Object.y_cModelMag, Object.y_cModelMagErr, Object.y_deblend_blendedness, Object.y_deblend_dataCoverage, Object.y_deblend_fluxOverlap, Object.y_deblend_fluxOverlapFraction, Object.y_deblend_zeroFlux, Object.y_dec, Object.y_decErr, Object.y_epoch, Object.y_extendedness, Object.y_extendedness_flag, Object.y_free_cModelFlux, Object.y_free_cModelFlux_flag, Object.y_free_cModelFlux_inner, Object.y_free_cModelFluxErr, Object.y_free_psfFlux, Object.y_free_psfFlux_flag, Object.y_free_psfFluxErr, Object.y_gaap0p7Flux, Object.y_gaap0p7Flux_flag_bigPsf, Object.y_gaap0p7FluxErr, Object.y_gaap1p0Flux, Object.y_gaap1p0Flux_flag_bigPsf, Object.y_gaap1p0FluxErr, Object.y_gaap1p5Flux, Object.y_gaap1p5Flux_flag_bigPsf, Object.y_gaap1p5FluxErr, Object.y_gaap2p5Flux, Object.y_gaap2p5Flux_flag_bigPsf, Object.y_gaap2p5FluxErr, Object.y_gaap3p0Flux, Object.y_gaap3p0Flux_flag_bigPsf, Object.y_gaap3p0FluxErr, Object.y_gaapFlux_flag, Object.y_gaapFlux_flag_edge, Object.y_gaapFlux_flag_gaussianization, Object.y_gaapOptimalFlux, Object.y_gaapOptimalFlux_flag_bigPsf, Object.y_gaapOptimalFluxErr, Object.y_gaapPsfFlux, Object.y_gaapPsfFluxErr, Object.y_hsm_moments_03, Object.y_hsm_moments_04, Object.y_hsm_moments_12, Object.y_hsm_moments_13, Object.y_hsm_moments_21, Object.y_hsm_moments_22, Object.y_hsm_moments_30, Object.y_hsm_moments_31, Object.y_hsm_moments_40, Object.y_hsm_moments_flag, Object.y_hsm_momentsPsf_03, Object.y_hsm_momentsPsf_04, Object.y_hsm_momentsPsf_12, Object.y_hsm_momentsPsf_13, Object.y_hsm_momentsPsf_21, Object.y_hsm_momentsPsf_22, Object.y_hsm_momentsPsf_30, Object.y_hsm_momentsPsf_31, Object.y_hsm_momentsPsf_40, Object.y_hsm_momentsPsf_flag, Object.y_hsmShapeRegauss_e1, Object.y_hsmShapeRegauss_e2, Object.y_hsmShapeRegauss_flag, Object.y_hsmShapeRegauss_sigma, Object.y_i_flag, Object.y_iDebiasedPSF_flag, Object.y_inputCount, Object.y_inputCount_flag, Object.y_inputCount_flag_noInputs, Object.y_invalidPsfFlag, Object.y_iPSF_flag, Object.y_iRound_flag, Object.y_ixx, Object.y_ixxDebiasedPSF, Object.y_ixxPSF, Object.y_ixxRound, Object.y_ixy, Object.y_ixyDebiasedPSF, Object.y_ixyPSF, Object.y_ixyRound, Object.y_iyy, Object.y_iyyDebiasedPSF, Object.y_iyyPSF, Object.y_iyyRound, Object.y_kronFlux, Object.y_kronFlux_flag, Object.y_kronFlux_flag_bad_radius, Object.y_kronFlux_flag_bad_shape, Object.y_kronFlux_flag_bad_shape_no_psf, Object.y_kronFlux_flag_edge, Object.y_kronFlux_flag_no_fallback_radius, Object.y_kronFlux_flag_no_minimum_radius, Object.y_kronFlux_flag_small_radius, Object.y_kronFlux_flag_used_minimum_radius, Object.y_kronFlux_flag_used_psf_radius, Object.y_kronFluxErr, Object.y_kronRad, Object.y_pixelFlags_bad, Object.y_pixelFlags_clipped, Object.y_pixelFlags_clippedCenter, Object.y_pixelFlags_cr, Object.y_pixelFlags_crCenter, Object.y_pixelFlags_edge, Object.y_pixelFlags_inexact_psf, Object.y_pixelFlags_inexact_psfCenter, Object.y_pixelFlags_interpolated, Object.y_pixelFlags_interpolatedCenter, Object.y_pixelFlags_nodata, Object.y_pixelFlags_offimage, Object.y_pixelFlags_saturated, Object.y_pixelFlags_saturatedCenter, Object.y_pixelFlags_sensor_edge, Object.y_pixelFlags_sensor_edgeCenter, Object.y_pixelFlags_suspect, Object.y_pixelFlags_suspectCenter, Object.y_psfFlux, Object.y_psfFlux_area, Object.y_psfFlux_flag, Object.y_psfFlux_flag_apCorr, Object.y_psfFlux_flag_edge, Object.y_psfFlux_flag_noGoodPixels, Object.y_psfFluxErr, Object.y_psfMag, Object.y_psfMagErr, Object.y_psfModel_TwoGaussian_chisq_reduced, Object.y_psfModel_TwoGaussian_gauss1_fluxfrac, Object.y_psfModel_TwoGaussian_gauss1_rho, Object.y_psfModel_TwoGaussian_gauss1_sigma_x, Object.y_psfModel_TwoGaussian_gauss1_sigma_y, Object.y_psfModel_TwoGaussian_gauss2_rho, Object.y_psfModel_TwoGaussian_gauss2_sigma_x, Object.y_psfModel_TwoGaussian_gauss2_sigma_y, Object.y_psfModel_TwoGaussian_n_iter, Object.y_psfModel_TwoGaussian_no_inputs_flag, Object.y_psfModel_TwoGaussian_unknown_flag, Object.y_ra, Object.y_ra_dec_Cov, Object.y_raErr, Object.y_sersicFlux, Object.y_sersicFluxErr, Object.y_sizeExtendedness, Object.y_sizeExtendedness_flag, Object.yErr, Object.z_ap03Flux, Object.z_ap03Flux_flag, Object.z_ap03FluxErr, Object.z_ap06Flux, Object.z_ap06Flux_flag, Object.z_ap06FluxErr, Object.z_ap09Flux, Object.z_ap09Flux_flag, Object.z_ap09FluxErr, Object.z_ap12Flux, Object.z_ap12Flux_flag, Object.z_ap12FluxErr, Object.z_ap17Flux, Object.z_ap17Flux_flag, Object.z_ap17FluxErr, Object.z_ap25Flux, Object.z_ap25Flux_flag, Object.z_ap25FluxErr, Object.z_ap35Flux, Object.z_ap35Flux_flag, Object.z_ap35FluxErr, Object.z_ap50Flux, Object.z_ap50Flux_flag, Object.z_ap50FluxErr, Object.z_ap70Flux, Object.z_ap70Flux_flag, Object.z_ap70FluxErr, Object.z_apFlux_flag, Object.z_apFlux_flag_apertureTruncated, Object.z_apFlux_flag_sincCoeffsTruncated, Object.z_bdChi2, Object.z_bdE1, Object.z_bdE2, Object.z_bdFluxB, Object.z_bdFluxBErr, Object.z_bdFluxD, Object.z_bdFluxDErr, Object.z_bdReB, Object.z_bdReD, Object.z_blendedness, Object.z_blendedness_flag, Object.z_calib_astrometry_used, Object.z_calib_photometry_reserved, Object.z_calib_photometry_used, Object.z_calib_psf_candidate, Object.z_calib_psf_reserved, Object.z_calib_psf_used, Object.z_calibFlux, Object.z_calibFlux_flag, Object.z_calibFlux_flag_apertureTruncated, Object.z_calibFlux_flag_sincCoeffsTruncated, Object.z_calibFluxErr, Object.z_centroid_flag, Object.z_centroid_x, Object.z_centroid_xErr, Object.z_centroid_y, Object.z_centroid_yErr, Object.z_cModel_flag, Object.z_cModel_flag_apCorr, Object.z_cModelFlux, Object.z_cModelFlux_inner, Object.z_cModelFluxErr, Object.z_cModelMag, Object.z_cModelMagErr, Object.z_deblend_blendedness, Object.z_deblend_dataCoverage, Object.z_deblend_fluxOverlap, Object.z_deblend_fluxOverlapFraction, Object.z_deblend_zeroFlux, Object.z_dec, Object.z_decErr, Object.z_epoch, Object.z_extendedness, Object.z_extendedness_flag, Object.z_free_cModelFlux, Object.z_free_cModelFlux_flag, Object.z_free_cModelFlux_inner, Object.z_free_cModelFluxErr, Object.z_free_psfFlux, Object.z_free_psfFlux_flag, Object.z_free_psfFluxErr, Object.z_gaap0p7Flux, Object.z_gaap0p7Flux_flag_bigPsf, Object.z_gaap0p7FluxErr, Object.z_gaap1p0Flux, Object.z_gaap1p0Flux_flag_bigPsf, Object.z_gaap1p0FluxErr, Object.z_gaap1p5Flux, Object.z_gaap1p5Flux_flag_bigPsf, Object.z_gaap1p5FluxErr, Object.z_gaap2p5Flux, Object.z_gaap2p5Flux_flag_bigPsf, Object.z_gaap2p5FluxErr, Object.z_gaap3p0Flux, Object.z_gaap3p0Flux_flag_bigPsf, Object.z_gaap3p0FluxErr, Object.z_gaapFlux_flag, Object.z_gaapFlux_flag_edge, Object.z_gaapFlux_flag_gaussianization, Object.z_gaapOptimalFlux, Object.z_gaapOptimalFlux_flag_bigPsf, Object.z_gaapOptimalFluxErr, Object.z_gaapPsfFlux, Object.z_gaapPsfFluxErr, Object.z_hsm_moments_03, Object.z_hsm_moments_04, Object.z_hsm_moments_12, Object.z_hsm_moments_13, Object.z_hsm_moments_21, Object.z_hsm_moments_22, Object.z_hsm_moments_30, Object.z_hsm_moments_31, Object.z_hsm_moments_40, Object.z_hsm_moments_flag, Object.z_hsm_momentsPsf_03, Object.z_hsm_momentsPsf_04, Object.z_hsm_momentsPsf_12, Object.z_hsm_momentsPsf_13, Object.z_hsm_momentsPsf_21, Object.z_hsm_momentsPsf_22, Object.z_hsm_momentsPsf_30, Object.z_hsm_momentsPsf_31, Object.z_hsm_momentsPsf_40, Object.z_hsm_momentsPsf_flag, Object.z_hsmShapeRegauss_e1, Object.z_hsmShapeRegauss_e2, Object.z_hsmShapeRegauss_flag, Object.z_hsmShapeRegauss_sigma, Object.z_i_flag, Object.z_iDebiasedPSF_flag, Object.z_inputCount, Object.z_inputCount_flag, Object.z_inputCount_flag_noInputs, Object.z_invalidPsfFlag, Object.z_iPSF_flag, Object.z_iRound_flag, Object.z_ixx, Object.z_ixxDebiasedPSF, Object.z_ixxPSF, Object.z_ixxRound, Object.z_ixy, Object.z_ixyDebiasedPSF, Object.z_ixyPSF, Object.z_ixyRound, Object.z_iyy, Object.z_iyyDebiasedPSF, Object.z_iyyPSF, Object.z_iyyRound, Object.z_kronFlux, Object.z_kronFlux_flag, Object.z_kronFlux_flag_bad_radius, Object.z_kronFlux_flag_bad_shape, Object.z_kronFlux_flag_bad_shape_no_psf, Object.z_kronFlux_flag_edge, Object.z_kronFlux_flag_no_fallback_radius, Object.z_kronFlux_flag_no_minimum_radius, Object.z_kronFlux_flag_small_radius, Object.z_kronFlux_flag_used_minimum_radius, Object.z_kronFlux_flag_used_psf_radius, Object.z_kronFluxErr, Object.z_kronRad, Object.z_pixelFlags_bad, Object.z_pixelFlags_clipped, Object.z_pixelFlags_clippedCenter, Object.z_pixelFlags_cr, Object.z_pixelFlags_crCenter, Object.z_pixelFlags_edge, Object.z_pixelFlags_inexact_psf, Object.z_pixelFlags_inexact_psfCenter, Object.z_pixelFlags_interpolated, Object.z_pixelFlags_interpolatedCenter, Object.z_pixelFlags_nodata, Object.z_pixelFlags_offimage, Object.z_pixelFlags_saturated, Object.z_pixelFlags_saturatedCenter, Object.z_pixelFlags_sensor_edge, Object.z_pixelFlags_sensor_edgeCenter, Object.z_pixelFlags_suspect, Object.z_pixelFlags_suspectCenter, Object.z_psfFlux, Object.z_psfFlux_area, Object.z_psfFlux_flag, Object.z_psfFlux_flag_apCorr, Object.z_psfFlux_flag_edge, Object.z_psfFlux_flag_noGoodPixels, Object.z_psfFluxErr, Object.z_psfMag, Object.z_psfMagErr, Object.z_psfModel_TwoGaussian_chisq_reduced, Object.z_psfModel_TwoGaussian_gauss1_fluxfrac, Object.z_psfModel_TwoGaussian_gauss1_rho, Object.z_psfModel_TwoGaussian_gauss1_sigma_x, Object.z_psfModel_TwoGaussian_gauss1_sigma_y, Object.z_psfModel_TwoGaussian_gauss2_rho, Object.z_psfModel_TwoGaussian_gauss2_sigma_x, Object.z_psfModel_TwoGaussian_gauss2_sigma_y, Object.z_psfModel_TwoGaussian_n_iter, Object.z_psfModel_TwoGaussian_no_inputs_flag, Object.z_psfModel_TwoGaussian_unknown_flag, Object.z_ra, Object.z_ra_dec_Cov, Object.z_raErr, Object.z_sersicFlux, Object.z_sersicFluxErr, Object.z_sizeExtendedness, Object.z_sizeExtendedness_flag FROM Object WHERE Object.objectId=0 diff --git a/src/ccontrol/testdata/parser-corpus/q04_object_table_wide.sql b/src/ccontrol/testdata/parser-corpus/q04_object_table_wide.sql new file mode 100644 index 0000000000..ed0706de2d --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q04_object_table_wide.sql @@ -0,0 +1,859 @@ +SELECT + dp1.Object.qserv_trans_id AS qserv_trans_id_raw, + dp1.Object.objectId AS objectId_raw, + dp1.Object.iauId AS iauId_raw, + dp1.Object.ra_PS AS ra_PS_raw, + dp1.Object.ra_PS_Sigma AS ra_PS_Sigma_raw, + dp1.Object.decl_PS AS decl_PS_raw, + dp1.Object.decl_PS_Sigma AS decl_PS_Sigma_raw, + dp1.Object.radecl_PS_Cov AS radecl_PS_Cov_raw, + dp1.Object.htmId20 AS htmId20_raw, + dp1.Object.ra_SG AS ra_SG_raw, + dp1.Object.ra_SG_Sigma AS ra_SG_Sigma_raw, + dp1.Object.decl_SG AS decl_SG_raw, + dp1.Object.decl_SG_Sigma AS decl_SG_Sigma_raw, + dp1.Object.radecl_SG_Cov AS radecl_SG_Cov_raw, + dp1.Object.raRange AS raRange_raw, + dp1.Object.declRange AS declRange_raw, + dp1.Object.muRa_PS AS muRa_PS_raw, + dp1.Object.muRa_PS_Sigma AS muRa_PS_Sigma_raw, + dp1.Object.muDecl_PS AS muDecl_PS_raw, + dp1.Object.muDecl_PS_Sigma AS muDecl_PS_Sigma_raw, + dp1.Object.muRaDecl_PS_Cov AS muRaDecl_PS_Cov_raw, + dp1.Object.parallax_PS AS parallax_PS_raw, + dp1.Object.parallax_PS_Sigma AS parallax_PS_Sigma_raw, + dp1.Object.canonicalFilterId AS canonicalFilterId_raw, + dp1.Object.extendedness AS extendedness_raw, + dp1.Object.varProb AS varProb_raw, + dp1.Object.earliestObsTime AS earliestObsTime_raw, + dp1.Object.latestObsTime AS latestObsTime_raw, + dp1.Object.meanObsTime AS meanObsTime_raw, + dp1.Object.flags AS flags_raw, + dp1.Object.uNumObs AS uNumObs_raw, + dp1.Object.uExtendedness AS uExtendedness_raw, + dp1.Object.uVarProb AS uVarProb_raw, + dp1.Object.uRaOffset_PS AS uRaOffset_PS_raw, + dp1.Object.uRaOffset_PS_Sigma AS uRaOffset_PS_Sigma_raw, + dp1.Object.uDeclOffset_PS AS uDeclOffset_PS_raw, + dp1.Object.uDeclOffset_PS_Sigma AS uDeclOffset_PS_Sigma_raw, + dp1.Object.uRaDeclOffset_PS_Cov AS uRaDeclOffset_PS_Cov_raw, + dp1.Object.uRaOffset_SG AS uRaOffset_SG_raw, + dp1.Object.uRaOffset_SG_Sigma AS uRaOffset_SG_Sigma_raw, + dp1.Object.uDeclOffset_SG AS uDeclOffset_SG_raw, + dp1.Object.uDeclOffset_SG_Sigma AS uDeclOffset_SG_Sigma_raw, + dp1.Object.uRaDeclOffset_SG_Cov AS uRaDeclOffset_SG_Cov_raw, + dp1.Object.uLnL_PS AS uLnL_PS_raw, + dp1.Object.uLnL_SG AS uLnL_SG_raw, + dp1.Object.uFlux_PS AS uFlux_PS_raw, + dp1.Object.uFlux_PS_Sigma AS uFlux_PS_Sigma_raw, + dp1.Object.uFlux_ESG AS uFlux_ESG_raw, + dp1.Object.uFlux_ESG_Sigma AS uFlux_ESG_Sigma_raw, + dp1.Object.uFlux_Gaussian AS uFlux_Gaussian_raw, + dp1.Object.uFlux_Gaussian_Sigma AS uFlux_Gaussian_Sigma_raw, + dp1.Object.uTimescale AS uTimescale_raw, + dp1.Object.uEarliestObsTime AS uEarliestObsTime_raw, + dp1.Object.uLatestObsTime AS uLatestObsTime_raw, + dp1.Object.uSersicN_SG AS uSersicN_SG_raw, + dp1.Object.uSersicN_SG_Sigma AS uSersicN_SG_Sigma_raw, + dp1.Object.uE1_SG AS uE1_SG_raw, + dp1.Object.uE1_SG_Sigma AS uE1_SG_Sigma_raw, + dp1.Object.uE2_SG AS uE2_SG_raw, + dp1.Object.uE2_SG_Sigma AS uE2_SG_Sigma_raw, + dp1.Object.uRadius_SG AS uRadius_SG_raw, + dp1.Object.uRadius_SG_Sigma AS uRadius_SG_Sigma_raw, + dp1.Object.uFlags AS uFlags_raw, + dp1.Object.gNumObs AS gNumObs_raw, + dp1.Object.gExtendedness AS gExtendedness_raw, + dp1.Object.gVarProb AS gVarProb_raw, + dp1.Object.gRaOffset_PS AS gRaOffset_PS_raw, + dp1.Object.gRaOffset_PS_Sigma AS gRaOffset_PS_Sigma_raw, + dp1.Object.gDeclOffset_PS AS gDeclOffset_PS_raw, + dp1.Object.gDeclOffset_PS_Sigma AS gDeclOffset_PS_Sigma_raw, + dp1.Object.gRaDeclOffset_PS_Cov AS gRaDeclOffset_PS_Cov_raw, + dp1.Object.gRaOffset_SG AS gRaOffset_SG_raw, + dp1.Object.gRaOffset_SG_Sigma AS gRaOffset_SG_Sigma_raw, + dp1.Object.gDeclOffset_SG AS gDeclOffset_SG_raw, + dp1.Object.gDeclOffset_SG_Sigma AS gDeclOffset_SG_Sigma_raw, + dp1.Object.gRaDeclOffset_SG_Cov AS gRaDeclOffset_SG_Cov_raw, + dp1.Object.gLnL_PS AS gLnL_PS_raw, + dp1.Object.gLnL_SG AS gLnL_SG_raw, + dp1.Object.gFlux_PS AS gFlux_PS_raw, + dp1.Object.gFlux_PS_Sigma AS gFlux_PS_Sigma_raw, + dp1.Object.gFlux_ESG AS gFlux_ESG_raw, + dp1.Object.gFlux_ESG_Sigma AS gFlux_ESG_Sigma_raw, + dp1.Object.gFlux_Gaussian AS gFlux_Gaussian_raw, + dp1.Object.gFlux_Gaussian_Sigma AS gFlux_Gaussian_Sigma_raw, + dp1.Object.gTimescale AS gTimescale_raw, + dp1.Object.gEarliestObsTime AS gEarliestObsTime_raw, + dp1.Object.gLatestObsTime AS gLatestObsTime_raw, + dp1.Object.gSersicN_SG AS gSersicN_SG_raw, + dp1.Object.gSersicN_SG_Sigma AS gSersicN_SG_Sigma_raw, + dp1.Object.gE1_SG AS gE1_SG_raw, + dp1.Object.gE1_SG_Sigma AS gE1_SG_Sigma_raw, + dp1.Object.gE2_SG AS gE2_SG_raw, + dp1.Object.gE2_SG_Sigma AS gE2_SG_Sigma_raw, + dp1.Object.gRadius_SG AS gRadius_SG_raw, + dp1.Object.gRadius_SG_Sigma AS gRadius_SG_Sigma_raw, + dp1.Object.gFlags AS gFlags_raw, + dp1.Object.rNumObs AS rNumObs_raw, + dp1.Object.rExtendedness AS rExtendedness_raw, + dp1.Object.rVarProb AS rVarProb_raw, + dp1.Object.rRaOffset_PS AS rRaOffset_PS_raw, + dp1.Object.rRaOffset_PS_Sigma AS rRaOffset_PS_Sigma_raw, + dp1.Object.rDeclOffset_PS AS rDeclOffset_PS_raw, + dp1.Object.rDeclOffset_PS_Sigma AS rDeclOffset_PS_Sigma_raw, + dp1.Object.rRaDeclOffset_PS_Cov AS rRaDeclOffset_PS_Cov_raw, + dp1.Object.rRaOffset_SG AS rRaOffset_SG_raw, + dp1.Object.rRaOffset_SG_Sigma AS rRaOffset_SG_Sigma_raw, + dp1.Object.rDeclOffset_SG AS rDeclOffset_SG_raw, + dp1.Object.rDeclOffset_SG_Sigma AS rDeclOffset_SG_Sigma_raw, + dp1.Object.rRaDeclOffset_SG_Cov AS rRaDeclOffset_SG_Cov_raw, + dp1.Object.rLnL_PS AS rLnL_PS_raw, + dp1.Object.rLnL_SG AS rLnL_SG_raw, + dp1.Object.rFlux_PS AS rFlux_PS_raw, + dp1.Object.rFlux_PS_Sigma AS rFlux_PS_Sigma_raw, + dp1.Object.rFlux_ESG AS rFlux_ESG_raw, + dp1.Object.rFlux_ESG_Sigma AS rFlux_ESG_Sigma_raw, + dp1.Object.rFlux_Gaussian AS rFlux_Gaussian_raw, + dp1.Object.rFlux_Gaussian_Sigma AS rFlux_Gaussian_Sigma_raw, + dp1.Object.rTimescale AS rTimescale_raw, + dp1.Object.rEarliestObsTime AS rEarliestObsTime_raw, + dp1.Object.rLatestObsTime AS rLatestObsTime_raw, + dp1.Object.rSersicN_SG AS rSersicN_SG_raw, + dp1.Object.rSersicN_SG_Sigma AS rSersicN_SG_Sigma_raw, + dp1.Object.rE1_SG AS rE1_SG_raw, + dp1.Object.rE1_SG_Sigma AS rE1_SG_Sigma_raw, + dp1.Object.rE2_SG AS rE2_SG_raw, + dp1.Object.rE2_SG_Sigma AS rE2_SG_Sigma_raw, + dp1.Object.rRadius_SG AS rRadius_SG_raw, + dp1.Object.rRadius_SG_Sigma AS rRadius_SG_Sigma_raw, + dp1.Object.rFlags AS rFlags_raw, + dp1.Object.iNumObs AS iNumObs_raw, + dp1.Object.iExtendedness AS iExtendedness_raw, + dp1.Object.iVarProb AS iVarProb_raw, + dp1.Object.iRaOffset_PS AS iRaOffset_PS_raw, + dp1.Object.iRaOffset_PS_Sigma AS iRaOffset_PS_Sigma_raw, + dp1.Object.iDeclOffset_PS AS iDeclOffset_PS_raw, + dp1.Object.iDeclOffset_PS_Sigma AS iDeclOffset_PS_Sigma_raw, + dp1.Object.iRaDeclOffset_PS_Cov AS iRaDeclOffset_PS_Cov_raw, + dp1.Object.iRaOffset_SG AS iRaOffset_SG_raw, + dp1.Object.iRaOffset_SG_Sigma AS iRaOffset_SG_Sigma_raw, + dp1.Object.iDeclOffset_SG AS iDeclOffset_SG_raw, + dp1.Object.iDeclOffset_SG_Sigma AS iDeclOffset_SG_Sigma_raw, + dp1.Object.iRaDeclOffset_SG_Cov AS iRaDeclOffset_SG_Cov_raw, + dp1.Object.iLnL_PS AS iLnL_PS_raw, + dp1.Object.iLnL_SG AS iLnL_SG_raw, + dp1.Object.iFlux_PS AS iFlux_PS_raw, + dp1.Object.iFlux_PS_Sigma AS iFlux_PS_Sigma_raw, + dp1.Object.iFlux_ESG AS iFlux_ESG_raw, + dp1.Object.iFlux_ESG_Sigma AS iFlux_ESG_Sigma_raw, + dp1.Object.iFlux_Gaussian AS iFlux_Gaussian_raw, + dp1.Object.iFlux_Gaussian_Sigma AS iFlux_Gaussian_Sigma_raw, + dp1.Object.iTimescale AS iTimescale_raw, + dp1.Object.iEarliestObsTime AS iEarliestObsTime_raw, + dp1.Object.iLatestObsTime AS iLatestObsTime_raw, + dp1.Object.iSersicN_SG AS iSersicN_SG_raw, + dp1.Object.iSersicN_SG_Sigma AS iSersicN_SG_Sigma_raw, + dp1.Object.iE1_SG AS iE1_SG_raw, + dp1.Object.iE1_SG_Sigma AS iE1_SG_Sigma_raw, + dp1.Object.iE2_SG AS iE2_SG_raw, + dp1.Object.iE2_SG_Sigma AS iE2_SG_Sigma_raw, + dp1.Object.iRadius_SG AS iRadius_SG_raw, + dp1.Object.iRadius_SG_Sigma AS iRadius_SG_Sigma_raw, + dp1.Object.iFlags AS iFlags_raw, + dp1.Object.zNumObs AS zNumObs_raw, + dp1.Object.zExtendedness AS zExtendedness_raw, + dp1.Object.zVarProb AS zVarProb_raw, + dp1.Object.zRaOffset_PS AS zRaOffset_PS_raw, + dp1.Object.zRaOffset_PS_Sigma AS zRaOffset_PS_Sigma_raw, + dp1.Object.zDeclOffset_PS AS zDeclOffset_PS_raw, + dp1.Object.zDeclOffset_PS_Sigma AS zDeclOffset_PS_Sigma_raw, + dp1.Object.zRaDeclOffset_PS_Cov AS zRaDeclOffset_PS_Cov_raw, + dp1.Object.zRaOffset_SG AS zRaOffset_SG_raw, + dp1.Object.zRaOffset_SG_Sigma AS zRaOffset_SG_Sigma_raw, + dp1.Object.zDeclOffset_SG AS zDeclOffset_SG_raw, + dp1.Object.zDeclOffset_SG_Sigma AS zDeclOffset_SG_Sigma_raw, + dp1.Object.zRaDeclOffset_SG_Cov AS zRaDeclOffset_SG_Cov_raw, + dp1.Object.zLnL_PS AS zLnL_PS_raw, + dp1.Object.zLnL_SG AS zLnL_SG_raw, + dp1.Object.zFlux_PS AS zFlux_PS_raw, + dp1.Object.zFlux_PS_Sigma AS zFlux_PS_Sigma_raw, + dp1.Object.zFlux_ESG AS zFlux_ESG_raw, + dp1.Object.zFlux_ESG_Sigma AS zFlux_ESG_Sigma_raw, + dp1.Object.zFlux_Gaussian AS zFlux_Gaussian_raw, + dp1.Object.zFlux_Gaussian_Sigma AS zFlux_Gaussian_Sigma_raw, + dp1.Object.zTimescale AS zTimescale_raw, + dp1.Object.zEarliestObsTime AS zEarliestObsTime_raw, + dp1.Object.zLatestObsTime AS zLatestObsTime_raw, + dp1.Object.zSersicN_SG AS zSersicN_SG_raw, + dp1.Object.zSersicN_SG_Sigma AS zSersicN_SG_Sigma_raw, + dp1.Object.zE1_SG AS zE1_SG_raw, + dp1.Object.zE1_SG_Sigma AS zE1_SG_Sigma_raw, + dp1.Object.zE2_SG AS zE2_SG_raw, + dp1.Object.zE2_SG_Sigma AS zE2_SG_Sigma_raw, + dp1.Object.zRadius_SG AS zRadius_SG_raw, + dp1.Object.zRadius_SG_Sigma AS zRadius_SG_Sigma_raw, + dp1.Object.zFlags AS zFlags_raw, + dp1.Object.yNumObs AS yNumObs_raw, + dp1.Object.yExtendedness AS yExtendedness_raw, + dp1.Object.yVarProb AS yVarProb_raw, + dp1.Object.yRaOffset_PS AS yRaOffset_PS_raw, + dp1.Object.yRaOffset_PS_Sigma AS yRaOffset_PS_Sigma_raw, + dp1.Object.yDeclOffset_PS AS yDeclOffset_PS_raw, + dp1.Object.yDeclOffset_PS_Sigma AS yDeclOffset_PS_Sigma_raw, + dp1.Object.yRaDeclOffset_PS_Cov AS yRaDeclOffset_PS_Cov_raw, + dp1.Object.yRaOffset_SG AS yRaOffset_SG_raw, + dp1.Object.yRaOffset_SG_Sigma AS yRaOffset_SG_Sigma_raw, + dp1.Object.yDeclOffset_SG AS yDeclOffset_SG_raw, + dp1.Object.yDeclOffset_SG_Sigma AS yDeclOffset_SG_Sigma_raw, + dp1.Object.yRaDeclOffset_SG_Cov AS yRaDeclOffset_SG_Cov_raw, + dp1.Object.yLnL_PS AS yLnL_PS_raw, + dp1.Object.yLnL_SG AS yLnL_SG_raw, + dp1.Object.yFlux_PS AS yFlux_PS_raw, + dp1.Object.yFlux_PS_Sigma AS yFlux_PS_Sigma_raw, + dp1.Object.yFlux_ESG AS yFlux_ESG_raw, + dp1.Object.yFlux_ESG_Sigma AS yFlux_ESG_Sigma_raw, + dp1.Object.yFlux_Gaussian AS yFlux_Gaussian_raw, + dp1.Object.yFlux_Gaussian_Sigma AS yFlux_Gaussian_Sigma_raw, + dp1.Object.yTimescale AS yTimescale_raw, + dp1.Object.yEarliestObsTime AS yEarliestObsTime_raw, + dp1.Object.yLatestObsTime AS yLatestObsTime_raw, + dp1.Object.ySersicN_SG AS ySersicN_SG_raw, + dp1.Object.ySersicN_SG_Sigma AS ySersicN_SG_Sigma_raw, + dp1.Object.yE1_SG AS yE1_SG_raw, + dp1.Object.yE1_SG_Sigma AS yE1_SG_Sigma_raw, + dp1.Object.yE2_SG AS yE2_SG_raw, + dp1.Object.yE2_SG_Sigma AS yE2_SG_Sigma_raw, + dp1.Object.yRadius_SG AS yRadius_SG_raw, + dp1.Object.yRadius_SG_Sigma AS yRadius_SG_Sigma_raw, + dp1.Object.yFlags AS yFlags_raw, + dp1.Object.varBinaryField AS varBinaryField_raw, + dp1.Object.chunkId AS chunkId_raw, + dp1.Object.subChunkId AS subChunkId_raw, + (dp1.Object.qserv_trans_id + 0) AS qserv_trans_id_plus_0, + (dp1.Object.objectId + 1) AS objectId_plus_1, + (dp1.Object.iauId + 2) AS iauId_plus_2, + (dp1.Object.ra_PS + 3) AS ra_PS_plus_3, + (dp1.Object.ra_PS_Sigma + 4) AS ra_PS_Sigma_plus_4, + (dp1.Object.decl_PS + 5) AS decl_PS_plus_5, + (dp1.Object.decl_PS_Sigma + 6) AS decl_PS_Sigma_plus_6, + (dp1.Object.radecl_PS_Cov + 7) AS radecl_PS_Cov_plus_7, + (dp1.Object.htmId20 + 8) AS htmId20_plus_8, + (dp1.Object.ra_SG + 9) AS ra_SG_plus_9, + (dp1.Object.ra_SG_Sigma + 10) AS ra_SG_Sigma_plus_10, + (dp1.Object.decl_SG + 11) AS decl_SG_plus_11, + (dp1.Object.decl_SG_Sigma + 12) AS decl_SG_Sigma_plus_12, + (dp1.Object.radecl_SG_Cov + 13) AS radecl_SG_Cov_plus_13, + (dp1.Object.raRange + 14) AS raRange_plus_14, + (dp1.Object.declRange + 15) AS declRange_plus_15, + (dp1.Object.muRa_PS + 16) AS muRa_PS_plus_16, + (dp1.Object.muRa_PS_Sigma + 17) AS muRa_PS_Sigma_plus_17, + (dp1.Object.muDecl_PS + 18) AS muDecl_PS_plus_18, + (dp1.Object.muDecl_PS_Sigma + 0) AS muDecl_PS_Sigma_plus_19, + (dp1.Object.muRaDecl_PS_Cov + 1) AS muRaDecl_PS_Cov_plus_20, + (dp1.Object.parallax_PS + 2) AS parallax_PS_plus_21, + (dp1.Object.parallax_PS_Sigma + 3) AS parallax_PS_Sigma_plus_22, + (dp1.Object.canonicalFilterId + 4) AS canonicalFilterId_plus_23, + (dp1.Object.extendedness + 5) AS extendedness_plus_24, + (dp1.Object.varProb + 6) AS varProb_plus_25, + (dp1.Object.earliestObsTime + 7) AS earliestObsTime_plus_26, + (dp1.Object.latestObsTime + 8) AS latestObsTime_plus_27, + (dp1.Object.meanObsTime + 9) AS meanObsTime_plus_28, + (dp1.Object.flags + 10) AS flags_plus_29, + (dp1.Object.uNumObs + 11) AS uNumObs_plus_30, + (dp1.Object.uExtendedness + 12) AS uExtendedness_plus_31, + (dp1.Object.uVarProb + 13) AS uVarProb_plus_32, + (dp1.Object.uRaOffset_PS + 14) AS uRaOffset_PS_plus_33, + (dp1.Object.uRaOffset_PS_Sigma + 15) AS uRaOffset_PS_Sigma_plus_34, + (dp1.Object.uDeclOffset_PS + 16) AS uDeclOffset_PS_plus_35, + (dp1.Object.uDeclOffset_PS_Sigma + 17) AS uDeclOffset_PS_Sigma_plus_36, + (dp1.Object.uRaDeclOffset_PS_Cov + 18) AS uRaDeclOffset_PS_Cov_plus_37, + (dp1.Object.uRaOffset_SG + 0) AS uRaOffset_SG_plus_38, + (dp1.Object.uRaOffset_SG_Sigma + 1) AS uRaOffset_SG_Sigma_plus_39, + (dp1.Object.uDeclOffset_SG + 2) AS uDeclOffset_SG_plus_40, + (dp1.Object.uDeclOffset_SG_Sigma + 3) AS uDeclOffset_SG_Sigma_plus_41, + (dp1.Object.uRaDeclOffset_SG_Cov + 4) AS uRaDeclOffset_SG_Cov_plus_42, + (dp1.Object.uLnL_PS + 5) AS uLnL_PS_plus_43, + (dp1.Object.uLnL_SG + 6) AS uLnL_SG_plus_44, + (dp1.Object.uFlux_PS + 7) AS uFlux_PS_plus_45, + (dp1.Object.uFlux_PS_Sigma + 8) AS uFlux_PS_Sigma_plus_46, + (dp1.Object.uFlux_ESG + 9) AS uFlux_ESG_plus_47, + (dp1.Object.uFlux_ESG_Sigma + 10) AS uFlux_ESG_Sigma_plus_48, + (dp1.Object.uFlux_Gaussian + 11) AS uFlux_Gaussian_plus_49, + (dp1.Object.uFlux_Gaussian_Sigma + 12) AS uFlux_Gaussian_Sigma_plus_50, + (dp1.Object.uTimescale + 13) AS uTimescale_plus_51, + (dp1.Object.uEarliestObsTime + 14) AS uEarliestObsTime_plus_52, + (dp1.Object.uLatestObsTime + 15) AS uLatestObsTime_plus_53, + (dp1.Object.uSersicN_SG + 16) AS uSersicN_SG_plus_54, + (dp1.Object.uSersicN_SG_Sigma + 17) AS uSersicN_SG_Sigma_plus_55, + (dp1.Object.uE1_SG + 18) AS uE1_SG_plus_56, + (dp1.Object.uE1_SG_Sigma + 0) AS uE1_SG_Sigma_plus_57, + (dp1.Object.uE2_SG + 1) AS uE2_SG_plus_58, + (dp1.Object.uE2_SG_Sigma + 2) AS uE2_SG_Sigma_plus_59, + (dp1.Object.uRadius_SG + 3) AS uRadius_SG_plus_60, + (dp1.Object.uRadius_SG_Sigma + 4) AS uRadius_SG_Sigma_plus_61, + (dp1.Object.uFlags + 5) AS uFlags_plus_62, + (dp1.Object.gNumObs + 6) AS gNumObs_plus_63, + (dp1.Object.gExtendedness + 7) AS gExtendedness_plus_64, + (dp1.Object.gVarProb + 8) AS gVarProb_plus_65, + (dp1.Object.gRaOffset_PS + 9) AS gRaOffset_PS_plus_66, + (dp1.Object.gRaOffset_PS_Sigma + 10) AS gRaOffset_PS_Sigma_plus_67, + (dp1.Object.gDeclOffset_PS + 11) AS gDeclOffset_PS_plus_68, + (dp1.Object.gDeclOffset_PS_Sigma + 12) AS gDeclOffset_PS_Sigma_plus_69, + (dp1.Object.gRaDeclOffset_PS_Cov + 13) AS gRaDeclOffset_PS_Cov_plus_70, + (dp1.Object.gRaOffset_SG + 14) AS gRaOffset_SG_plus_71, + (dp1.Object.gRaOffset_SG_Sigma + 15) AS gRaOffset_SG_Sigma_plus_72, + (dp1.Object.gDeclOffset_SG + 16) AS gDeclOffset_SG_plus_73, + (dp1.Object.gDeclOffset_SG_Sigma + 17) AS gDeclOffset_SG_Sigma_plus_74, + (dp1.Object.gRaDeclOffset_SG_Cov + 18) AS gRaDeclOffset_SG_Cov_plus_75, + (dp1.Object.gLnL_PS + 0) AS gLnL_PS_plus_76, + (dp1.Object.gLnL_SG + 1) AS gLnL_SG_plus_77, + (dp1.Object.gFlux_PS + 2) AS gFlux_PS_plus_78, + (dp1.Object.gFlux_PS_Sigma + 3) AS gFlux_PS_Sigma_plus_79, + (dp1.Object.gFlux_ESG + 4) AS gFlux_ESG_plus_80, + (dp1.Object.gFlux_ESG_Sigma + 5) AS gFlux_ESG_Sigma_plus_81, + (dp1.Object.gFlux_Gaussian + 6) AS gFlux_Gaussian_plus_82, + (dp1.Object.gFlux_Gaussian_Sigma + 7) AS gFlux_Gaussian_Sigma_plus_83, + (dp1.Object.gTimescale + 8) AS gTimescale_plus_84, + (dp1.Object.gEarliestObsTime + 9) AS gEarliestObsTime_plus_85, + (dp1.Object.gLatestObsTime + 10) AS gLatestObsTime_plus_86, + (dp1.Object.gSersicN_SG + 11) AS gSersicN_SG_plus_87, + (dp1.Object.gSersicN_SG_Sigma + 12) AS gSersicN_SG_Sigma_plus_88, + (dp1.Object.gE1_SG + 13) AS gE1_SG_plus_89, + (dp1.Object.gE1_SG_Sigma + 14) AS gE1_SG_Sigma_plus_90, + (dp1.Object.gE2_SG + 15) AS gE2_SG_plus_91, + (dp1.Object.gE2_SG_Sigma + 16) AS gE2_SG_Sigma_plus_92, + (dp1.Object.gRadius_SG + 17) AS gRadius_SG_plus_93, + (dp1.Object.gRadius_SG_Sigma + 18) AS gRadius_SG_Sigma_plus_94, + (dp1.Object.gFlags + 0) AS gFlags_plus_95, + (dp1.Object.rNumObs + 1) AS rNumObs_plus_96, + (dp1.Object.rExtendedness + 2) AS rExtendedness_plus_97, + (dp1.Object.rVarProb + 3) AS rVarProb_plus_98, + (dp1.Object.rRaOffset_PS + 4) AS rRaOffset_PS_plus_99, + (dp1.Object.rRaOffset_PS_Sigma + 5) AS rRaOffset_PS_Sigma_plus_100, + (dp1.Object.rDeclOffset_PS + 6) AS rDeclOffset_PS_plus_101, + (dp1.Object.rDeclOffset_PS_Sigma + 7) AS rDeclOffset_PS_Sigma_plus_102, + (dp1.Object.rRaDeclOffset_PS_Cov + 8) AS rRaDeclOffset_PS_Cov_plus_103, + (dp1.Object.rRaOffset_SG + 9) AS rRaOffset_SG_plus_104, + (dp1.Object.rRaOffset_SG_Sigma + 10) AS rRaOffset_SG_Sigma_plus_105, + (dp1.Object.rDeclOffset_SG + 11) AS rDeclOffset_SG_plus_106, + (dp1.Object.rDeclOffset_SG_Sigma + 12) AS rDeclOffset_SG_Sigma_plus_107, + (dp1.Object.rRaDeclOffset_SG_Cov + 13) AS rRaDeclOffset_SG_Cov_plus_108, + (dp1.Object.rLnL_PS + 14) AS rLnL_PS_plus_109, + (dp1.Object.rLnL_SG + 15) AS rLnL_SG_plus_110, + (dp1.Object.rFlux_PS + 16) AS rFlux_PS_plus_111, + (dp1.Object.rFlux_PS_Sigma + 17) AS rFlux_PS_Sigma_plus_112, + (dp1.Object.rFlux_ESG + 18) AS rFlux_ESG_plus_113, + (dp1.Object.rFlux_ESG_Sigma + 0) AS rFlux_ESG_Sigma_plus_114, + (dp1.Object.rFlux_Gaussian + 1) AS rFlux_Gaussian_plus_115, + (dp1.Object.rFlux_Gaussian_Sigma + 2) AS rFlux_Gaussian_Sigma_plus_116, + (dp1.Object.rTimescale + 3) AS rTimescale_plus_117, + (dp1.Object.rEarliestObsTime + 4) AS rEarliestObsTime_plus_118, + (dp1.Object.rLatestObsTime + 5) AS rLatestObsTime_plus_119, + (dp1.Object.rSersicN_SG + 6) AS rSersicN_SG_plus_120, + (dp1.Object.rSersicN_SG_Sigma + 7) AS rSersicN_SG_Sigma_plus_121, + (dp1.Object.rE1_SG + 8) AS rE1_SG_plus_122, + (dp1.Object.rE1_SG_Sigma + 9) AS rE1_SG_Sigma_plus_123, + (dp1.Object.rE2_SG + 10) AS rE2_SG_plus_124, + (dp1.Object.rE2_SG_Sigma + 11) AS rE2_SG_Sigma_plus_125, + (dp1.Object.rRadius_SG + 12) AS rRadius_SG_plus_126, + (dp1.Object.rRadius_SG_Sigma + 13) AS rRadius_SG_Sigma_plus_127, + (dp1.Object.rFlags + 14) AS rFlags_plus_128, + (dp1.Object.iNumObs + 15) AS iNumObs_plus_129, + (dp1.Object.iExtendedness + 16) AS iExtendedness_plus_130, + (dp1.Object.iVarProb + 17) AS iVarProb_plus_131, + (dp1.Object.iRaOffset_PS + 18) AS iRaOffset_PS_plus_132, + (dp1.Object.iRaOffset_PS_Sigma + 0) AS iRaOffset_PS_Sigma_plus_133, + (dp1.Object.iDeclOffset_PS + 1) AS iDeclOffset_PS_plus_134, + (dp1.Object.iDeclOffset_PS_Sigma + 2) AS iDeclOffset_PS_Sigma_plus_135, + (dp1.Object.iRaDeclOffset_PS_Cov + 3) AS iRaDeclOffset_PS_Cov_plus_136, + (dp1.Object.iRaOffset_SG + 4) AS iRaOffset_SG_plus_137, + (dp1.Object.iRaOffset_SG_Sigma + 5) AS iRaOffset_SG_Sigma_plus_138, + (dp1.Object.iDeclOffset_SG + 6) AS iDeclOffset_SG_plus_139, + (dp1.Object.iDeclOffset_SG_Sigma + 7) AS iDeclOffset_SG_Sigma_plus_140, + (dp1.Object.iRaDeclOffset_SG_Cov + 8) AS iRaDeclOffset_SG_Cov_plus_141, + (dp1.Object.iLnL_PS + 9) AS iLnL_PS_plus_142, + (dp1.Object.iLnL_SG + 10) AS iLnL_SG_plus_143, + (dp1.Object.iFlux_PS + 11) AS iFlux_PS_plus_144, + (dp1.Object.iFlux_PS_Sigma + 12) AS iFlux_PS_Sigma_plus_145, + (dp1.Object.iFlux_ESG + 13) AS iFlux_ESG_plus_146, + (dp1.Object.iFlux_ESG_Sigma + 14) AS iFlux_ESG_Sigma_plus_147, + (dp1.Object.iFlux_Gaussian + 15) AS iFlux_Gaussian_plus_148, + (dp1.Object.iFlux_Gaussian_Sigma + 16) AS iFlux_Gaussian_Sigma_plus_149, + (dp1.Object.iTimescale + 17) AS iTimescale_plus_150, + (dp1.Object.iEarliestObsTime + 18) AS iEarliestObsTime_plus_151, + (dp1.Object.iLatestObsTime + 0) AS iLatestObsTime_plus_152, + (dp1.Object.iSersicN_SG + 1) AS iSersicN_SG_plus_153, + (dp1.Object.iSersicN_SG_Sigma + 2) AS iSersicN_SG_Sigma_plus_154, + (dp1.Object.iE1_SG + 3) AS iE1_SG_plus_155, + (dp1.Object.iE1_SG_Sigma + 4) AS iE1_SG_Sigma_plus_156, + (dp1.Object.iE2_SG + 5) AS iE2_SG_plus_157, + (dp1.Object.iE2_SG_Sigma + 6) AS iE2_SG_Sigma_plus_158, + (dp1.Object.iRadius_SG + 7) AS iRadius_SG_plus_159, + (dp1.Object.iRadius_SG_Sigma + 8) AS iRadius_SG_Sigma_plus_160, + (dp1.Object.iFlags + 9) AS iFlags_plus_161, + (dp1.Object.zNumObs + 10) AS zNumObs_plus_162, + (dp1.Object.zExtendedness + 11) AS zExtendedness_plus_163, + (dp1.Object.zVarProb + 12) AS zVarProb_plus_164, + (dp1.Object.zRaOffset_PS + 13) AS zRaOffset_PS_plus_165, + (dp1.Object.zRaOffset_PS_Sigma + 14) AS zRaOffset_PS_Sigma_plus_166, + (dp1.Object.zDeclOffset_PS + 15) AS zDeclOffset_PS_plus_167, + (dp1.Object.zDeclOffset_PS_Sigma + 16) AS zDeclOffset_PS_Sigma_plus_168, + (dp1.Object.zRaDeclOffset_PS_Cov + 17) AS zRaDeclOffset_PS_Cov_plus_169, + (dp1.Object.zRaOffset_SG + 18) AS zRaOffset_SG_plus_170, + (dp1.Object.zRaOffset_SG_Sigma + 0) AS zRaOffset_SG_Sigma_plus_171, + (dp1.Object.zDeclOffset_SG + 1) AS zDeclOffset_SG_plus_172, + (dp1.Object.zDeclOffset_SG_Sigma + 2) AS zDeclOffset_SG_Sigma_plus_173, + (dp1.Object.zRaDeclOffset_SG_Cov + 3) AS zRaDeclOffset_SG_Cov_plus_174, + (dp1.Object.zLnL_PS + 4) AS zLnL_PS_plus_175, + (dp1.Object.zLnL_SG + 5) AS zLnL_SG_plus_176, + (dp1.Object.zFlux_PS + 6) AS zFlux_PS_plus_177, + (dp1.Object.zFlux_PS_Sigma + 7) AS zFlux_PS_Sigma_plus_178, + (dp1.Object.zFlux_ESG + 8) AS zFlux_ESG_plus_179, + (dp1.Object.zFlux_ESG_Sigma + 9) AS zFlux_ESG_Sigma_plus_180, + (dp1.Object.zFlux_Gaussian + 10) AS zFlux_Gaussian_plus_181, + (dp1.Object.zFlux_Gaussian_Sigma + 11) AS zFlux_Gaussian_Sigma_plus_182, + (dp1.Object.zTimescale + 12) AS zTimescale_plus_183, + (dp1.Object.zEarliestObsTime + 13) AS zEarliestObsTime_plus_184, + (dp1.Object.zLatestObsTime + 14) AS zLatestObsTime_plus_185, + (dp1.Object.zSersicN_SG + 15) AS zSersicN_SG_plus_186, + (dp1.Object.zSersicN_SG_Sigma + 16) AS zSersicN_SG_Sigma_plus_187, + (dp1.Object.zE1_SG + 17) AS zE1_SG_plus_188, + (dp1.Object.zE1_SG_Sigma + 18) AS zE1_SG_Sigma_plus_189, + (dp1.Object.zE2_SG + 0) AS zE2_SG_plus_190, + (dp1.Object.zE2_SG_Sigma + 1) AS zE2_SG_Sigma_plus_191, + (dp1.Object.zRadius_SG + 2) AS zRadius_SG_plus_192, + (dp1.Object.zRadius_SG_Sigma + 3) AS zRadius_SG_Sigma_plus_193, + (dp1.Object.zFlags + 4) AS zFlags_plus_194, + (dp1.Object.yNumObs + 5) AS yNumObs_plus_195, + (dp1.Object.yExtendedness + 6) AS yExtendedness_plus_196, + (dp1.Object.yVarProb + 7) AS yVarProb_plus_197, + (dp1.Object.yRaOffset_PS + 8) AS yRaOffset_PS_plus_198, + (dp1.Object.yRaOffset_PS_Sigma + 9) AS yRaOffset_PS_Sigma_plus_199, + (dp1.Object.yDeclOffset_PS + 10) AS yDeclOffset_PS_plus_200, + (dp1.Object.yDeclOffset_PS_Sigma + 11) AS yDeclOffset_PS_Sigma_plus_201, + (dp1.Object.yRaDeclOffset_PS_Cov + 12) AS yRaDeclOffset_PS_Cov_plus_202, + (dp1.Object.yRaOffset_SG + 13) AS yRaOffset_SG_plus_203, + (dp1.Object.yRaOffset_SG_Sigma + 14) AS yRaOffset_SG_Sigma_plus_204, + (dp1.Object.yDeclOffset_SG + 15) AS yDeclOffset_SG_plus_205, + (dp1.Object.yDeclOffset_SG_Sigma + 16) AS yDeclOffset_SG_Sigma_plus_206, + (dp1.Object.yRaDeclOffset_SG_Cov + 17) AS yRaDeclOffset_SG_Cov_plus_207, + (dp1.Object.yLnL_PS + 18) AS yLnL_PS_plus_208, + (dp1.Object.yLnL_SG + 0) AS yLnL_SG_plus_209, + (dp1.Object.yFlux_PS + 1) AS yFlux_PS_plus_210, + (dp1.Object.yFlux_PS_Sigma + 2) AS yFlux_PS_Sigma_plus_211, + (dp1.Object.yFlux_ESG + 3) AS yFlux_ESG_plus_212, + (dp1.Object.yFlux_ESG_Sigma + 4) AS yFlux_ESG_Sigma_plus_213, + (dp1.Object.yFlux_Gaussian + 5) AS yFlux_Gaussian_plus_214, + (dp1.Object.yFlux_Gaussian_Sigma + 6) AS yFlux_Gaussian_Sigma_plus_215, + (dp1.Object.yTimescale + 7) AS yTimescale_plus_216, + (dp1.Object.yEarliestObsTime + 8) AS yEarliestObsTime_plus_217, + (dp1.Object.yLatestObsTime + 9) AS yLatestObsTime_plus_218, + (dp1.Object.ySersicN_SG + 10) AS ySersicN_SG_plus_219, + (dp1.Object.ySersicN_SG_Sigma + 11) AS ySersicN_SG_Sigma_plus_220, + (dp1.Object.yE1_SG + 12) AS yE1_SG_plus_221, + (dp1.Object.yE1_SG_Sigma + 13) AS yE1_SG_Sigma_plus_222, + (dp1.Object.yE2_SG + 14) AS yE2_SG_plus_223, + (dp1.Object.yE2_SG_Sigma + 15) AS yE2_SG_Sigma_plus_224, + (dp1.Object.yRadius_SG + 16) AS yRadius_SG_plus_225, + (dp1.Object.yRadius_SG_Sigma + 17) AS yRadius_SG_Sigma_plus_226, + (dp1.Object.yFlags + 18) AS yFlags_plus_227, + (dp1.Object.varBinaryField + 0) AS varBinaryField_plus_228, + (dp1.Object.chunkId + 1) AS chunkId_plus_229, + (dp1.Object.subChunkId + 2) AS subChunkId_plus_230, + (dp1.Object.qserv_trans_id - 0) AS qserv_trans_id_minus_0, + (dp1.Object.objectId - 1) AS objectId_minus_1, + (dp1.Object.iauId - 2) AS iauId_minus_2, + (dp1.Object.ra_PS - 3) AS ra_PS_minus_3, + (dp1.Object.ra_PS_Sigma - 4) AS ra_PS_Sigma_minus_4, + (dp1.Object.decl_PS - 5) AS decl_PS_minus_5, + (dp1.Object.decl_PS_Sigma - 6) AS decl_PS_Sigma_minus_6, + (dp1.Object.radecl_PS_Cov - 7) AS radecl_PS_Cov_minus_7, + (dp1.Object.htmId20 - 8) AS htmId20_minus_8, + (dp1.Object.ra_SG - 9) AS ra_SG_minus_9, + (dp1.Object.ra_SG_Sigma - 10) AS ra_SG_Sigma_minus_10, + (dp1.Object.decl_SG - 11) AS decl_SG_minus_11, + (dp1.Object.decl_SG_Sigma - 12) AS decl_SG_Sigma_minus_12, + (dp1.Object.radecl_SG_Cov - 13) AS radecl_SG_Cov_minus_13, + (dp1.Object.raRange - 14) AS raRange_minus_14, + (dp1.Object.declRange - 15) AS declRange_minus_15, + (dp1.Object.muRa_PS - 16) AS muRa_PS_minus_16, + (dp1.Object.muRa_PS_Sigma - 17) AS muRa_PS_Sigma_minus_17, + (dp1.Object.muDecl_PS - 18) AS muDecl_PS_minus_18, + (dp1.Object.muDecl_PS_Sigma - 19) AS muDecl_PS_Sigma_minus_19, + (dp1.Object.muRaDecl_PS_Cov - 20) AS muRaDecl_PS_Cov_minus_20, + (dp1.Object.parallax_PS - 21) AS parallax_PS_minus_21, + (dp1.Object.parallax_PS_Sigma - 22) AS parallax_PS_Sigma_minus_22, + (dp1.Object.canonicalFilterId - 0) AS canonicalFilterId_minus_23, + (dp1.Object.extendedness - 1) AS extendedness_minus_24, + (dp1.Object.varProb - 2) AS varProb_minus_25, + (dp1.Object.earliestObsTime - 3) AS earliestObsTime_minus_26, + (dp1.Object.latestObsTime - 4) AS latestObsTime_minus_27, + (dp1.Object.meanObsTime - 5) AS meanObsTime_minus_28, + (dp1.Object.flags - 6) AS flags_minus_29, + (dp1.Object.uNumObs - 7) AS uNumObs_minus_30, + (dp1.Object.uExtendedness - 8) AS uExtendedness_minus_31, + (dp1.Object.uVarProb - 9) AS uVarProb_minus_32, + (dp1.Object.uRaOffset_PS - 10) AS uRaOffset_PS_minus_33, + (dp1.Object.uRaOffset_PS_Sigma - 11) AS uRaOffset_PS_Sigma_minus_34, + (dp1.Object.uDeclOffset_PS - 12) AS uDeclOffset_PS_minus_35, + (dp1.Object.uDeclOffset_PS_Sigma - 13) AS uDeclOffset_PS_Sigma_minus_36, + (dp1.Object.uRaDeclOffset_PS_Cov - 14) AS uRaDeclOffset_PS_Cov_minus_37, + (dp1.Object.uRaOffset_SG - 15) AS uRaOffset_SG_minus_38, + (dp1.Object.uRaOffset_SG_Sigma - 16) AS uRaOffset_SG_Sigma_minus_39, + (dp1.Object.uDeclOffset_SG - 17) AS uDeclOffset_SG_minus_40, + (dp1.Object.uDeclOffset_SG_Sigma - 18) AS uDeclOffset_SG_Sigma_minus_41, + (dp1.Object.uRaDeclOffset_SG_Cov - 19) AS uRaDeclOffset_SG_Cov_minus_42, + (dp1.Object.uLnL_PS - 20) AS uLnL_PS_minus_43, + (dp1.Object.uLnL_SG - 21) AS uLnL_SG_minus_44, + (dp1.Object.uFlux_PS - 22) AS uFlux_PS_minus_45, + (dp1.Object.uFlux_PS_Sigma - 0) AS uFlux_PS_Sigma_minus_46, + (dp1.Object.uFlux_ESG - 1) AS uFlux_ESG_minus_47, + (dp1.Object.uFlux_ESG_Sigma - 2) AS uFlux_ESG_Sigma_minus_48, + (dp1.Object.uFlux_Gaussian - 3) AS uFlux_Gaussian_minus_49, + (dp1.Object.uFlux_Gaussian_Sigma - 4) AS uFlux_Gaussian_Sigma_minus_50, + (dp1.Object.uTimescale - 5) AS uTimescale_minus_51, + (dp1.Object.uEarliestObsTime - 6) AS uEarliestObsTime_minus_52, + (dp1.Object.uLatestObsTime - 7) AS uLatestObsTime_minus_53, + (dp1.Object.uSersicN_SG - 8) AS uSersicN_SG_minus_54, + (dp1.Object.uSersicN_SG_Sigma - 9) AS uSersicN_SG_Sigma_minus_55, + (dp1.Object.uE1_SG - 10) AS uE1_SG_minus_56, + (dp1.Object.uE1_SG_Sigma - 11) AS uE1_SG_Sigma_minus_57, + (dp1.Object.uE2_SG - 12) AS uE2_SG_minus_58, + (dp1.Object.uE2_SG_Sigma - 13) AS uE2_SG_Sigma_minus_59, + (dp1.Object.uRadius_SG - 14) AS uRadius_SG_minus_60, + (dp1.Object.uRadius_SG_Sigma - 15) AS uRadius_SG_Sigma_minus_61, + (dp1.Object.uFlags - 16) AS uFlags_minus_62, + (dp1.Object.gNumObs - 17) AS gNumObs_minus_63, + (dp1.Object.gExtendedness - 18) AS gExtendedness_minus_64, + (dp1.Object.gVarProb - 19) AS gVarProb_minus_65, + (dp1.Object.gRaOffset_PS - 20) AS gRaOffset_PS_minus_66, + (dp1.Object.gRaOffset_PS_Sigma - 21) AS gRaOffset_PS_Sigma_minus_67, + (dp1.Object.gDeclOffset_PS - 22) AS gDeclOffset_PS_minus_68, + (dp1.Object.gDeclOffset_PS_Sigma - 0) AS gDeclOffset_PS_Sigma_minus_69, + (dp1.Object.gRaDeclOffset_PS_Cov - 1) AS gRaDeclOffset_PS_Cov_minus_70, + (dp1.Object.gRaOffset_SG - 2) AS gRaOffset_SG_minus_71, + (dp1.Object.gRaOffset_SG_Sigma - 3) AS gRaOffset_SG_Sigma_minus_72, + (dp1.Object.gDeclOffset_SG - 4) AS gDeclOffset_SG_minus_73, + (dp1.Object.gDeclOffset_SG_Sigma - 5) AS gDeclOffset_SG_Sigma_minus_74, + (dp1.Object.gRaDeclOffset_SG_Cov - 6) AS gRaDeclOffset_SG_Cov_minus_75, + (dp1.Object.gLnL_PS - 7) AS gLnL_PS_minus_76, + (dp1.Object.gLnL_SG - 8) AS gLnL_SG_minus_77, + (dp1.Object.gFlux_PS - 9) AS gFlux_PS_minus_78, + (dp1.Object.gFlux_PS_Sigma - 10) AS gFlux_PS_Sigma_minus_79, + (dp1.Object.gFlux_ESG - 11) AS gFlux_ESG_minus_80, + (dp1.Object.gFlux_ESG_Sigma - 12) AS gFlux_ESG_Sigma_minus_81, + (dp1.Object.gFlux_Gaussian - 13) AS gFlux_Gaussian_minus_82, + (dp1.Object.gFlux_Gaussian_Sigma - 14) AS gFlux_Gaussian_Sigma_minus_83, + (dp1.Object.gTimescale - 15) AS gTimescale_minus_84, + (dp1.Object.gEarliestObsTime - 16) AS gEarliestObsTime_minus_85, + (dp1.Object.gLatestObsTime - 17) AS gLatestObsTime_minus_86, + (dp1.Object.gSersicN_SG - 18) AS gSersicN_SG_minus_87, + (dp1.Object.gSersicN_SG_Sigma - 19) AS gSersicN_SG_Sigma_minus_88, + (dp1.Object.gE1_SG - 20) AS gE1_SG_minus_89, + (dp1.Object.gE1_SG_Sigma - 21) AS gE1_SG_Sigma_minus_90, + (dp1.Object.gE2_SG - 22) AS gE2_SG_minus_91, + (dp1.Object.gE2_SG_Sigma - 0) AS gE2_SG_Sigma_minus_92, + (dp1.Object.gRadius_SG - 1) AS gRadius_SG_minus_93, + (dp1.Object.gRadius_SG_Sigma - 2) AS gRadius_SG_Sigma_minus_94, + (dp1.Object.gFlags - 3) AS gFlags_minus_95, + (dp1.Object.rNumObs - 4) AS rNumObs_minus_96, + (dp1.Object.rExtendedness - 5) AS rExtendedness_minus_97, + (dp1.Object.rVarProb - 6) AS rVarProb_minus_98, + (dp1.Object.rRaOffset_PS - 7) AS rRaOffset_PS_minus_99, + (dp1.Object.rRaOffset_PS_Sigma - 8) AS rRaOffset_PS_Sigma_minus_100, + (dp1.Object.rDeclOffset_PS - 9) AS rDeclOffset_PS_minus_101, + (dp1.Object.rDeclOffset_PS_Sigma - 10) AS rDeclOffset_PS_Sigma_minus_102, + (dp1.Object.rRaDeclOffset_PS_Cov - 11) AS rRaDeclOffset_PS_Cov_minus_103, + (dp1.Object.rRaOffset_SG - 12) AS rRaOffset_SG_minus_104, + (dp1.Object.rRaOffset_SG_Sigma - 13) AS rRaOffset_SG_Sigma_minus_105, + (dp1.Object.rDeclOffset_SG - 14) AS rDeclOffset_SG_minus_106, + (dp1.Object.rDeclOffset_SG_Sigma - 15) AS rDeclOffset_SG_Sigma_minus_107, + (dp1.Object.rRaDeclOffset_SG_Cov - 16) AS rRaDeclOffset_SG_Cov_minus_108, + (dp1.Object.rLnL_PS - 17) AS rLnL_PS_minus_109, + (dp1.Object.rLnL_SG - 18) AS rLnL_SG_minus_110, + (dp1.Object.rFlux_PS - 19) AS rFlux_PS_minus_111, + (dp1.Object.rFlux_PS_Sigma - 20) AS rFlux_PS_Sigma_minus_112, + (dp1.Object.rFlux_ESG - 21) AS rFlux_ESG_minus_113, + (dp1.Object.rFlux_ESG_Sigma - 22) AS rFlux_ESG_Sigma_minus_114, + (dp1.Object.rFlux_Gaussian - 0) AS rFlux_Gaussian_minus_115, + (dp1.Object.rFlux_Gaussian_Sigma - 1) AS rFlux_Gaussian_Sigma_minus_116, + (dp1.Object.rTimescale - 2) AS rTimescale_minus_117, + (dp1.Object.rEarliestObsTime - 3) AS rEarliestObsTime_minus_118, + (dp1.Object.rLatestObsTime - 4) AS rLatestObsTime_minus_119, + (dp1.Object.rSersicN_SG - 5) AS rSersicN_SG_minus_120, + (dp1.Object.rSersicN_SG_Sigma - 6) AS rSersicN_SG_Sigma_minus_121, + (dp1.Object.rE1_SG - 7) AS rE1_SG_minus_122, + (dp1.Object.rE1_SG_Sigma - 8) AS rE1_SG_Sigma_minus_123, + (dp1.Object.rE2_SG - 9) AS rE2_SG_minus_124, + (dp1.Object.rE2_SG_Sigma - 10) AS rE2_SG_Sigma_minus_125, + (dp1.Object.rRadius_SG - 11) AS rRadius_SG_minus_126, + (dp1.Object.rRadius_SG_Sigma - 12) AS rRadius_SG_Sigma_minus_127, + (dp1.Object.rFlags - 13) AS rFlags_minus_128, + (dp1.Object.iNumObs - 14) AS iNumObs_minus_129, + (dp1.Object.iExtendedness - 15) AS iExtendedness_minus_130, + (dp1.Object.iVarProb - 16) AS iVarProb_minus_131, + (dp1.Object.iRaOffset_PS - 17) AS iRaOffset_PS_minus_132, + (dp1.Object.iRaOffset_PS_Sigma - 18) AS iRaOffset_PS_Sigma_minus_133, + (dp1.Object.iDeclOffset_PS - 19) AS iDeclOffset_PS_minus_134, + (dp1.Object.iDeclOffset_PS_Sigma - 20) AS iDeclOffset_PS_Sigma_minus_135, + (dp1.Object.iRaDeclOffset_PS_Cov - 21) AS iRaDeclOffset_PS_Cov_minus_136, + (dp1.Object.iRaOffset_SG - 22) AS iRaOffset_SG_minus_137, + (dp1.Object.iRaOffset_SG_Sigma - 0) AS iRaOffset_SG_Sigma_minus_138, + (dp1.Object.iDeclOffset_SG - 1) AS iDeclOffset_SG_minus_139, + (dp1.Object.iDeclOffset_SG_Sigma - 2) AS iDeclOffset_SG_Sigma_minus_140, + (dp1.Object.iRaDeclOffset_SG_Cov - 3) AS iRaDeclOffset_SG_Cov_minus_141, + (dp1.Object.iLnL_PS - 4) AS iLnL_PS_minus_142, + (dp1.Object.iLnL_SG - 5) AS iLnL_SG_minus_143, + (dp1.Object.iFlux_PS - 6) AS iFlux_PS_minus_144, + (dp1.Object.iFlux_PS_Sigma - 7) AS iFlux_PS_Sigma_minus_145, + (dp1.Object.iFlux_ESG - 8) AS iFlux_ESG_minus_146, + (dp1.Object.iFlux_ESG_Sigma - 9) AS iFlux_ESG_Sigma_minus_147, + (dp1.Object.iFlux_Gaussian - 10) AS iFlux_Gaussian_minus_148, + (dp1.Object.iFlux_Gaussian_Sigma - 11) AS iFlux_Gaussian_Sigma_minus_149, + (dp1.Object.iTimescale - 12) AS iTimescale_minus_150, + (dp1.Object.iEarliestObsTime - 13) AS iEarliestObsTime_minus_151, + (dp1.Object.iLatestObsTime - 14) AS iLatestObsTime_minus_152, + (dp1.Object.iSersicN_SG - 15) AS iSersicN_SG_minus_153, + (dp1.Object.iSersicN_SG_Sigma - 16) AS iSersicN_SG_Sigma_minus_154, + (dp1.Object.iE1_SG - 17) AS iE1_SG_minus_155, + (dp1.Object.iE1_SG_Sigma - 18) AS iE1_SG_Sigma_minus_156, + (dp1.Object.iE2_SG - 19) AS iE2_SG_minus_157, + (dp1.Object.iE2_SG_Sigma - 20) AS iE2_SG_Sigma_minus_158, + (dp1.Object.iRadius_SG - 21) AS iRadius_SG_minus_159, + (dp1.Object.iRadius_SG_Sigma - 22) AS iRadius_SG_Sigma_minus_160, + (dp1.Object.iFlags - 0) AS iFlags_minus_161, + (dp1.Object.zNumObs - 1) AS zNumObs_minus_162, + (dp1.Object.zExtendedness - 2) AS zExtendedness_minus_163, + (dp1.Object.zVarProb - 3) AS zVarProb_minus_164, + (dp1.Object.zRaOffset_PS - 4) AS zRaOffset_PS_minus_165, + (dp1.Object.zRaOffset_PS_Sigma - 5) AS zRaOffset_PS_Sigma_minus_166, + (dp1.Object.zDeclOffset_PS - 6) AS zDeclOffset_PS_minus_167, + (dp1.Object.zDeclOffset_PS_Sigma - 7) AS zDeclOffset_PS_Sigma_minus_168, + (dp1.Object.zRaDeclOffset_PS_Cov - 8) AS zRaDeclOffset_PS_Cov_minus_169, + (dp1.Object.zRaOffset_SG - 9) AS zRaOffset_SG_minus_170, + (dp1.Object.zRaOffset_SG_Sigma - 10) AS zRaOffset_SG_Sigma_minus_171, + (dp1.Object.zDeclOffset_SG - 11) AS zDeclOffset_SG_minus_172, + (dp1.Object.zDeclOffset_SG_Sigma - 12) AS zDeclOffset_SG_Sigma_minus_173, + (dp1.Object.zRaDeclOffset_SG_Cov - 13) AS zRaDeclOffset_SG_Cov_minus_174, + (dp1.Object.zLnL_PS - 14) AS zLnL_PS_minus_175, + (dp1.Object.zLnL_SG - 15) AS zLnL_SG_minus_176, + (dp1.Object.zFlux_PS - 16) AS zFlux_PS_minus_177, + (dp1.Object.zFlux_PS_Sigma - 17) AS zFlux_PS_Sigma_minus_178, + (dp1.Object.zFlux_ESG - 18) AS zFlux_ESG_minus_179, + (dp1.Object.zFlux_ESG_Sigma - 19) AS zFlux_ESG_Sigma_minus_180, + (dp1.Object.zFlux_Gaussian - 20) AS zFlux_Gaussian_minus_181, + (dp1.Object.zFlux_Gaussian_Sigma - 21) AS zFlux_Gaussian_Sigma_minus_182, + (dp1.Object.zTimescale - 22) AS zTimescale_minus_183, + (dp1.Object.zEarliestObsTime - 0) AS zEarliestObsTime_minus_184, + (dp1.Object.zLatestObsTime - 1) AS zLatestObsTime_minus_185, + (dp1.Object.zSersicN_SG - 2) AS zSersicN_SG_minus_186, + (dp1.Object.zSersicN_SG_Sigma - 3) AS zSersicN_SG_Sigma_minus_187, + (dp1.Object.zE1_SG - 4) AS zE1_SG_minus_188, + (dp1.Object.zE1_SG_Sigma - 5) AS zE1_SG_Sigma_minus_189, + (dp1.Object.zE2_SG - 6) AS zE2_SG_minus_190, + (dp1.Object.zE2_SG_Sigma - 7) AS zE2_SG_Sigma_minus_191, + (dp1.Object.zRadius_SG - 8) AS zRadius_SG_minus_192, + (dp1.Object.zRadius_SG_Sigma - 9) AS zRadius_SG_Sigma_minus_193, + (dp1.Object.zFlags - 10) AS zFlags_minus_194, + (dp1.Object.yNumObs - 11) AS yNumObs_minus_195, + (dp1.Object.yExtendedness - 12) AS yExtendedness_minus_196, + (dp1.Object.yVarProb - 13) AS yVarProb_minus_197, + (dp1.Object.yRaOffset_PS - 14) AS yRaOffset_PS_minus_198, + (dp1.Object.yRaOffset_PS_Sigma - 15) AS yRaOffset_PS_Sigma_minus_199, + (dp1.Object.yDeclOffset_PS - 16) AS yDeclOffset_PS_minus_200, + (dp1.Object.yDeclOffset_PS_Sigma - 17) AS yDeclOffset_PS_Sigma_minus_201, + (dp1.Object.yRaDeclOffset_PS_Cov - 18) AS yRaDeclOffset_PS_Cov_minus_202, + (dp1.Object.yRaOffset_SG - 19) AS yRaOffset_SG_minus_203, + (dp1.Object.yRaOffset_SG_Sigma - 20) AS yRaOffset_SG_Sigma_minus_204, + (dp1.Object.yDeclOffset_SG - 21) AS yDeclOffset_SG_minus_205, + (dp1.Object.yDeclOffset_SG_Sigma - 22) AS yDeclOffset_SG_Sigma_minus_206, + (dp1.Object.yRaDeclOffset_SG_Cov - 0) AS yRaDeclOffset_SG_Cov_minus_207, + (dp1.Object.yLnL_PS - 1) AS yLnL_PS_minus_208, + (dp1.Object.yLnL_SG - 2) AS yLnL_SG_minus_209, + (dp1.Object.yFlux_PS - 3) AS yFlux_PS_minus_210, + (dp1.Object.yFlux_PS_Sigma - 4) AS yFlux_PS_Sigma_minus_211, + (dp1.Object.yFlux_ESG - 5) AS yFlux_ESG_minus_212, + (dp1.Object.yFlux_ESG_Sigma - 6) AS yFlux_ESG_Sigma_minus_213, + (dp1.Object.yFlux_Gaussian - 7) AS yFlux_Gaussian_minus_214, + (dp1.Object.yFlux_Gaussian_Sigma - 8) AS yFlux_Gaussian_Sigma_minus_215, + (dp1.Object.yTimescale - 9) AS yTimescale_minus_216, + (dp1.Object.yEarliestObsTime - 10) AS yEarliestObsTime_minus_217, + (dp1.Object.yLatestObsTime - 11) AS yLatestObsTime_minus_218, + (dp1.Object.ySersicN_SG - 12) AS ySersicN_SG_minus_219, + (dp1.Object.ySersicN_SG_Sigma - 13) AS ySersicN_SG_Sigma_minus_220, + (dp1.Object.yE1_SG - 14) AS yE1_SG_minus_221, + (dp1.Object.yE1_SG_Sigma - 15) AS yE1_SG_Sigma_minus_222, + (dp1.Object.yE2_SG - 16) AS yE2_SG_minus_223, + (dp1.Object.yE2_SG_Sigma - 17) AS yE2_SG_Sigma_minus_224, + (dp1.Object.yRadius_SG - 18) AS yRadius_SG_minus_225, + (dp1.Object.yRadius_SG_Sigma - 19) AS yRadius_SG_Sigma_minus_226, + (dp1.Object.yFlags - 20) AS yFlags_minus_227, + (dp1.Object.varBinaryField - 21) AS varBinaryField_minus_228, + (dp1.Object.chunkId - 22) AS chunkId_minus_229, + (dp1.Object.subChunkId - 0) AS subChunkId_minus_230, + (dp1.Object.qserv_trans_id * 1) AS qserv_trans_id_scale_0, + (dp1.Object.objectId * 2) AS objectId_scale_1, + (dp1.Object.iauId * 3) AS iauId_scale_2, + (dp1.Object.ra_PS * 4) AS ra_PS_scale_3, + (dp1.Object.ra_PS_Sigma * 5) AS ra_PS_Sigma_scale_4, + (dp1.Object.decl_PS * 6) AS decl_PS_scale_5, + (dp1.Object.decl_PS_Sigma * 7) AS decl_PS_Sigma_scale_6, + (dp1.Object.radecl_PS_Cov * 1) AS radecl_PS_Cov_scale_7, + (dp1.Object.htmId20 * 2) AS htmId20_scale_8, + (dp1.Object.ra_SG * 3) AS ra_SG_scale_9, + (dp1.Object.ra_SG_Sigma * 4) AS ra_SG_Sigma_scale_10, + (dp1.Object.decl_SG * 5) AS decl_SG_scale_11, + (dp1.Object.decl_SG_Sigma * 6) AS decl_SG_Sigma_scale_12, + (dp1.Object.radecl_SG_Cov * 7) AS radecl_SG_Cov_scale_13, + (dp1.Object.raRange * 1) AS raRange_scale_14, + (dp1.Object.declRange * 2) AS declRange_scale_15, + (dp1.Object.muRa_PS * 3) AS muRa_PS_scale_16, + (dp1.Object.muRa_PS_Sigma * 4) AS muRa_PS_Sigma_scale_17, + (dp1.Object.muDecl_PS * 5) AS muDecl_PS_scale_18, + (dp1.Object.muDecl_PS_Sigma * 6) AS muDecl_PS_Sigma_scale_19, + (dp1.Object.muRaDecl_PS_Cov * 7) AS muRaDecl_PS_Cov_scale_20, + (dp1.Object.parallax_PS * 1) AS parallax_PS_scale_21, + (dp1.Object.parallax_PS_Sigma * 2) AS parallax_PS_Sigma_scale_22, + (dp1.Object.canonicalFilterId * 3) AS canonicalFilterId_scale_23, + (dp1.Object.extendedness * 4) AS extendedness_scale_24, + (dp1.Object.varProb * 5) AS varProb_scale_25, + (dp1.Object.earliestObsTime * 6) AS earliestObsTime_scale_26, + (dp1.Object.latestObsTime * 7) AS latestObsTime_scale_27, + (dp1.Object.meanObsTime * 1) AS meanObsTime_scale_28, + (dp1.Object.flags * 2) AS flags_scale_29, + (dp1.Object.uNumObs * 3) AS uNumObs_scale_30, + (dp1.Object.uExtendedness * 4) AS uExtendedness_scale_31, + (dp1.Object.uVarProb * 5) AS uVarProb_scale_32, + (dp1.Object.uRaOffset_PS * 6) AS uRaOffset_PS_scale_33, + (dp1.Object.uRaOffset_PS_Sigma * 7) AS uRaOffset_PS_Sigma_scale_34, + (dp1.Object.uDeclOffset_PS * 1) AS uDeclOffset_PS_scale_35, + (dp1.Object.uDeclOffset_PS_Sigma * 2) AS uDeclOffset_PS_Sigma_scale_36, + (dp1.Object.uRaDeclOffset_PS_Cov * 3) AS uRaDeclOffset_PS_Cov_scale_37, + (dp1.Object.uRaOffset_SG * 4) AS uRaOffset_SG_scale_38, + (dp1.Object.uRaOffset_SG_Sigma * 5) AS uRaOffset_SG_Sigma_scale_39, + (dp1.Object.uDeclOffset_SG * 6) AS uDeclOffset_SG_scale_40, + (dp1.Object.uDeclOffset_SG_Sigma * 7) AS uDeclOffset_SG_Sigma_scale_41, + (dp1.Object.uRaDeclOffset_SG_Cov * 1) AS uRaDeclOffset_SG_Cov_scale_42, + (dp1.Object.uLnL_PS * 2) AS uLnL_PS_scale_43, + (dp1.Object.uLnL_SG * 3) AS uLnL_SG_scale_44, + (dp1.Object.uFlux_PS * 4) AS uFlux_PS_scale_45, + (dp1.Object.uFlux_PS_Sigma * 5) AS uFlux_PS_Sigma_scale_46, + (dp1.Object.uFlux_ESG * 6) AS uFlux_ESG_scale_47, + (dp1.Object.uFlux_ESG_Sigma * 7) AS uFlux_ESG_Sigma_scale_48, + (dp1.Object.uFlux_Gaussian * 1) AS uFlux_Gaussian_scale_49, + (dp1.Object.uFlux_Gaussian_Sigma * 2) AS uFlux_Gaussian_Sigma_scale_50, + (dp1.Object.uTimescale * 3) AS uTimescale_scale_51, + (dp1.Object.uEarliestObsTime * 4) AS uEarliestObsTime_scale_52, + (dp1.Object.uLatestObsTime * 5) AS uLatestObsTime_scale_53, + (dp1.Object.uSersicN_SG * 6) AS uSersicN_SG_scale_54, + (dp1.Object.uSersicN_SG_Sigma * 7) AS uSersicN_SG_Sigma_scale_55, + (dp1.Object.uE1_SG * 1) AS uE1_SG_scale_56, + (dp1.Object.uE1_SG_Sigma * 2) AS uE1_SG_Sigma_scale_57, + (dp1.Object.uE2_SG * 3) AS uE2_SG_scale_58, + (dp1.Object.uE2_SG_Sigma * 4) AS uE2_SG_Sigma_scale_59, + (dp1.Object.uRadius_SG * 5) AS uRadius_SG_scale_60, + (dp1.Object.uRadius_SG_Sigma * 6) AS uRadius_SG_Sigma_scale_61, + (dp1.Object.uFlags * 7) AS uFlags_scale_62, + (dp1.Object.gNumObs * 1) AS gNumObs_scale_63, + (dp1.Object.gExtendedness * 2) AS gExtendedness_scale_64, + (dp1.Object.gVarProb * 3) AS gVarProb_scale_65, + (dp1.Object.gRaOffset_PS * 4) AS gRaOffset_PS_scale_66, + (dp1.Object.gRaOffset_PS_Sigma * 5) AS gRaOffset_PS_Sigma_scale_67, + (dp1.Object.gDeclOffset_PS * 6) AS gDeclOffset_PS_scale_68, + (dp1.Object.gDeclOffset_PS_Sigma * 7) AS gDeclOffset_PS_Sigma_scale_69, + (dp1.Object.gRaDeclOffset_PS_Cov * 1) AS gRaDeclOffset_PS_Cov_scale_70, + (dp1.Object.gRaOffset_SG * 2) AS gRaOffset_SG_scale_71, + (dp1.Object.gRaOffset_SG_Sigma * 3) AS gRaOffset_SG_Sigma_scale_72, + (dp1.Object.gDeclOffset_SG * 4) AS gDeclOffset_SG_scale_73, + (dp1.Object.gDeclOffset_SG_Sigma * 5) AS gDeclOffset_SG_Sigma_scale_74, + (dp1.Object.gRaDeclOffset_SG_Cov * 6) AS gRaDeclOffset_SG_Cov_scale_75, + (dp1.Object.gLnL_PS * 7) AS gLnL_PS_scale_76, + (dp1.Object.gLnL_SG * 1) AS gLnL_SG_scale_77, + (dp1.Object.gFlux_PS * 2) AS gFlux_PS_scale_78, + (dp1.Object.gFlux_PS_Sigma * 3) AS gFlux_PS_Sigma_scale_79, + (dp1.Object.gFlux_ESG * 4) AS gFlux_ESG_scale_80, + (dp1.Object.gFlux_ESG_Sigma * 5) AS gFlux_ESG_Sigma_scale_81, + (dp1.Object.gFlux_Gaussian * 6) AS gFlux_Gaussian_scale_82, + (dp1.Object.gFlux_Gaussian_Sigma * 7) AS gFlux_Gaussian_Sigma_scale_83, + (dp1.Object.gTimescale * 1) AS gTimescale_scale_84, + (dp1.Object.gEarliestObsTime * 2) AS gEarliestObsTime_scale_85, + (dp1.Object.gLatestObsTime * 3) AS gLatestObsTime_scale_86, + (dp1.Object.gSersicN_SG * 4) AS gSersicN_SG_scale_87, + (dp1.Object.gSersicN_SG_Sigma * 5) AS gSersicN_SG_Sigma_scale_88, + (dp1.Object.gE1_SG * 6) AS gE1_SG_scale_89, + (dp1.Object.gE1_SG_Sigma * 7) AS gE1_SG_Sigma_scale_90, + (dp1.Object.gE2_SG * 1) AS gE2_SG_scale_91, + (dp1.Object.gE2_SG_Sigma * 2) AS gE2_SG_Sigma_scale_92, + (dp1.Object.gRadius_SG * 3) AS gRadius_SG_scale_93, + (dp1.Object.gRadius_SG_Sigma * 4) AS gRadius_SG_Sigma_scale_94, + (dp1.Object.gFlags * 5) AS gFlags_scale_95, + (dp1.Object.rNumObs * 6) AS rNumObs_scale_96, + (dp1.Object.rExtendedness * 7) AS rExtendedness_scale_97, + (dp1.Object.rVarProb * 1) AS rVarProb_scale_98, + (dp1.Object.rRaOffset_PS * 2) AS rRaOffset_PS_scale_99, + (dp1.Object.rRaOffset_PS_Sigma * 3) AS rRaOffset_PS_Sigma_scale_100, + (dp1.Object.rDeclOffset_PS * 4) AS rDeclOffset_PS_scale_101, + (dp1.Object.rDeclOffset_PS_Sigma * 5) AS rDeclOffset_PS_Sigma_scale_102, + (dp1.Object.rRaDeclOffset_PS_Cov * 6) AS rRaDeclOffset_PS_Cov_scale_103, + (dp1.Object.rRaOffset_SG * 7) AS rRaOffset_SG_scale_104, + (dp1.Object.rRaOffset_SG_Sigma * 1) AS rRaOffset_SG_Sigma_scale_105, + (dp1.Object.rDeclOffset_SG * 2) AS rDeclOffset_SG_scale_106, + (dp1.Object.rDeclOffset_SG_Sigma * 3) AS rDeclOffset_SG_Sigma_scale_107, + (dp1.Object.rRaDeclOffset_SG_Cov * 4) AS rRaDeclOffset_SG_Cov_scale_108, + (dp1.Object.rLnL_PS * 5) AS rLnL_PS_scale_109, + (dp1.Object.rLnL_SG * 6) AS rLnL_SG_scale_110, + (dp1.Object.rFlux_PS * 7) AS rFlux_PS_scale_111, + (dp1.Object.rFlux_PS_Sigma * 1) AS rFlux_PS_Sigma_scale_112, + (dp1.Object.rFlux_ESG * 2) AS rFlux_ESG_scale_113, + (dp1.Object.rFlux_ESG_Sigma * 3) AS rFlux_ESG_Sigma_scale_114, + (dp1.Object.rFlux_Gaussian * 4) AS rFlux_Gaussian_scale_115, + (dp1.Object.rFlux_Gaussian_Sigma * 5) AS rFlux_Gaussian_Sigma_scale_116, + (dp1.Object.rTimescale * 6) AS rTimescale_scale_117, + (dp1.Object.rEarliestObsTime * 7) AS rEarliestObsTime_scale_118, + (dp1.Object.rLatestObsTime * 1) AS rLatestObsTime_scale_119, + (dp1.Object.rSersicN_SG * 2) AS rSersicN_SG_scale_120, + (dp1.Object.rSersicN_SG_Sigma * 3) AS rSersicN_SG_Sigma_scale_121, + (dp1.Object.rE1_SG * 4) AS rE1_SG_scale_122, + (dp1.Object.rE1_SG_Sigma * 5) AS rE1_SG_Sigma_scale_123, + (dp1.Object.rE2_SG * 6) AS rE2_SG_scale_124, + (dp1.Object.rE2_SG_Sigma * 7) AS rE2_SG_Sigma_scale_125, + (dp1.Object.rRadius_SG * 1) AS rRadius_SG_scale_126, + (dp1.Object.rRadius_SG_Sigma * 2) AS rRadius_SG_Sigma_scale_127, + (dp1.Object.rFlags * 3) AS rFlags_scale_128, + (dp1.Object.iNumObs * 4) AS iNumObs_scale_129, + (dp1.Object.iExtendedness * 5) AS iExtendedness_scale_130, + (dp1.Object.iVarProb * 6) AS iVarProb_scale_131, + (dp1.Object.iRaOffset_PS * 7) AS iRaOffset_PS_scale_132, + (dp1.Object.iRaOffset_PS_Sigma * 1) AS iRaOffset_PS_Sigma_scale_133, + (dp1.Object.iDeclOffset_PS * 2) AS iDeclOffset_PS_scale_134, + (dp1.Object.iDeclOffset_PS_Sigma * 3) AS iDeclOffset_PS_Sigma_scale_135, + (dp1.Object.iRaDeclOffset_PS_Cov * 4) AS iRaDeclOffset_PS_Cov_scale_136, + (dp1.Object.iRaOffset_SG * 5) AS iRaOffset_SG_scale_137, + (dp1.Object.iRaOffset_SG_Sigma * 6) AS iRaOffset_SG_Sigma_scale_138, + (dp1.Object.iDeclOffset_SG * 7) AS iDeclOffset_SG_scale_139, + (dp1.Object.iDeclOffset_SG_Sigma * 1) AS iDeclOffset_SG_Sigma_scale_140, + (dp1.Object.iRaDeclOffset_SG_Cov * 2) AS iRaDeclOffset_SG_Cov_scale_141, + (dp1.Object.iLnL_PS * 3) AS iLnL_PS_scale_142, + (dp1.Object.iLnL_SG * 4) AS iLnL_SG_scale_143, + (dp1.Object.iFlux_PS * 5) AS iFlux_PS_scale_144, + (dp1.Object.iFlux_PS_Sigma * 6) AS iFlux_PS_Sigma_scale_145, + (dp1.Object.iFlux_ESG * 7) AS iFlux_ESG_scale_146, + (dp1.Object.iFlux_ESG_Sigma * 1) AS iFlux_ESG_Sigma_scale_147, + (dp1.Object.iFlux_Gaussian * 2) AS iFlux_Gaussian_scale_148, + (dp1.Object.iFlux_Gaussian_Sigma * 3) AS iFlux_Gaussian_Sigma_scale_149, + (dp1.Object.iTimescale * 4) AS iTimescale_scale_150, + (dp1.Object.iEarliestObsTime * 5) AS iEarliestObsTime_scale_151, + (dp1.Object.iLatestObsTime * 6) AS iLatestObsTime_scale_152, + (dp1.Object.iSersicN_SG * 7) AS iSersicN_SG_scale_153, + (dp1.Object.iSersicN_SG_Sigma * 1) AS iSersicN_SG_Sigma_scale_154, + (dp1.Object.iE1_SG * 2) AS iE1_SG_scale_155, + (dp1.Object.iE1_SG_Sigma * 3) AS iE1_SG_Sigma_scale_156, + (dp1.Object.iE2_SG * 4) AS iE2_SG_scale_157, + (dp1.Object.iE2_SG_Sigma * 5) AS iE2_SG_Sigma_scale_158, + (dp1.Object.iRadius_SG * 6) AS iRadius_SG_scale_159 +FROM dp1.Object +WHERE objectId BETWEEN 100000 AND 999999 + AND ra_PS >= 0 + AND decl_PS <= 90 + AND canonicalFilterId IN (1, 2, 3, 4, 5) diff --git a/src/ccontrol/testdata/parser-corpus/q05_q3_wider_expressions.sql b/src/ccontrol/testdata/parser-corpus/q05_q3_wider_expressions.sql new file mode 100644 index 0000000000..3ffc976b51 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q05_q3_wider_expressions.sql @@ -0,0 +1,1721 @@ +SELECT + dp1.Object.coord_dec AS coord_dec_raw, + dp1.Object.coord_decErr AS coord_decErr_raw, + dp1.Object.coord_ra AS coord_ra_raw, + dp1.Object.coord_ra_dec_Cov AS coord_ra_dec_Cov_raw, + dp1.Object.coord_raErr AS coord_raErr_raw, + dp1.Object.deblend_failed AS deblend_failed_raw, + dp1.Object.deblend_incompleteData AS deblend_incompleteData_raw, + dp1.Object.deblend_isolatedParent AS deblend_isolatedParent_raw, + dp1.Object.deblend_iterations AS deblend_iterations_raw, + dp1.Object.deblend_logL AS deblend_logL_raw, + dp1.Object.deblend_masked AS deblend_masked_raw, + dp1.Object.deblend_nChild AS deblend_nChild_raw, + dp1.Object.deblend_nPeaks AS deblend_nPeaks_raw, + dp1.Object.deblend_parentTooBig AS deblend_parentTooBig_raw, + dp1.Object.deblend_peak_center_x AS deblend_peak_center_x_raw, + dp1.Object.deblend_peak_center_y AS deblend_peak_center_y_raw, + dp1.Object.deblend_skipped AS deblend_skipped_raw, + dp1.Object.deblend_tooManyPeaks AS deblend_tooManyPeaks_raw, + dp1.Object.detect_fromBlend AS detect_fromBlend_raw, + dp1.Object.detect_isDeblendedModelSource AS detect_isDeblendedModelSource_raw, + dp1.Object.detect_isIsolated AS detect_isIsolated_raw, + dp1.Object.ebv AS ebv_raw, + dp1.Object.footprintArea AS footprintArea_raw, + dp1.Object.g_ap03Flux AS g_ap03Flux_raw, + dp1.Object.g_ap03Flux_flag AS g_ap03Flux_flag_raw, + dp1.Object.g_ap03FluxErr AS g_ap03FluxErr_raw, + dp1.Object.g_ap06Flux AS g_ap06Flux_raw, + dp1.Object.g_ap06Flux_flag AS g_ap06Flux_flag_raw, + dp1.Object.g_ap06FluxErr AS g_ap06FluxErr_raw, + dp1.Object.g_ap09Flux AS g_ap09Flux_raw, + dp1.Object.g_ap09Flux_flag AS g_ap09Flux_flag_raw, + dp1.Object.g_ap09FluxErr AS g_ap09FluxErr_raw, + dp1.Object.g_ap12Flux AS g_ap12Flux_raw, + dp1.Object.g_ap12Flux_flag AS g_ap12Flux_flag_raw, + dp1.Object.g_ap12FluxErr AS g_ap12FluxErr_raw, + dp1.Object.g_ap17Flux AS g_ap17Flux_raw, + dp1.Object.g_ap17Flux_flag AS g_ap17Flux_flag_raw, + dp1.Object.g_ap17FluxErr AS g_ap17FluxErr_raw, + dp1.Object.g_ap25Flux AS g_ap25Flux_raw, + dp1.Object.g_ap25Flux_flag AS g_ap25Flux_flag_raw, + dp1.Object.g_ap25FluxErr AS g_ap25FluxErr_raw, + dp1.Object.g_ap35Flux AS g_ap35Flux_raw, + dp1.Object.g_ap35Flux_flag AS g_ap35Flux_flag_raw, + dp1.Object.g_ap35FluxErr AS g_ap35FluxErr_raw, + dp1.Object.g_ap50Flux AS g_ap50Flux_raw, + dp1.Object.g_ap50Flux_flag AS g_ap50Flux_flag_raw, + dp1.Object.g_ap50FluxErr AS g_ap50FluxErr_raw, + dp1.Object.g_ap70Flux AS g_ap70Flux_raw, + dp1.Object.g_ap70Flux_flag AS g_ap70Flux_flag_raw, + dp1.Object.g_ap70FluxErr AS g_ap70FluxErr_raw, + dp1.Object.g_apFlux_flag AS g_apFlux_flag_raw, + dp1.Object.g_apFlux_flag_apertureTruncated AS g_apFlux_flag_apertureTruncated_raw, + dp1.Object.g_apFlux_flag_sincCoeffsTruncated AS g_apFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.g_bdChi2 AS g_bdChi2_raw, + dp1.Object.g_bdE1 AS g_bdE1_raw, + dp1.Object.g_bdE2 AS g_bdE2_raw, + dp1.Object.g_bdFluxB AS g_bdFluxB_raw, + dp1.Object.g_bdFluxBErr AS g_bdFluxBErr_raw, + dp1.Object.g_bdFluxD AS g_bdFluxD_raw, + dp1.Object.g_bdFluxDErr AS g_bdFluxDErr_raw, + dp1.Object.g_bdReB AS g_bdReB_raw, + dp1.Object.g_bdReD AS g_bdReD_raw, + dp1.Object.g_blendedness AS g_blendedness_raw, + dp1.Object.g_blendedness_flag AS g_blendedness_flag_raw, + dp1.Object.g_calib_astrometry_used AS g_calib_astrometry_used_raw, + dp1.Object.g_calib_photometry_reserved AS g_calib_photometry_reserved_raw, + dp1.Object.g_calib_photometry_used AS g_calib_photometry_used_raw, + dp1.Object.g_calib_psf_candidate AS g_calib_psf_candidate_raw, + dp1.Object.g_calib_psf_reserved AS g_calib_psf_reserved_raw, + dp1.Object.g_calib_psf_used AS g_calib_psf_used_raw, + dp1.Object.g_calibFlux AS g_calibFlux_raw, + dp1.Object.g_calibFlux_flag AS g_calibFlux_flag_raw, + dp1.Object.g_calibFlux_flag_apertureTruncated AS g_calibFlux_flag_apertureTruncated_raw, + dp1.Object.g_calibFlux_flag_sincCoeffsTruncated AS g_calibFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.g_calibFluxErr AS g_calibFluxErr_raw, + dp1.Object.g_centroid_flag AS g_centroid_flag_raw, + dp1.Object.g_centroid_x AS g_centroid_x_raw, + dp1.Object.g_centroid_xErr AS g_centroid_xErr_raw, + dp1.Object.g_centroid_y AS g_centroid_y_raw, + dp1.Object.g_centroid_yErr AS g_centroid_yErr_raw, + dp1.Object.g_cModel_flag AS g_cModel_flag_raw, + dp1.Object.g_cModel_flag_apCorr AS g_cModel_flag_apCorr_raw, + dp1.Object.g_cModelFlux AS g_cModelFlux_raw, + dp1.Object.g_cModelFlux_inner AS g_cModelFlux_inner_raw, + dp1.Object.g_cModelFluxErr AS g_cModelFluxErr_raw, + dp1.Object.g_cModelMag AS g_cModelMag_raw, + dp1.Object.g_cModelMagErr AS g_cModelMagErr_raw, + dp1.Object.g_deblend_blendedness AS g_deblend_blendedness_raw, + dp1.Object.g_deblend_dataCoverage AS g_deblend_dataCoverage_raw, + dp1.Object.g_deblend_fluxOverlap AS g_deblend_fluxOverlap_raw, + dp1.Object.g_deblend_fluxOverlapFraction AS g_deblend_fluxOverlapFraction_raw, + dp1.Object.g_deblend_zeroFlux AS g_deblend_zeroFlux_raw, + dp1.Object.g_dec AS g_dec_raw, + dp1.Object.g_decErr AS g_decErr_raw, + dp1.Object.g_epoch AS g_epoch_raw, + dp1.Object.g_extendedness AS g_extendedness_raw, + dp1.Object.g_extendedness_flag AS g_extendedness_flag_raw, + dp1.Object.g_free_cModelFlux AS g_free_cModelFlux_raw, + dp1.Object.g_free_cModelFlux_flag AS g_free_cModelFlux_flag_raw, + dp1.Object.g_free_cModelFlux_inner AS g_free_cModelFlux_inner_raw, + dp1.Object.g_free_cModelFluxErr AS g_free_cModelFluxErr_raw, + dp1.Object.g_free_psfFlux AS g_free_psfFlux_raw, + dp1.Object.g_free_psfFlux_flag AS g_free_psfFlux_flag_raw, + dp1.Object.g_free_psfFluxErr AS g_free_psfFluxErr_raw, + dp1.Object.g_gaap0p7Flux AS g_gaap0p7Flux_raw, + dp1.Object.g_gaap0p7Flux_flag_bigPsf AS g_gaap0p7Flux_flag_bigPsf_raw, + dp1.Object.g_gaap0p7FluxErr AS g_gaap0p7FluxErr_raw, + dp1.Object.g_gaap1p0Flux AS g_gaap1p0Flux_raw, + dp1.Object.g_gaap1p0Flux_flag_bigPsf AS g_gaap1p0Flux_flag_bigPsf_raw, + dp1.Object.g_gaap1p0FluxErr AS g_gaap1p0FluxErr_raw, + dp1.Object.g_gaap1p5Flux AS g_gaap1p5Flux_raw, + dp1.Object.g_gaap1p5Flux_flag_bigPsf AS g_gaap1p5Flux_flag_bigPsf_raw, + dp1.Object.g_gaap1p5FluxErr AS g_gaap1p5FluxErr_raw, + dp1.Object.g_gaap2p5Flux AS g_gaap2p5Flux_raw, + dp1.Object.g_gaap2p5Flux_flag_bigPsf AS g_gaap2p5Flux_flag_bigPsf_raw, + dp1.Object.g_gaap2p5FluxErr AS g_gaap2p5FluxErr_raw, + dp1.Object.g_gaap3p0Flux AS g_gaap3p0Flux_raw, + dp1.Object.g_gaap3p0Flux_flag_bigPsf AS g_gaap3p0Flux_flag_bigPsf_raw, + dp1.Object.g_gaap3p0FluxErr AS g_gaap3p0FluxErr_raw, + dp1.Object.g_gaapFlux_flag AS g_gaapFlux_flag_raw, + dp1.Object.g_gaapFlux_flag_edge AS g_gaapFlux_flag_edge_raw, + dp1.Object.g_gaapFlux_flag_gaussianization AS g_gaapFlux_flag_gaussianization_raw, + dp1.Object.g_gaapOptimalFlux AS g_gaapOptimalFlux_raw, + dp1.Object.g_gaapOptimalFlux_flag_bigPsf AS g_gaapOptimalFlux_flag_bigPsf_raw, + dp1.Object.g_gaapOptimalFluxErr AS g_gaapOptimalFluxErr_raw, + dp1.Object.g_gaapPsfFlux AS g_gaapPsfFlux_raw, + dp1.Object.g_gaapPsfFluxErr AS g_gaapPsfFluxErr_raw, + dp1.Object.g_hsm_moments_03 AS g_hsm_moments_03_raw, + dp1.Object.g_hsm_moments_04 AS g_hsm_moments_04_raw, + dp1.Object.g_hsm_moments_12 AS g_hsm_moments_12_raw, + dp1.Object.g_hsm_moments_13 AS g_hsm_moments_13_raw, + dp1.Object.g_hsm_moments_21 AS g_hsm_moments_21_raw, + dp1.Object.g_hsm_moments_22 AS g_hsm_moments_22_raw, + dp1.Object.g_hsm_moments_30 AS g_hsm_moments_30_raw, + dp1.Object.g_hsm_moments_31 AS g_hsm_moments_31_raw, + dp1.Object.g_hsm_moments_40 AS g_hsm_moments_40_raw, + dp1.Object.g_hsm_moments_flag AS g_hsm_moments_flag_raw, + dp1.Object.g_hsm_momentsPsf_03 AS g_hsm_momentsPsf_03_raw, + dp1.Object.g_hsm_momentsPsf_04 AS g_hsm_momentsPsf_04_raw, + dp1.Object.g_hsm_momentsPsf_12 AS g_hsm_momentsPsf_12_raw, + dp1.Object.g_hsm_momentsPsf_13 AS g_hsm_momentsPsf_13_raw, + dp1.Object.g_hsm_momentsPsf_21 AS g_hsm_momentsPsf_21_raw, + dp1.Object.g_hsm_momentsPsf_22 AS g_hsm_momentsPsf_22_raw, + dp1.Object.g_hsm_momentsPsf_30 AS g_hsm_momentsPsf_30_raw, + dp1.Object.g_hsm_momentsPsf_31 AS g_hsm_momentsPsf_31_raw, + dp1.Object.g_hsm_momentsPsf_40 AS g_hsm_momentsPsf_40_raw, + dp1.Object.g_hsm_momentsPsf_flag AS g_hsm_momentsPsf_flag_raw, + dp1.Object.g_hsmShapeRegauss_e1 AS g_hsmShapeRegauss_e1_raw, + dp1.Object.g_hsmShapeRegauss_e2 AS g_hsmShapeRegauss_e2_raw, + dp1.Object.g_hsmShapeRegauss_flag AS g_hsmShapeRegauss_flag_raw, + dp1.Object.g_hsmShapeRegauss_sigma AS g_hsmShapeRegauss_sigma_raw, + dp1.Object.g_i_flag AS g_i_flag_raw, + dp1.Object.g_iDebiasedPSF_flag AS g_iDebiasedPSF_flag_raw, + dp1.Object.g_inputCount AS g_inputCount_raw, + dp1.Object.g_inputCount_flag AS g_inputCount_flag_raw, + dp1.Object.g_inputCount_flag_noInputs AS g_inputCount_flag_noInputs_raw, + dp1.Object.g_invalidPsfFlag AS g_invalidPsfFlag_raw, + dp1.Object.g_iPSF_flag AS g_iPSF_flag_raw, + dp1.Object.g_iRound_flag AS g_iRound_flag_raw, + dp1.Object.g_ixx AS g_ixx_raw, + dp1.Object.g_ixxDebiasedPSF AS g_ixxDebiasedPSF_raw, + dp1.Object.g_ixxPSF AS g_ixxPSF_raw, + dp1.Object.g_ixxRound AS g_ixxRound_raw, + dp1.Object.g_ixy AS g_ixy_raw, + dp1.Object.g_ixyDebiasedPSF AS g_ixyDebiasedPSF_raw, + dp1.Object.g_ixyPSF AS g_ixyPSF_raw, + dp1.Object.g_ixyRound AS g_ixyRound_raw, + dp1.Object.g_iyy AS g_iyy_raw, + dp1.Object.g_iyyDebiasedPSF AS g_iyyDebiasedPSF_raw, + dp1.Object.g_iyyPSF AS g_iyyPSF_raw, + dp1.Object.g_iyyRound AS g_iyyRound_raw, + dp1.Object.g_kronFlux AS g_kronFlux_raw, + dp1.Object.g_kronFlux_flag AS g_kronFlux_flag_raw, + dp1.Object.g_kronFlux_flag_bad_radius AS g_kronFlux_flag_bad_radius_raw, + dp1.Object.g_kronFlux_flag_bad_shape AS g_kronFlux_flag_bad_shape_raw, + dp1.Object.g_kronFlux_flag_bad_shape_no_psf AS g_kronFlux_flag_bad_shape_no_psf_raw, + dp1.Object.g_kronFlux_flag_edge AS g_kronFlux_flag_edge_raw, + dp1.Object.g_kronFlux_flag_no_fallback_radius AS g_kronFlux_flag_no_fallback_radius_raw, + dp1.Object.g_kronFlux_flag_no_minimum_radius AS g_kronFlux_flag_no_minimum_radius_raw, + dp1.Object.g_kronFlux_flag_small_radius AS g_kronFlux_flag_small_radius_raw, + dp1.Object.g_kronFlux_flag_used_minimum_radius AS g_kronFlux_flag_used_minimum_radius_raw, + dp1.Object.g_kronFlux_flag_used_psf_radius AS g_kronFlux_flag_used_psf_radius_raw, + dp1.Object.g_kronFluxErr AS g_kronFluxErr_raw, + dp1.Object.g_kronRad AS g_kronRad_raw, + dp1.Object.g_pixelFlags_bad AS g_pixelFlags_bad_raw, + dp1.Object.g_pixelFlags_clipped AS g_pixelFlags_clipped_raw, + dp1.Object.g_pixelFlags_clippedCenter AS g_pixelFlags_clippedCenter_raw, + dp1.Object.g_pixelFlags_cr AS g_pixelFlags_cr_raw, + dp1.Object.g_pixelFlags_crCenter AS g_pixelFlags_crCenter_raw, + dp1.Object.g_pixelFlags_edge AS g_pixelFlags_edge_raw, + dp1.Object.g_pixelFlags_inexact_psf AS g_pixelFlags_inexact_psf_raw, + dp1.Object.g_pixelFlags_inexact_psfCenter AS g_pixelFlags_inexact_psfCenter_raw, + dp1.Object.g_pixelFlags_interpolated AS g_pixelFlags_interpolated_raw, + dp1.Object.g_pixelFlags_interpolatedCenter AS g_pixelFlags_interpolatedCenter_raw, + dp1.Object.g_pixelFlags_nodata AS g_pixelFlags_nodata_raw, + dp1.Object.g_pixelFlags_offimage AS g_pixelFlags_offimage_raw, + dp1.Object.g_pixelFlags_saturated AS g_pixelFlags_saturated_raw, + dp1.Object.g_pixelFlags_saturatedCenter AS g_pixelFlags_saturatedCenter_raw, + dp1.Object.g_pixelFlags_sensor_edge AS g_pixelFlags_sensor_edge_raw, + dp1.Object.g_pixelFlags_sensor_edgeCenter AS g_pixelFlags_sensor_edgeCenter_raw, + dp1.Object.g_pixelFlags_suspect AS g_pixelFlags_suspect_raw, + dp1.Object.g_pixelFlags_suspectCenter AS g_pixelFlags_suspectCenter_raw, + dp1.Object.g_psfFlux AS g_psfFlux_raw, + dp1.Object.g_psfFlux_area AS g_psfFlux_area_raw, + dp1.Object.g_psfFlux_flag AS g_psfFlux_flag_raw, + dp1.Object.g_psfFlux_flag_apCorr AS g_psfFlux_flag_apCorr_raw, + dp1.Object.g_psfFlux_flag_edge AS g_psfFlux_flag_edge_raw, + dp1.Object.g_psfFlux_flag_noGoodPixels AS g_psfFlux_flag_noGoodPixels_raw, + dp1.Object.g_psfFluxErr AS g_psfFluxErr_raw, + dp1.Object.g_psfMag AS g_psfMag_raw, + dp1.Object.g_psfMagErr AS g_psfMagErr_raw, + dp1.Object.g_psfModel_TwoGaussian_chisq_reduced AS g_psfModel_TwoGaussian_chisq_reduced_raw, + dp1.Object.g_psfModel_TwoGaussian_gauss1_fluxfrac AS g_psfModel_TwoGaussian_gauss1_fluxfrac_raw, + dp1.Object.g_psfModel_TwoGaussian_gauss1_rho AS g_psfModel_TwoGaussian_gauss1_rho_raw, + dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_x AS g_psfModel_TwoGaussian_gauss1_sigma_x_raw, + dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_y AS g_psfModel_TwoGaussian_gauss1_sigma_y_raw, + dp1.Object.g_psfModel_TwoGaussian_gauss2_rho AS g_psfModel_TwoGaussian_gauss2_rho_raw, + dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_x AS g_psfModel_TwoGaussian_gauss2_sigma_x_raw, + dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_y AS g_psfModel_TwoGaussian_gauss2_sigma_y_raw, + dp1.Object.g_psfModel_TwoGaussian_n_iter AS g_psfModel_TwoGaussian_n_iter_raw, + dp1.Object.g_psfModel_TwoGaussian_no_inputs_flag AS g_psfModel_TwoGaussian_no_inputs_flag_raw, + dp1.Object.g_psfModel_TwoGaussian_unknown_flag AS g_psfModel_TwoGaussian_unknown_flag_raw, + dp1.Object.g_ra AS g_ra_raw, + dp1.Object.g_ra_dec_Cov AS g_ra_dec_Cov_raw, + dp1.Object.g_raErr AS g_raErr_raw, + dp1.Object.g_sersicFlux AS g_sersicFlux_raw, + dp1.Object.g_sersicFluxErr AS g_sersicFluxErr_raw, + dp1.Object.g_sizeExtendedness AS g_sizeExtendedness_raw, + dp1.Object.g_sizeExtendedness_flag AS g_sizeExtendedness_flag_raw, + dp1.Object.i_ap03Flux AS i_ap03Flux_raw, + dp1.Object.i_ap03Flux_flag AS i_ap03Flux_flag_raw, + dp1.Object.i_ap03FluxErr AS i_ap03FluxErr_raw, + dp1.Object.i_ap06Flux AS i_ap06Flux_raw, + dp1.Object.i_ap06Flux_flag AS i_ap06Flux_flag_raw, + dp1.Object.i_ap06FluxErr AS i_ap06FluxErr_raw, + dp1.Object.i_ap09Flux AS i_ap09Flux_raw, + dp1.Object.i_ap09Flux_flag AS i_ap09Flux_flag_raw, + dp1.Object.i_ap09FluxErr AS i_ap09FluxErr_raw, + dp1.Object.i_ap12Flux AS i_ap12Flux_raw, + dp1.Object.i_ap12Flux_flag AS i_ap12Flux_flag_raw, + dp1.Object.i_ap12FluxErr AS i_ap12FluxErr_raw, + dp1.Object.i_ap17Flux AS i_ap17Flux_raw, + dp1.Object.i_ap17Flux_flag AS i_ap17Flux_flag_raw, + dp1.Object.i_ap17FluxErr AS i_ap17FluxErr_raw, + dp1.Object.i_ap25Flux AS i_ap25Flux_raw, + dp1.Object.i_ap25Flux_flag AS i_ap25Flux_flag_raw, + dp1.Object.i_ap25FluxErr AS i_ap25FluxErr_raw, + dp1.Object.i_ap35Flux AS i_ap35Flux_raw, + dp1.Object.i_ap35Flux_flag AS i_ap35Flux_flag_raw, + dp1.Object.i_ap35FluxErr AS i_ap35FluxErr_raw, + dp1.Object.i_ap50Flux AS i_ap50Flux_raw, + dp1.Object.i_ap50Flux_flag AS i_ap50Flux_flag_raw, + dp1.Object.i_ap50FluxErr AS i_ap50FluxErr_raw, + dp1.Object.i_ap70Flux AS i_ap70Flux_raw, + dp1.Object.i_ap70Flux_flag AS i_ap70Flux_flag_raw, + dp1.Object.i_ap70FluxErr AS i_ap70FluxErr_raw, + dp1.Object.i_apFlux_flag AS i_apFlux_flag_raw, + dp1.Object.i_apFlux_flag_apertureTruncated AS i_apFlux_flag_apertureTruncated_raw, + dp1.Object.i_apFlux_flag_sincCoeffsTruncated AS i_apFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.i_bdChi2 AS i_bdChi2_raw, + dp1.Object.i_bdE1 AS i_bdE1_raw, + dp1.Object.i_bdE2 AS i_bdE2_raw, + dp1.Object.i_bdFluxB AS i_bdFluxB_raw, + dp1.Object.i_bdFluxBErr AS i_bdFluxBErr_raw, + dp1.Object.i_bdFluxD AS i_bdFluxD_raw, + dp1.Object.i_bdFluxDErr AS i_bdFluxDErr_raw, + dp1.Object.i_bdReB AS i_bdReB_raw, + dp1.Object.i_bdReD AS i_bdReD_raw, + dp1.Object.i_blendedness AS i_blendedness_raw, + dp1.Object.i_blendedness_flag AS i_blendedness_flag_raw, + dp1.Object.i_calib_astrometry_used AS i_calib_astrometry_used_raw, + dp1.Object.i_calib_photometry_reserved AS i_calib_photometry_reserved_raw, + dp1.Object.i_calib_photometry_used AS i_calib_photometry_used_raw, + dp1.Object.i_calib_psf_candidate AS i_calib_psf_candidate_raw, + dp1.Object.i_calib_psf_reserved AS i_calib_psf_reserved_raw, + dp1.Object.i_calib_psf_used AS i_calib_psf_used_raw, + dp1.Object.i_calibFlux AS i_calibFlux_raw, + dp1.Object.i_calibFlux_flag AS i_calibFlux_flag_raw, + dp1.Object.i_calibFlux_flag_apertureTruncated AS i_calibFlux_flag_apertureTruncated_raw, + dp1.Object.i_calibFlux_flag_sincCoeffsTruncated AS i_calibFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.i_calibFluxErr AS i_calibFluxErr_raw, + dp1.Object.i_centroid_flag AS i_centroid_flag_raw, + dp1.Object.i_centroid_x AS i_centroid_x_raw, + dp1.Object.i_centroid_xErr AS i_centroid_xErr_raw, + dp1.Object.i_centroid_y AS i_centroid_y_raw, + dp1.Object.i_centroid_yErr AS i_centroid_yErr_raw, + dp1.Object.i_cModel_flag AS i_cModel_flag_raw, + dp1.Object.i_cModel_flag_apCorr AS i_cModel_flag_apCorr_raw, + dp1.Object.i_cModelFlux AS i_cModelFlux_raw, + dp1.Object.i_cModelFlux_inner AS i_cModelFlux_inner_raw, + dp1.Object.i_cModelFluxErr AS i_cModelFluxErr_raw, + dp1.Object.i_cModelMag AS i_cModelMag_raw, + dp1.Object.i_cModelMagErr AS i_cModelMagErr_raw, + dp1.Object.i_deblend_blendedness AS i_deblend_blendedness_raw, + dp1.Object.i_deblend_dataCoverage AS i_deblend_dataCoverage_raw, + dp1.Object.i_deblend_fluxOverlap AS i_deblend_fluxOverlap_raw, + dp1.Object.i_deblend_fluxOverlapFraction AS i_deblend_fluxOverlapFraction_raw, + dp1.Object.i_deblend_zeroFlux AS i_deblend_zeroFlux_raw, + dp1.Object.i_dec AS i_dec_raw, + dp1.Object.i_decErr AS i_decErr_raw, + dp1.Object.i_epoch AS i_epoch_raw, + dp1.Object.i_extendedness AS i_extendedness_raw, + dp1.Object.i_extendedness_flag AS i_extendedness_flag_raw, + dp1.Object.i_free_cModelFlux AS i_free_cModelFlux_raw, + dp1.Object.i_free_cModelFlux_flag AS i_free_cModelFlux_flag_raw, + dp1.Object.i_free_cModelFlux_inner AS i_free_cModelFlux_inner_raw, + dp1.Object.i_free_cModelFluxErr AS i_free_cModelFluxErr_raw, + dp1.Object.i_free_psfFlux AS i_free_psfFlux_raw, + dp1.Object.i_free_psfFlux_flag AS i_free_psfFlux_flag_raw, + dp1.Object.i_free_psfFluxErr AS i_free_psfFluxErr_raw, + dp1.Object.i_gaap0p7Flux AS i_gaap0p7Flux_raw, + dp1.Object.i_gaap0p7Flux_flag_bigPsf AS i_gaap0p7Flux_flag_bigPsf_raw, + dp1.Object.i_gaap0p7FluxErr AS i_gaap0p7FluxErr_raw, + dp1.Object.i_gaap1p0Flux AS i_gaap1p0Flux_raw, + dp1.Object.i_gaap1p0Flux_flag_bigPsf AS i_gaap1p0Flux_flag_bigPsf_raw, + dp1.Object.i_gaap1p0FluxErr AS i_gaap1p0FluxErr_raw, + dp1.Object.i_gaap1p5Flux AS i_gaap1p5Flux_raw, + dp1.Object.i_gaap1p5Flux_flag_bigPsf AS i_gaap1p5Flux_flag_bigPsf_raw, + dp1.Object.i_gaap1p5FluxErr AS i_gaap1p5FluxErr_raw, + dp1.Object.i_gaap2p5Flux AS i_gaap2p5Flux_raw, + dp1.Object.i_gaap2p5Flux_flag_bigPsf AS i_gaap2p5Flux_flag_bigPsf_raw, + dp1.Object.i_gaap2p5FluxErr AS i_gaap2p5FluxErr_raw, + dp1.Object.i_gaap3p0Flux AS i_gaap3p0Flux_raw, + dp1.Object.i_gaap3p0Flux_flag_bigPsf AS i_gaap3p0Flux_flag_bigPsf_raw, + dp1.Object.i_gaap3p0FluxErr AS i_gaap3p0FluxErr_raw, + dp1.Object.i_gaapFlux_flag AS i_gaapFlux_flag_raw, + dp1.Object.i_gaapFlux_flag_edge AS i_gaapFlux_flag_edge_raw, + dp1.Object.i_gaapFlux_flag_gaussianization AS i_gaapFlux_flag_gaussianization_raw, + dp1.Object.i_gaapOptimalFlux AS i_gaapOptimalFlux_raw, + dp1.Object.i_gaapOptimalFlux_flag_bigPsf AS i_gaapOptimalFlux_flag_bigPsf_raw, + dp1.Object.i_gaapOptimalFluxErr AS i_gaapOptimalFluxErr_raw, + dp1.Object.i_gaapPsfFlux AS i_gaapPsfFlux_raw, + dp1.Object.i_gaapPsfFluxErr AS i_gaapPsfFluxErr_raw, + dp1.Object.i_hsm_moments_03 AS i_hsm_moments_03_raw, + dp1.Object.i_hsm_moments_04 AS i_hsm_moments_04_raw, + dp1.Object.i_hsm_moments_12 AS i_hsm_moments_12_raw, + dp1.Object.i_hsm_moments_13 AS i_hsm_moments_13_raw, + dp1.Object.i_hsm_moments_21 AS i_hsm_moments_21_raw, + dp1.Object.i_hsm_moments_22 AS i_hsm_moments_22_raw, + dp1.Object.i_hsm_moments_30 AS i_hsm_moments_30_raw, + dp1.Object.i_hsm_moments_31 AS i_hsm_moments_31_raw, + dp1.Object.i_hsm_moments_40 AS i_hsm_moments_40_raw, + dp1.Object.i_hsm_moments_flag AS i_hsm_moments_flag_raw, + dp1.Object.i_hsm_momentsPsf_03 AS i_hsm_momentsPsf_03_raw, + dp1.Object.i_hsm_momentsPsf_04 AS i_hsm_momentsPsf_04_raw, + dp1.Object.i_hsm_momentsPsf_12 AS i_hsm_momentsPsf_12_raw, + dp1.Object.i_hsm_momentsPsf_13 AS i_hsm_momentsPsf_13_raw, + dp1.Object.i_hsm_momentsPsf_21 AS i_hsm_momentsPsf_21_raw, + dp1.Object.i_hsm_momentsPsf_22 AS i_hsm_momentsPsf_22_raw, + dp1.Object.i_hsm_momentsPsf_30 AS i_hsm_momentsPsf_30_raw, + dp1.Object.i_hsm_momentsPsf_31 AS i_hsm_momentsPsf_31_raw, + dp1.Object.i_hsm_momentsPsf_40 AS i_hsm_momentsPsf_40_raw, + dp1.Object.i_hsm_momentsPsf_flag AS i_hsm_momentsPsf_flag_raw, + dp1.Object.i_hsmShapeRegauss_e1 AS i_hsmShapeRegauss_e1_raw, + dp1.Object.i_hsmShapeRegauss_e2 AS i_hsmShapeRegauss_e2_raw, + dp1.Object.i_hsmShapeRegauss_flag AS i_hsmShapeRegauss_flag_raw, + dp1.Object.i_hsmShapeRegauss_sigma AS i_hsmShapeRegauss_sigma_raw, + dp1.Object.i_i_flag AS i_i_flag_raw, + dp1.Object.i_iDebiasedPSF_flag AS i_iDebiasedPSF_flag_raw, + dp1.Object.i_inputCount AS i_inputCount_raw, + dp1.Object.i_inputCount_flag AS i_inputCount_flag_raw, + dp1.Object.i_inputCount_flag_noInputs AS i_inputCount_flag_noInputs_raw, + dp1.Object.i_invalidPsfFlag AS i_invalidPsfFlag_raw, + dp1.Object.i_iPSF_flag AS i_iPSF_flag_raw, + dp1.Object.i_iRound_flag AS i_iRound_flag_raw, + dp1.Object.i_ixx AS i_ixx_raw, + dp1.Object.i_ixxDebiasedPSF AS i_ixxDebiasedPSF_raw, + dp1.Object.i_ixxPSF AS i_ixxPSF_raw, + dp1.Object.i_ixxRound AS i_ixxRound_raw, + dp1.Object.i_ixy AS i_ixy_raw, + dp1.Object.i_ixyDebiasedPSF AS i_ixyDebiasedPSF_raw, + dp1.Object.i_ixyPSF AS i_ixyPSF_raw, + dp1.Object.i_ixyRound AS i_ixyRound_raw, + dp1.Object.i_iyy AS i_iyy_raw, + dp1.Object.i_iyyDebiasedPSF AS i_iyyDebiasedPSF_raw, + dp1.Object.i_iyyPSF AS i_iyyPSF_raw, + dp1.Object.i_iyyRound AS i_iyyRound_raw, + dp1.Object.i_kronFlux AS i_kronFlux_raw, + dp1.Object.i_kronFlux_flag AS i_kronFlux_flag_raw, + dp1.Object.i_kronFlux_flag_bad_radius AS i_kronFlux_flag_bad_radius_raw, + dp1.Object.i_kronFlux_flag_bad_shape AS i_kronFlux_flag_bad_shape_raw, + dp1.Object.i_kronFlux_flag_bad_shape_no_psf AS i_kronFlux_flag_bad_shape_no_psf_raw, + dp1.Object.i_kronFlux_flag_edge AS i_kronFlux_flag_edge_raw, + dp1.Object.i_kronFlux_flag_no_fallback_radius AS i_kronFlux_flag_no_fallback_radius_raw, + dp1.Object.i_kronFlux_flag_no_minimum_radius AS i_kronFlux_flag_no_minimum_radius_raw, + dp1.Object.i_kronFlux_flag_small_radius AS i_kronFlux_flag_small_radius_raw, + dp1.Object.i_kronFlux_flag_used_minimum_radius AS i_kronFlux_flag_used_minimum_radius_raw, + dp1.Object.i_kronFlux_flag_used_psf_radius AS i_kronFlux_flag_used_psf_radius_raw, + dp1.Object.i_kronFluxErr AS i_kronFluxErr_raw, + dp1.Object.i_kronRad AS i_kronRad_raw, + dp1.Object.i_pixelFlags_bad AS i_pixelFlags_bad_raw, + dp1.Object.i_pixelFlags_clipped AS i_pixelFlags_clipped_raw, + dp1.Object.i_pixelFlags_clippedCenter AS i_pixelFlags_clippedCenter_raw, + dp1.Object.i_pixelFlags_cr AS i_pixelFlags_cr_raw, + dp1.Object.i_pixelFlags_crCenter AS i_pixelFlags_crCenter_raw, + dp1.Object.i_pixelFlags_edge AS i_pixelFlags_edge_raw, + dp1.Object.i_pixelFlags_inexact_psf AS i_pixelFlags_inexact_psf_raw, + dp1.Object.i_pixelFlags_inexact_psfCenter AS i_pixelFlags_inexact_psfCenter_raw, + dp1.Object.i_pixelFlags_interpolated AS i_pixelFlags_interpolated_raw, + dp1.Object.i_pixelFlags_interpolatedCenter AS i_pixelFlags_interpolatedCenter_raw, + dp1.Object.i_pixelFlags_nodata AS i_pixelFlags_nodata_raw, + dp1.Object.i_pixelFlags_offimage AS i_pixelFlags_offimage_raw, + dp1.Object.i_pixelFlags_saturated AS i_pixelFlags_saturated_raw, + dp1.Object.i_pixelFlags_saturatedCenter AS i_pixelFlags_saturatedCenter_raw, + dp1.Object.i_pixelFlags_sensor_edge AS i_pixelFlags_sensor_edge_raw, + dp1.Object.i_pixelFlags_sensor_edgeCenter AS i_pixelFlags_sensor_edgeCenter_raw, + dp1.Object.i_pixelFlags_suspect AS i_pixelFlags_suspect_raw, + dp1.Object.i_pixelFlags_suspectCenter AS i_pixelFlags_suspectCenter_raw, + dp1.Object.i_psfFlux AS i_psfFlux_raw, + dp1.Object.i_psfFlux_area AS i_psfFlux_area_raw, + dp1.Object.i_psfFlux_flag AS i_psfFlux_flag_raw, + dp1.Object.i_psfFlux_flag_apCorr AS i_psfFlux_flag_apCorr_raw, + dp1.Object.i_psfFlux_flag_edge AS i_psfFlux_flag_edge_raw, + dp1.Object.i_psfFlux_flag_noGoodPixels AS i_psfFlux_flag_noGoodPixels_raw, + dp1.Object.i_psfFluxErr AS i_psfFluxErr_raw, + dp1.Object.i_psfMag AS i_psfMag_raw, + dp1.Object.i_psfMagErr AS i_psfMagErr_raw, + dp1.Object.i_psfModel_TwoGaussian_chisq_reduced AS i_psfModel_TwoGaussian_chisq_reduced_raw, + dp1.Object.i_psfModel_TwoGaussian_gauss1_fluxfrac AS i_psfModel_TwoGaussian_gauss1_fluxfrac_raw, + dp1.Object.i_psfModel_TwoGaussian_gauss1_rho AS i_psfModel_TwoGaussian_gauss1_rho_raw, + dp1.Object.i_psfModel_TwoGaussian_gauss1_sigma_x AS i_psfModel_TwoGaussian_gauss1_sigma_x_raw, + dp1.Object.i_psfModel_TwoGaussian_gauss1_sigma_y AS i_psfModel_TwoGaussian_gauss1_sigma_y_raw, + dp1.Object.i_psfModel_TwoGaussian_gauss2_rho AS i_psfModel_TwoGaussian_gauss2_rho_raw, + dp1.Object.i_psfModel_TwoGaussian_gauss2_sigma_x AS i_psfModel_TwoGaussian_gauss2_sigma_x_raw, + dp1.Object.i_psfModel_TwoGaussian_gauss2_sigma_y AS i_psfModel_TwoGaussian_gauss2_sigma_y_raw, + dp1.Object.i_psfModel_TwoGaussian_n_iter AS i_psfModel_TwoGaussian_n_iter_raw, + dp1.Object.i_psfModel_TwoGaussian_no_inputs_flag AS i_psfModel_TwoGaussian_no_inputs_flag_raw, + dp1.Object.i_psfModel_TwoGaussian_unknown_flag AS i_psfModel_TwoGaussian_unknown_flag_raw, + dp1.Object.i_ra AS i_ra_raw, + dp1.Object.i_ra_dec_Cov AS i_ra_dec_Cov_raw, + dp1.Object.i_raErr AS i_raErr_raw, + dp1.Object.i_sersicFlux AS i_sersicFlux_raw, + dp1.Object.i_sersicFluxErr AS i_sersicFluxErr_raw, + dp1.Object.i_sizeExtendedness AS i_sizeExtendedness_raw, + dp1.Object.i_sizeExtendedness_flag AS i_sizeExtendedness_flag_raw, + dp1.Object.objectId AS objectId_raw, + dp1.Object.parentObjectId AS parentObjectId_raw, + dp1.Object.patch AS patch_raw, + dp1.Object.r_ap03Flux AS r_ap03Flux_raw, + dp1.Object.r_ap03Flux_flag AS r_ap03Flux_flag_raw, + dp1.Object.r_ap03FluxErr AS r_ap03FluxErr_raw, + dp1.Object.r_ap06Flux AS r_ap06Flux_raw, + dp1.Object.r_ap06Flux_flag AS r_ap06Flux_flag_raw, + dp1.Object.r_ap06FluxErr AS r_ap06FluxErr_raw, + dp1.Object.r_ap09Flux AS r_ap09Flux_raw, + dp1.Object.r_ap09Flux_flag AS r_ap09Flux_flag_raw, + dp1.Object.r_ap09FluxErr AS r_ap09FluxErr_raw, + dp1.Object.r_ap12Flux AS r_ap12Flux_raw, + dp1.Object.r_ap12Flux_flag AS r_ap12Flux_flag_raw, + dp1.Object.r_ap12FluxErr AS r_ap12FluxErr_raw, + dp1.Object.r_ap17Flux AS r_ap17Flux_raw, + dp1.Object.r_ap17Flux_flag AS r_ap17Flux_flag_raw, + dp1.Object.r_ap17FluxErr AS r_ap17FluxErr_raw, + dp1.Object.r_ap25Flux AS r_ap25Flux_raw, + dp1.Object.r_ap25Flux_flag AS r_ap25Flux_flag_raw, + dp1.Object.r_ap25FluxErr AS r_ap25FluxErr_raw, + dp1.Object.r_ap35Flux AS r_ap35Flux_raw, + dp1.Object.r_ap35Flux_flag AS r_ap35Flux_flag_raw, + dp1.Object.r_ap35FluxErr AS r_ap35FluxErr_raw, + dp1.Object.r_ap50Flux AS r_ap50Flux_raw, + dp1.Object.r_ap50Flux_flag AS r_ap50Flux_flag_raw, + dp1.Object.r_ap50FluxErr AS r_ap50FluxErr_raw, + dp1.Object.r_ap70Flux AS r_ap70Flux_raw, + dp1.Object.r_ap70Flux_flag AS r_ap70Flux_flag_raw, + dp1.Object.r_ap70FluxErr AS r_ap70FluxErr_raw, + dp1.Object.r_apFlux_flag AS r_apFlux_flag_raw, + dp1.Object.r_apFlux_flag_apertureTruncated AS r_apFlux_flag_apertureTruncated_raw, + dp1.Object.r_apFlux_flag_sincCoeffsTruncated AS r_apFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.r_bdChi2 AS r_bdChi2_raw, + dp1.Object.r_bdE1 AS r_bdE1_raw, + dp1.Object.r_bdE2 AS r_bdE2_raw, + dp1.Object.r_bdFluxB AS r_bdFluxB_raw, + dp1.Object.r_bdFluxBErr AS r_bdFluxBErr_raw, + dp1.Object.r_bdFluxD AS r_bdFluxD_raw, + dp1.Object.r_bdFluxDErr AS r_bdFluxDErr_raw, + dp1.Object.r_bdReB AS r_bdReB_raw, + dp1.Object.r_bdReD AS r_bdReD_raw, + dp1.Object.r_blendedness AS r_blendedness_raw, + dp1.Object.r_blendedness_flag AS r_blendedness_flag_raw, + dp1.Object.r_calib_astrometry_used AS r_calib_astrometry_used_raw, + dp1.Object.r_calib_photometry_reserved AS r_calib_photometry_reserved_raw, + dp1.Object.r_calib_photometry_used AS r_calib_photometry_used_raw, + dp1.Object.r_calib_psf_candidate AS r_calib_psf_candidate_raw, + dp1.Object.r_calib_psf_reserved AS r_calib_psf_reserved_raw, + dp1.Object.r_calib_psf_used AS r_calib_psf_used_raw, + dp1.Object.r_calibFlux AS r_calibFlux_raw, + dp1.Object.r_calibFlux_flag AS r_calibFlux_flag_raw, + dp1.Object.r_calibFlux_flag_apertureTruncated AS r_calibFlux_flag_apertureTruncated_raw, + dp1.Object.r_calibFlux_flag_sincCoeffsTruncated AS r_calibFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.r_calibFluxErr AS r_calibFluxErr_raw, + dp1.Object.r_centroid_flag AS r_centroid_flag_raw, + dp1.Object.r_centroid_x AS r_centroid_x_raw, + dp1.Object.r_centroid_xErr AS r_centroid_xErr_raw, + dp1.Object.r_centroid_y AS r_centroid_y_raw, + dp1.Object.r_centroid_yErr AS r_centroid_yErr_raw, + dp1.Object.r_cModel_flag AS r_cModel_flag_raw, + dp1.Object.r_cModel_flag_apCorr AS r_cModel_flag_apCorr_raw, + dp1.Object.r_cModelFlux AS r_cModelFlux_raw, + dp1.Object.r_cModelFlux_inner AS r_cModelFlux_inner_raw, + dp1.Object.r_cModelFluxErr AS r_cModelFluxErr_raw, + dp1.Object.r_cModelMag AS r_cModelMag_raw, + dp1.Object.r_cModelMagErr AS r_cModelMagErr_raw, + dp1.Object.r_deblend_blendedness AS r_deblend_blendedness_raw, + dp1.Object.r_deblend_dataCoverage AS r_deblend_dataCoverage_raw, + dp1.Object.r_deblend_fluxOverlap AS r_deblend_fluxOverlap_raw, + dp1.Object.r_deblend_fluxOverlapFraction AS r_deblend_fluxOverlapFraction_raw, + dp1.Object.r_deblend_zeroFlux AS r_deblend_zeroFlux_raw, + dp1.Object.r_dec AS r_dec_raw, + dp1.Object.r_decErr AS r_decErr_raw, + dp1.Object.r_epoch AS r_epoch_raw, + dp1.Object.r_extendedness AS r_extendedness_raw, + dp1.Object.r_extendedness_flag AS r_extendedness_flag_raw, + dp1.Object.r_free_cModelFlux AS r_free_cModelFlux_raw, + dp1.Object.r_free_cModelFlux_flag AS r_free_cModelFlux_flag_raw, + dp1.Object.r_free_cModelFlux_inner AS r_free_cModelFlux_inner_raw, + dp1.Object.r_free_cModelFluxErr AS r_free_cModelFluxErr_raw, + dp1.Object.r_free_psfFlux AS r_free_psfFlux_raw, + dp1.Object.r_free_psfFlux_flag AS r_free_psfFlux_flag_raw, + dp1.Object.r_free_psfFluxErr AS r_free_psfFluxErr_raw, + dp1.Object.r_gaap0p7Flux AS r_gaap0p7Flux_raw, + dp1.Object.r_gaap0p7Flux_flag_bigPsf AS r_gaap0p7Flux_flag_bigPsf_raw, + dp1.Object.r_gaap0p7FluxErr AS r_gaap0p7FluxErr_raw, + dp1.Object.r_gaap1p0Flux AS r_gaap1p0Flux_raw, + dp1.Object.r_gaap1p0Flux_flag_bigPsf AS r_gaap1p0Flux_flag_bigPsf_raw, + dp1.Object.r_gaap1p0FluxErr AS r_gaap1p0FluxErr_raw, + dp1.Object.r_gaap1p5Flux AS r_gaap1p5Flux_raw, + dp1.Object.r_gaap1p5Flux_flag_bigPsf AS r_gaap1p5Flux_flag_bigPsf_raw, + dp1.Object.r_gaap1p5FluxErr AS r_gaap1p5FluxErr_raw, + dp1.Object.r_gaap2p5Flux AS r_gaap2p5Flux_raw, + dp1.Object.r_gaap2p5Flux_flag_bigPsf AS r_gaap2p5Flux_flag_bigPsf_raw, + dp1.Object.r_gaap2p5FluxErr AS r_gaap2p5FluxErr_raw, + dp1.Object.r_gaap3p0Flux AS r_gaap3p0Flux_raw, + dp1.Object.r_gaap3p0Flux_flag_bigPsf AS r_gaap3p0Flux_flag_bigPsf_raw, + dp1.Object.r_gaap3p0FluxErr AS r_gaap3p0FluxErr_raw, + dp1.Object.r_gaapFlux_flag AS r_gaapFlux_flag_raw, + dp1.Object.r_gaapFlux_flag_edge AS r_gaapFlux_flag_edge_raw, + dp1.Object.r_gaapFlux_flag_gaussianization AS r_gaapFlux_flag_gaussianization_raw, + dp1.Object.r_gaapOptimalFlux AS r_gaapOptimalFlux_raw, + dp1.Object.r_gaapOptimalFlux_flag_bigPsf AS r_gaapOptimalFlux_flag_bigPsf_raw, + dp1.Object.r_gaapOptimalFluxErr AS r_gaapOptimalFluxErr_raw, + dp1.Object.r_gaapPsfFlux AS r_gaapPsfFlux_raw, + dp1.Object.r_gaapPsfFluxErr AS r_gaapPsfFluxErr_raw, + dp1.Object.r_hsm_moments_03 AS r_hsm_moments_03_raw, + dp1.Object.r_hsm_moments_04 AS r_hsm_moments_04_raw, + dp1.Object.r_hsm_moments_12 AS r_hsm_moments_12_raw, + dp1.Object.r_hsm_moments_13 AS r_hsm_moments_13_raw, + dp1.Object.r_hsm_moments_21 AS r_hsm_moments_21_raw, + dp1.Object.r_hsm_moments_22 AS r_hsm_moments_22_raw, + dp1.Object.r_hsm_moments_30 AS r_hsm_moments_30_raw, + dp1.Object.r_hsm_moments_31 AS r_hsm_moments_31_raw, + dp1.Object.r_hsm_moments_40 AS r_hsm_moments_40_raw, + dp1.Object.r_hsm_moments_flag AS r_hsm_moments_flag_raw, + dp1.Object.r_hsm_momentsPsf_03 AS r_hsm_momentsPsf_03_raw, + dp1.Object.r_hsm_momentsPsf_04 AS r_hsm_momentsPsf_04_raw, + dp1.Object.r_hsm_momentsPsf_12 AS r_hsm_momentsPsf_12_raw, + dp1.Object.r_hsm_momentsPsf_13 AS r_hsm_momentsPsf_13_raw, + dp1.Object.r_hsm_momentsPsf_21 AS r_hsm_momentsPsf_21_raw, + dp1.Object.r_hsm_momentsPsf_22 AS r_hsm_momentsPsf_22_raw, + dp1.Object.r_hsm_momentsPsf_30 AS r_hsm_momentsPsf_30_raw, + dp1.Object.r_hsm_momentsPsf_31 AS r_hsm_momentsPsf_31_raw, + dp1.Object.r_hsm_momentsPsf_40 AS r_hsm_momentsPsf_40_raw, + dp1.Object.r_hsm_momentsPsf_flag AS r_hsm_momentsPsf_flag_raw, + dp1.Object.r_hsmShapeRegauss_e1 AS r_hsmShapeRegauss_e1_raw, + dp1.Object.r_hsmShapeRegauss_e2 AS r_hsmShapeRegauss_e2_raw, + dp1.Object.r_hsmShapeRegauss_flag AS r_hsmShapeRegauss_flag_raw, + dp1.Object.r_hsmShapeRegauss_sigma AS r_hsmShapeRegauss_sigma_raw, + dp1.Object.r_i_flag AS r_i_flag_raw, + dp1.Object.r_iDebiasedPSF_flag AS r_iDebiasedPSF_flag_raw, + dp1.Object.r_inputCount AS r_inputCount_raw, + dp1.Object.r_inputCount_flag AS r_inputCount_flag_raw, + dp1.Object.r_inputCount_flag_noInputs AS r_inputCount_flag_noInputs_raw, + dp1.Object.r_invalidPsfFlag AS r_invalidPsfFlag_raw, + dp1.Object.r_iPSF_flag AS r_iPSF_flag_raw, + dp1.Object.r_iRound_flag AS r_iRound_flag_raw, + dp1.Object.r_ixx AS r_ixx_raw, + dp1.Object.r_ixxDebiasedPSF AS r_ixxDebiasedPSF_raw, + dp1.Object.r_ixxPSF AS r_ixxPSF_raw, + dp1.Object.r_ixxRound AS r_ixxRound_raw, + dp1.Object.r_ixy AS r_ixy_raw, + dp1.Object.r_ixyDebiasedPSF AS r_ixyDebiasedPSF_raw, + dp1.Object.r_ixyPSF AS r_ixyPSF_raw, + dp1.Object.r_ixyRound AS r_ixyRound_raw, + dp1.Object.r_iyy AS r_iyy_raw, + dp1.Object.r_iyyDebiasedPSF AS r_iyyDebiasedPSF_raw, + dp1.Object.r_iyyPSF AS r_iyyPSF_raw, + dp1.Object.r_iyyRound AS r_iyyRound_raw, + dp1.Object.r_kronFlux AS r_kronFlux_raw, + dp1.Object.r_kronFlux_flag AS r_kronFlux_flag_raw, + dp1.Object.r_kronFlux_flag_bad_radius AS r_kronFlux_flag_bad_radius_raw, + dp1.Object.r_kronFlux_flag_bad_shape AS r_kronFlux_flag_bad_shape_raw, + dp1.Object.r_kronFlux_flag_bad_shape_no_psf AS r_kronFlux_flag_bad_shape_no_psf_raw, + dp1.Object.r_kronFlux_flag_edge AS r_kronFlux_flag_edge_raw, + dp1.Object.r_kronFlux_flag_no_fallback_radius AS r_kronFlux_flag_no_fallback_radius_raw, + dp1.Object.r_kronFlux_flag_no_minimum_radius AS r_kronFlux_flag_no_minimum_radius_raw, + dp1.Object.r_kronFlux_flag_small_radius AS r_kronFlux_flag_small_radius_raw, + dp1.Object.r_kronFlux_flag_used_minimum_radius AS r_kronFlux_flag_used_minimum_radius_raw, + dp1.Object.r_kronFlux_flag_used_psf_radius AS r_kronFlux_flag_used_psf_radius_raw, + dp1.Object.r_kronFluxErr AS r_kronFluxErr_raw, + dp1.Object.r_kronRad AS r_kronRad_raw, + dp1.Object.r_pixelFlags_bad AS r_pixelFlags_bad_raw, + dp1.Object.r_pixelFlags_clipped AS r_pixelFlags_clipped_raw, + dp1.Object.r_pixelFlags_clippedCenter AS r_pixelFlags_clippedCenter_raw, + dp1.Object.r_pixelFlags_cr AS r_pixelFlags_cr_raw, + dp1.Object.r_pixelFlags_crCenter AS r_pixelFlags_crCenter_raw, + dp1.Object.r_pixelFlags_edge AS r_pixelFlags_edge_raw, + dp1.Object.r_pixelFlags_inexact_psf AS r_pixelFlags_inexact_psf_raw, + dp1.Object.r_pixelFlags_inexact_psfCenter AS r_pixelFlags_inexact_psfCenter_raw, + dp1.Object.r_pixelFlags_interpolated AS r_pixelFlags_interpolated_raw, + dp1.Object.r_pixelFlags_interpolatedCenter AS r_pixelFlags_interpolatedCenter_raw, + dp1.Object.r_pixelFlags_nodata AS r_pixelFlags_nodata_raw, + dp1.Object.r_pixelFlags_offimage AS r_pixelFlags_offimage_raw, + dp1.Object.r_pixelFlags_saturated AS r_pixelFlags_saturated_raw, + dp1.Object.r_pixelFlags_saturatedCenter AS r_pixelFlags_saturatedCenter_raw, + dp1.Object.r_pixelFlags_sensor_edge AS r_pixelFlags_sensor_edge_raw, + dp1.Object.r_pixelFlags_sensor_edgeCenter AS r_pixelFlags_sensor_edgeCenter_raw, + dp1.Object.r_pixelFlags_suspect AS r_pixelFlags_suspect_raw, + dp1.Object.r_pixelFlags_suspectCenter AS r_pixelFlags_suspectCenter_raw, + dp1.Object.r_psfFlux AS r_psfFlux_raw, + dp1.Object.r_psfFlux_area AS r_psfFlux_area_raw, + dp1.Object.r_psfFlux_flag AS r_psfFlux_flag_raw, + dp1.Object.r_psfFlux_flag_apCorr AS r_psfFlux_flag_apCorr_raw, + dp1.Object.r_psfFlux_flag_edge AS r_psfFlux_flag_edge_raw, + dp1.Object.r_psfFlux_flag_noGoodPixels AS r_psfFlux_flag_noGoodPixels_raw, + dp1.Object.r_psfFluxErr AS r_psfFluxErr_raw, + dp1.Object.r_psfMag AS r_psfMag_raw, + dp1.Object.r_psfMagErr AS r_psfMagErr_raw, + dp1.Object.r_psfModel_TwoGaussian_chisq_reduced AS r_psfModel_TwoGaussian_chisq_reduced_raw, + dp1.Object.r_psfModel_TwoGaussian_gauss1_fluxfrac AS r_psfModel_TwoGaussian_gauss1_fluxfrac_raw, + dp1.Object.r_psfModel_TwoGaussian_gauss1_rho AS r_psfModel_TwoGaussian_gauss1_rho_raw, + dp1.Object.r_psfModel_TwoGaussian_gauss1_sigma_x AS r_psfModel_TwoGaussian_gauss1_sigma_x_raw, + dp1.Object.r_psfModel_TwoGaussian_gauss1_sigma_y AS r_psfModel_TwoGaussian_gauss1_sigma_y_raw, + dp1.Object.r_psfModel_TwoGaussian_gauss2_rho AS r_psfModel_TwoGaussian_gauss2_rho_raw, + dp1.Object.r_psfModel_TwoGaussian_gauss2_sigma_x AS r_psfModel_TwoGaussian_gauss2_sigma_x_raw, + dp1.Object.r_psfModel_TwoGaussian_gauss2_sigma_y AS r_psfModel_TwoGaussian_gauss2_sigma_y_raw, + dp1.Object.r_psfModel_TwoGaussian_n_iter AS r_psfModel_TwoGaussian_n_iter_raw, + dp1.Object.r_psfModel_TwoGaussian_no_inputs_flag AS r_psfModel_TwoGaussian_no_inputs_flag_raw, + dp1.Object.r_psfModel_TwoGaussian_unknown_flag AS r_psfModel_TwoGaussian_unknown_flag_raw, + dp1.Object.r_ra AS r_ra_raw, + dp1.Object.r_ra_dec_Cov AS r_ra_dec_Cov_raw, + dp1.Object.r_raErr AS r_raErr_raw, + dp1.Object.r_sersicFlux AS r_sersicFlux_raw, + dp1.Object.r_sersicFluxErr AS r_sersicFluxErr_raw, + dp1.Object.r_sizeExtendedness AS r_sizeExtendedness_raw, + dp1.Object.r_sizeExtendedness_flag AS r_sizeExtendedness_flag_raw, + dp1.Object.refBand AS refBand_raw, + dp1.Object.refExtendedness AS refExtendedness_raw, + dp1.Object.refSizeExtendedness AS refSizeExtendedness_raw, + dp1.Object.sersic_chisq_reduced AS sersic_chisq_reduced_raw, + dp1.Object.sersic_dec AS sersic_dec_raw, + dp1.Object.sersic_decErr AS sersic_decErr_raw, + dp1.Object.sersic_index AS sersic_index_raw, + dp1.Object.sersic_indexErr AS sersic_indexErr_raw, + dp1.Object.sersic_n_eval_jac AS sersic_n_eval_jac_raw, + dp1.Object.sersic_n_iter AS sersic_n_iter_raw, + dp1.Object.sersic_no_data_flag AS sersic_no_data_flag_raw, + dp1.Object.sersic_ra AS sersic_ra_raw, + dp1.Object.sersic_raErr AS sersic_raErr_raw, + dp1.Object.sersic_reff_x AS sersic_reff_x_raw, + dp1.Object.sersic_reff_xErr AS sersic_reff_xErr_raw, + dp1.Object.sersic_reff_y AS sersic_reff_y_raw, + dp1.Object.sersic_reff_yErr AS sersic_reff_yErr_raw, + dp1.Object.sersic_rho AS sersic_rho_raw, + dp1.Object.sersic_rhoErr AS sersic_rhoErr_raw, + dp1.Object.sersic_unknown_flag AS sersic_unknown_flag_raw, + dp1.Object.sersic_x AS sersic_x_raw, + dp1.Object.sersic_xErr AS sersic_xErr_raw, + dp1.Object.sersic_y AS sersic_y_raw, + dp1.Object.sersic_yErr AS sersic_yErr_raw, + dp1.Object.shape_flag AS shape_flag_raw, + dp1.Object.shape_xx AS shape_xx_raw, + dp1.Object.shape_xy AS shape_xy_raw, + dp1.Object.shape_yy AS shape_yy_raw, + dp1.Object.tract AS tract_raw, + dp1.Object.u_ap03Flux AS u_ap03Flux_raw, + dp1.Object.u_ap03Flux_flag AS u_ap03Flux_flag_raw, + dp1.Object.u_ap03FluxErr AS u_ap03FluxErr_raw, + dp1.Object.u_ap06Flux AS u_ap06Flux_raw, + dp1.Object.u_ap06Flux_flag AS u_ap06Flux_flag_raw, + dp1.Object.u_ap06FluxErr AS u_ap06FluxErr_raw, + dp1.Object.u_ap09Flux AS u_ap09Flux_raw, + dp1.Object.u_ap09Flux_flag AS u_ap09Flux_flag_raw, + dp1.Object.u_ap09FluxErr AS u_ap09FluxErr_raw, + dp1.Object.u_ap12Flux AS u_ap12Flux_raw, + dp1.Object.u_ap12Flux_flag AS u_ap12Flux_flag_raw, + dp1.Object.u_ap12FluxErr AS u_ap12FluxErr_raw, + dp1.Object.u_ap17Flux AS u_ap17Flux_raw, + dp1.Object.u_ap17Flux_flag AS u_ap17Flux_flag_raw, + dp1.Object.u_ap17FluxErr AS u_ap17FluxErr_raw, + dp1.Object.u_ap25Flux AS u_ap25Flux_raw, + dp1.Object.u_ap25Flux_flag AS u_ap25Flux_flag_raw, + dp1.Object.u_ap25FluxErr AS u_ap25FluxErr_raw, + dp1.Object.u_ap35Flux AS u_ap35Flux_raw, + dp1.Object.u_ap35Flux_flag AS u_ap35Flux_flag_raw, + dp1.Object.u_ap35FluxErr AS u_ap35FluxErr_raw, + dp1.Object.u_ap50Flux AS u_ap50Flux_raw, + dp1.Object.u_ap50Flux_flag AS u_ap50Flux_flag_raw, + dp1.Object.u_ap50FluxErr AS u_ap50FluxErr_raw, + dp1.Object.u_ap70Flux AS u_ap70Flux_raw, + dp1.Object.u_ap70Flux_flag AS u_ap70Flux_flag_raw, + dp1.Object.u_ap70FluxErr AS u_ap70FluxErr_raw, + dp1.Object.u_apFlux_flag AS u_apFlux_flag_raw, + dp1.Object.u_apFlux_flag_apertureTruncated AS u_apFlux_flag_apertureTruncated_raw, + dp1.Object.u_apFlux_flag_sincCoeffsTruncated AS u_apFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.u_bdChi2 AS u_bdChi2_raw, + dp1.Object.u_bdE1 AS u_bdE1_raw, + dp1.Object.u_bdE2 AS u_bdE2_raw, + dp1.Object.u_bdFluxB AS u_bdFluxB_raw, + dp1.Object.u_bdFluxBErr AS u_bdFluxBErr_raw, + dp1.Object.u_bdFluxD AS u_bdFluxD_raw, + dp1.Object.u_bdFluxDErr AS u_bdFluxDErr_raw, + dp1.Object.u_bdReB AS u_bdReB_raw, + dp1.Object.u_bdReD AS u_bdReD_raw, + dp1.Object.u_blendedness AS u_blendedness_raw, + dp1.Object.u_blendedness_flag AS u_blendedness_flag_raw, + dp1.Object.u_calib_astrometry_used AS u_calib_astrometry_used_raw, + dp1.Object.u_calib_photometry_reserved AS u_calib_photometry_reserved_raw, + dp1.Object.u_calib_photometry_used AS u_calib_photometry_used_raw, + dp1.Object.u_calib_psf_candidate AS u_calib_psf_candidate_raw, + dp1.Object.u_calib_psf_reserved AS u_calib_psf_reserved_raw, + dp1.Object.u_calib_psf_used AS u_calib_psf_used_raw, + dp1.Object.u_calibFlux AS u_calibFlux_raw, + dp1.Object.u_calibFlux_flag AS u_calibFlux_flag_raw, + dp1.Object.u_calibFlux_flag_apertureTruncated AS u_calibFlux_flag_apertureTruncated_raw, + dp1.Object.u_calibFlux_flag_sincCoeffsTruncated AS u_calibFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.u_calibFluxErr AS u_calibFluxErr_raw, + dp1.Object.u_centroid_flag AS u_centroid_flag_raw, + dp1.Object.u_centroid_x AS u_centroid_x_raw, + dp1.Object.u_centroid_xErr AS u_centroid_xErr_raw, + dp1.Object.u_centroid_y AS u_centroid_y_raw, + dp1.Object.u_centroid_yErr AS u_centroid_yErr_raw, + dp1.Object.u_cModel_flag AS u_cModel_flag_raw, + dp1.Object.u_cModel_flag_apCorr AS u_cModel_flag_apCorr_raw, + dp1.Object.u_cModelFlux AS u_cModelFlux_raw, + dp1.Object.u_cModelFlux_inner AS u_cModelFlux_inner_raw, + dp1.Object.u_cModelFluxErr AS u_cModelFluxErr_raw, + dp1.Object.u_cModelMag AS u_cModelMag_raw, + dp1.Object.u_cModelMagErr AS u_cModelMagErr_raw, + dp1.Object.u_deblend_blendedness AS u_deblend_blendedness_raw, + dp1.Object.u_deblend_dataCoverage AS u_deblend_dataCoverage_raw, + dp1.Object.u_deblend_fluxOverlap AS u_deblend_fluxOverlap_raw, + dp1.Object.u_deblend_fluxOverlapFraction AS u_deblend_fluxOverlapFraction_raw, + dp1.Object.u_deblend_zeroFlux AS u_deblend_zeroFlux_raw, + dp1.Object.u_dec AS u_dec_raw, + dp1.Object.u_decErr AS u_decErr_raw, + dp1.Object.u_epoch AS u_epoch_raw, + dp1.Object.u_extendedness AS u_extendedness_raw, + dp1.Object.u_extendedness_flag AS u_extendedness_flag_raw, + dp1.Object.u_free_cModelFlux AS u_free_cModelFlux_raw, + dp1.Object.u_free_cModelFlux_flag AS u_free_cModelFlux_flag_raw, + dp1.Object.u_free_cModelFlux_inner AS u_free_cModelFlux_inner_raw, + dp1.Object.u_free_cModelFluxErr AS u_free_cModelFluxErr_raw, + dp1.Object.u_free_psfFlux AS u_free_psfFlux_raw, + dp1.Object.u_free_psfFlux_flag AS u_free_psfFlux_flag_raw, + dp1.Object.u_free_psfFluxErr AS u_free_psfFluxErr_raw, + dp1.Object.u_gaap0p7Flux AS u_gaap0p7Flux_raw, + dp1.Object.u_gaap0p7Flux_flag_bigPsf AS u_gaap0p7Flux_flag_bigPsf_raw, + dp1.Object.u_gaap0p7FluxErr AS u_gaap0p7FluxErr_raw, + dp1.Object.u_gaap1p0Flux AS u_gaap1p0Flux_raw, + dp1.Object.u_gaap1p0Flux_flag_bigPsf AS u_gaap1p0Flux_flag_bigPsf_raw, + dp1.Object.u_gaap1p0FluxErr AS u_gaap1p0FluxErr_raw, + dp1.Object.u_gaap1p5Flux AS u_gaap1p5Flux_raw, + dp1.Object.u_gaap1p5Flux_flag_bigPsf AS u_gaap1p5Flux_flag_bigPsf_raw, + dp1.Object.u_gaap1p5FluxErr AS u_gaap1p5FluxErr_raw, + dp1.Object.u_gaap2p5Flux AS u_gaap2p5Flux_raw, + dp1.Object.u_gaap2p5Flux_flag_bigPsf AS u_gaap2p5Flux_flag_bigPsf_raw, + dp1.Object.u_gaap2p5FluxErr AS u_gaap2p5FluxErr_raw, + dp1.Object.u_gaap3p0Flux AS u_gaap3p0Flux_raw, + dp1.Object.u_gaap3p0Flux_flag_bigPsf AS u_gaap3p0Flux_flag_bigPsf_raw, + dp1.Object.u_gaap3p0FluxErr AS u_gaap3p0FluxErr_raw, + dp1.Object.u_gaapFlux_flag AS u_gaapFlux_flag_raw, + dp1.Object.u_gaapFlux_flag_edge AS u_gaapFlux_flag_edge_raw, + dp1.Object.u_gaapFlux_flag_gaussianization AS u_gaapFlux_flag_gaussianization_raw, + dp1.Object.u_gaapOptimalFlux AS u_gaapOptimalFlux_raw, + dp1.Object.u_gaapOptimalFlux_flag_bigPsf AS u_gaapOptimalFlux_flag_bigPsf_raw, + dp1.Object.u_gaapOptimalFluxErr AS u_gaapOptimalFluxErr_raw, + dp1.Object.u_gaapPsfFlux AS u_gaapPsfFlux_raw, + dp1.Object.u_gaapPsfFluxErr AS u_gaapPsfFluxErr_raw, + dp1.Object.u_hsm_moments_03 AS u_hsm_moments_03_raw, + dp1.Object.u_hsm_moments_04 AS u_hsm_moments_04_raw, + dp1.Object.u_hsm_moments_12 AS u_hsm_moments_12_raw, + dp1.Object.u_hsm_moments_13 AS u_hsm_moments_13_raw, + dp1.Object.u_hsm_moments_21 AS u_hsm_moments_21_raw, + dp1.Object.u_hsm_moments_22 AS u_hsm_moments_22_raw, + dp1.Object.u_hsm_moments_30 AS u_hsm_moments_30_raw, + dp1.Object.u_hsm_moments_31 AS u_hsm_moments_31_raw, + dp1.Object.u_hsm_moments_40 AS u_hsm_moments_40_raw, + dp1.Object.u_hsm_moments_flag AS u_hsm_moments_flag_raw, + dp1.Object.u_hsm_momentsPsf_03 AS u_hsm_momentsPsf_03_raw, + dp1.Object.u_hsm_momentsPsf_04 AS u_hsm_momentsPsf_04_raw, + dp1.Object.u_hsm_momentsPsf_12 AS u_hsm_momentsPsf_12_raw, + dp1.Object.u_hsm_momentsPsf_13 AS u_hsm_momentsPsf_13_raw, + dp1.Object.u_hsm_momentsPsf_21 AS u_hsm_momentsPsf_21_raw, + dp1.Object.u_hsm_momentsPsf_22 AS u_hsm_momentsPsf_22_raw, + dp1.Object.u_hsm_momentsPsf_30 AS u_hsm_momentsPsf_30_raw, + dp1.Object.u_hsm_momentsPsf_31 AS u_hsm_momentsPsf_31_raw, + dp1.Object.u_hsm_momentsPsf_40 AS u_hsm_momentsPsf_40_raw, + dp1.Object.u_hsm_momentsPsf_flag AS u_hsm_momentsPsf_flag_raw, + dp1.Object.u_hsmShapeRegauss_e1 AS u_hsmShapeRegauss_e1_raw, + dp1.Object.u_hsmShapeRegauss_e2 AS u_hsmShapeRegauss_e2_raw, + dp1.Object.u_hsmShapeRegauss_flag AS u_hsmShapeRegauss_flag_raw, + dp1.Object.u_hsmShapeRegauss_sigma AS u_hsmShapeRegauss_sigma_raw, + dp1.Object.u_i_flag AS u_i_flag_raw, + dp1.Object.u_iDebiasedPSF_flag AS u_iDebiasedPSF_flag_raw, + dp1.Object.u_inputCount AS u_inputCount_raw, + dp1.Object.u_inputCount_flag AS u_inputCount_flag_raw, + dp1.Object.u_inputCount_flag_noInputs AS u_inputCount_flag_noInputs_raw, + dp1.Object.u_invalidPsfFlag AS u_invalidPsfFlag_raw, + dp1.Object.u_iPSF_flag AS u_iPSF_flag_raw, + dp1.Object.u_iRound_flag AS u_iRound_flag_raw, + dp1.Object.u_ixx AS u_ixx_raw, + dp1.Object.u_ixxDebiasedPSF AS u_ixxDebiasedPSF_raw, + dp1.Object.u_ixxPSF AS u_ixxPSF_raw, + dp1.Object.u_ixxRound AS u_ixxRound_raw, + dp1.Object.u_ixy AS u_ixy_raw, + dp1.Object.u_ixyDebiasedPSF AS u_ixyDebiasedPSF_raw, + dp1.Object.u_ixyPSF AS u_ixyPSF_raw, + dp1.Object.u_ixyRound AS u_ixyRound_raw, + dp1.Object.u_iyy AS u_iyy_raw, + dp1.Object.u_iyyDebiasedPSF AS u_iyyDebiasedPSF_raw, + dp1.Object.u_iyyPSF AS u_iyyPSF_raw, + dp1.Object.u_iyyRound AS u_iyyRound_raw, + dp1.Object.u_kronFlux AS u_kronFlux_raw, + dp1.Object.u_kronFlux_flag AS u_kronFlux_flag_raw, + dp1.Object.u_kronFlux_flag_bad_radius AS u_kronFlux_flag_bad_radius_raw, + dp1.Object.u_kronFlux_flag_bad_shape AS u_kronFlux_flag_bad_shape_raw, + dp1.Object.u_kronFlux_flag_bad_shape_no_psf AS u_kronFlux_flag_bad_shape_no_psf_raw, + dp1.Object.u_kronFlux_flag_edge AS u_kronFlux_flag_edge_raw, + dp1.Object.u_kronFlux_flag_no_fallback_radius AS u_kronFlux_flag_no_fallback_radius_raw, + dp1.Object.u_kronFlux_flag_no_minimum_radius AS u_kronFlux_flag_no_minimum_radius_raw, + dp1.Object.u_kronFlux_flag_small_radius AS u_kronFlux_flag_small_radius_raw, + dp1.Object.u_kronFlux_flag_used_minimum_radius AS u_kronFlux_flag_used_minimum_radius_raw, + dp1.Object.u_kronFlux_flag_used_psf_radius AS u_kronFlux_flag_used_psf_radius_raw, + dp1.Object.u_kronFluxErr AS u_kronFluxErr_raw, + dp1.Object.u_kronRad AS u_kronRad_raw, + dp1.Object.u_pixelFlags_bad AS u_pixelFlags_bad_raw, + dp1.Object.u_pixelFlags_clipped AS u_pixelFlags_clipped_raw, + dp1.Object.u_pixelFlags_clippedCenter AS u_pixelFlags_clippedCenter_raw, + dp1.Object.u_pixelFlags_cr AS u_pixelFlags_cr_raw, + dp1.Object.u_pixelFlags_crCenter AS u_pixelFlags_crCenter_raw, + dp1.Object.u_pixelFlags_edge AS u_pixelFlags_edge_raw, + dp1.Object.u_pixelFlags_inexact_psf AS u_pixelFlags_inexact_psf_raw, + dp1.Object.u_pixelFlags_inexact_psfCenter AS u_pixelFlags_inexact_psfCenter_raw, + dp1.Object.u_pixelFlags_interpolated AS u_pixelFlags_interpolated_raw, + dp1.Object.u_pixelFlags_interpolatedCenter AS u_pixelFlags_interpolatedCenter_raw, + dp1.Object.u_pixelFlags_nodata AS u_pixelFlags_nodata_raw, + dp1.Object.u_pixelFlags_offimage AS u_pixelFlags_offimage_raw, + dp1.Object.u_pixelFlags_saturated AS u_pixelFlags_saturated_raw, + dp1.Object.u_pixelFlags_saturatedCenter AS u_pixelFlags_saturatedCenter_raw, + dp1.Object.u_pixelFlags_sensor_edge AS u_pixelFlags_sensor_edge_raw, + dp1.Object.u_pixelFlags_sensor_edgeCenter AS u_pixelFlags_sensor_edgeCenter_raw, + dp1.Object.u_pixelFlags_suspect AS u_pixelFlags_suspect_raw, + dp1.Object.u_pixelFlags_suspectCenter AS u_pixelFlags_suspectCenter_raw, + dp1.Object.u_psfFlux AS u_psfFlux_raw, + dp1.Object.u_psfFlux_area AS u_psfFlux_area_raw, + dp1.Object.u_psfFlux_flag AS u_psfFlux_flag_raw, + dp1.Object.u_psfFlux_flag_apCorr AS u_psfFlux_flag_apCorr_raw, + dp1.Object.u_psfFlux_flag_edge AS u_psfFlux_flag_edge_raw, + dp1.Object.u_psfFlux_flag_noGoodPixels AS u_psfFlux_flag_noGoodPixels_raw, + dp1.Object.u_psfFluxErr AS u_psfFluxErr_raw, + dp1.Object.u_psfMag AS u_psfMag_raw, + dp1.Object.u_psfMagErr AS u_psfMagErr_raw, + dp1.Object.u_psfModel_TwoGaussian_chisq_reduced AS u_psfModel_TwoGaussian_chisq_reduced_raw, + dp1.Object.u_psfModel_TwoGaussian_gauss1_fluxfrac AS u_psfModel_TwoGaussian_gauss1_fluxfrac_raw, + dp1.Object.u_psfModel_TwoGaussian_gauss1_rho AS u_psfModel_TwoGaussian_gauss1_rho_raw, + dp1.Object.u_psfModel_TwoGaussian_gauss1_sigma_x AS u_psfModel_TwoGaussian_gauss1_sigma_x_raw, + dp1.Object.u_psfModel_TwoGaussian_gauss1_sigma_y AS u_psfModel_TwoGaussian_gauss1_sigma_y_raw, + dp1.Object.u_psfModel_TwoGaussian_gauss2_rho AS u_psfModel_TwoGaussian_gauss2_rho_raw, + dp1.Object.u_psfModel_TwoGaussian_gauss2_sigma_x AS u_psfModel_TwoGaussian_gauss2_sigma_x_raw, + dp1.Object.u_psfModel_TwoGaussian_gauss2_sigma_y AS u_psfModel_TwoGaussian_gauss2_sigma_y_raw, + dp1.Object.u_psfModel_TwoGaussian_n_iter AS u_psfModel_TwoGaussian_n_iter_raw, + dp1.Object.u_psfModel_TwoGaussian_no_inputs_flag AS u_psfModel_TwoGaussian_no_inputs_flag_raw, + dp1.Object.u_psfModel_TwoGaussian_unknown_flag AS u_psfModel_TwoGaussian_unknown_flag_raw, + dp1.Object.u_ra AS u_ra_raw, + dp1.Object.u_ra_dec_Cov AS u_ra_dec_Cov_raw, + dp1.Object.u_raErr AS u_raErr_raw, + dp1.Object.u_sersicFlux AS u_sersicFlux_raw, + dp1.Object.u_sersicFluxErr AS u_sersicFluxErr_raw, + dp1.Object.u_sizeExtendedness AS u_sizeExtendedness_raw, + dp1.Object.u_sizeExtendedness_flag AS u_sizeExtendedness_flag_raw, + dp1.Object.x AS x_raw, + dp1.Object.xErr AS xErr_raw, + dp1.Object.xy_flag AS xy_flag_raw, + dp1.Object.y AS y_raw, + dp1.Object.y_ap03Flux AS y_ap03Flux_raw, + dp1.Object.y_ap03Flux_flag AS y_ap03Flux_flag_raw, + dp1.Object.y_ap03FluxErr AS y_ap03FluxErr_raw, + dp1.Object.y_ap06Flux AS y_ap06Flux_raw, + dp1.Object.y_ap06Flux_flag AS y_ap06Flux_flag_raw, + dp1.Object.y_ap06FluxErr AS y_ap06FluxErr_raw, + dp1.Object.y_ap09Flux AS y_ap09Flux_raw, + dp1.Object.y_ap09Flux_flag AS y_ap09Flux_flag_raw, + dp1.Object.y_ap09FluxErr AS y_ap09FluxErr_raw, + dp1.Object.y_ap12Flux AS y_ap12Flux_raw, + dp1.Object.y_ap12Flux_flag AS y_ap12Flux_flag_raw, + dp1.Object.y_ap12FluxErr AS y_ap12FluxErr_raw, + dp1.Object.y_ap17Flux AS y_ap17Flux_raw, + dp1.Object.y_ap17Flux_flag AS y_ap17Flux_flag_raw, + dp1.Object.y_ap17FluxErr AS y_ap17FluxErr_raw, + dp1.Object.y_ap25Flux AS y_ap25Flux_raw, + dp1.Object.y_ap25Flux_flag AS y_ap25Flux_flag_raw, + dp1.Object.y_ap25FluxErr AS y_ap25FluxErr_raw, + dp1.Object.y_ap35Flux AS y_ap35Flux_raw, + dp1.Object.y_ap35Flux_flag AS y_ap35Flux_flag_raw, + dp1.Object.y_ap35FluxErr AS y_ap35FluxErr_raw, + dp1.Object.y_ap50Flux AS y_ap50Flux_raw, + dp1.Object.y_ap50Flux_flag AS y_ap50Flux_flag_raw, + dp1.Object.y_ap50FluxErr AS y_ap50FluxErr_raw, + dp1.Object.y_ap70Flux AS y_ap70Flux_raw, + dp1.Object.y_ap70Flux_flag AS y_ap70Flux_flag_raw, + dp1.Object.y_ap70FluxErr AS y_ap70FluxErr_raw, + dp1.Object.y_apFlux_flag AS y_apFlux_flag_raw, + dp1.Object.y_apFlux_flag_apertureTruncated AS y_apFlux_flag_apertureTruncated_raw, + dp1.Object.y_apFlux_flag_sincCoeffsTruncated AS y_apFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.y_bdChi2 AS y_bdChi2_raw, + dp1.Object.y_bdE1 AS y_bdE1_raw, + dp1.Object.y_bdE2 AS y_bdE2_raw, + dp1.Object.y_bdFluxB AS y_bdFluxB_raw, + dp1.Object.y_bdFluxBErr AS y_bdFluxBErr_raw, + dp1.Object.y_bdFluxD AS y_bdFluxD_raw, + dp1.Object.y_bdFluxDErr AS y_bdFluxDErr_raw, + dp1.Object.y_bdReB AS y_bdReB_raw, + dp1.Object.y_bdReD AS y_bdReD_raw, + dp1.Object.y_blendedness AS y_blendedness_raw, + dp1.Object.y_blendedness_flag AS y_blendedness_flag_raw, + dp1.Object.y_calib_astrometry_used AS y_calib_astrometry_used_raw, + dp1.Object.y_calib_photometry_reserved AS y_calib_photometry_reserved_raw, + dp1.Object.y_calib_photometry_used AS y_calib_photometry_used_raw, + dp1.Object.y_calib_psf_candidate AS y_calib_psf_candidate_raw, + dp1.Object.y_calib_psf_reserved AS y_calib_psf_reserved_raw, + dp1.Object.y_calib_psf_used AS y_calib_psf_used_raw, + dp1.Object.y_calibFlux AS y_calibFlux_raw, + dp1.Object.y_calibFlux_flag AS y_calibFlux_flag_raw, + dp1.Object.y_calibFlux_flag_apertureTruncated AS y_calibFlux_flag_apertureTruncated_raw, + dp1.Object.y_calibFlux_flag_sincCoeffsTruncated AS y_calibFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.y_calibFluxErr AS y_calibFluxErr_raw, + dp1.Object.y_centroid_flag AS y_centroid_flag_raw, + dp1.Object.y_centroid_x AS y_centroid_x_raw, + dp1.Object.y_centroid_xErr AS y_centroid_xErr_raw, + dp1.Object.y_centroid_y AS y_centroid_y_raw, + dp1.Object.y_centroid_yErr AS y_centroid_yErr_raw, + dp1.Object.y_cModel_flag AS y_cModel_flag_raw, + dp1.Object.y_cModel_flag_apCorr AS y_cModel_flag_apCorr_raw, + dp1.Object.y_cModelFlux AS y_cModelFlux_raw, + dp1.Object.y_cModelFlux_inner AS y_cModelFlux_inner_raw, + dp1.Object.y_cModelFluxErr AS y_cModelFluxErr_raw, + dp1.Object.y_cModelMag AS y_cModelMag_raw, + dp1.Object.y_cModelMagErr AS y_cModelMagErr_raw, + dp1.Object.y_deblend_blendedness AS y_deblend_blendedness_raw, + dp1.Object.y_deblend_dataCoverage AS y_deblend_dataCoverage_raw, + dp1.Object.y_deblend_fluxOverlap AS y_deblend_fluxOverlap_raw, + dp1.Object.y_deblend_fluxOverlapFraction AS y_deblend_fluxOverlapFraction_raw, + dp1.Object.y_deblend_zeroFlux AS y_deblend_zeroFlux_raw, + dp1.Object.y_dec AS y_dec_raw, + dp1.Object.y_decErr AS y_decErr_raw, + dp1.Object.y_epoch AS y_epoch_raw, + dp1.Object.y_extendedness AS y_extendedness_raw, + dp1.Object.y_extendedness_flag AS y_extendedness_flag_raw, + dp1.Object.y_free_cModelFlux AS y_free_cModelFlux_raw, + dp1.Object.y_free_cModelFlux_flag AS y_free_cModelFlux_flag_raw, + dp1.Object.y_free_cModelFlux_inner AS y_free_cModelFlux_inner_raw, + dp1.Object.y_free_cModelFluxErr AS y_free_cModelFluxErr_raw, + dp1.Object.y_free_psfFlux AS y_free_psfFlux_raw, + dp1.Object.y_free_psfFlux_flag AS y_free_psfFlux_flag_raw, + dp1.Object.y_free_psfFluxErr AS y_free_psfFluxErr_raw, + dp1.Object.y_gaap0p7Flux AS y_gaap0p7Flux_raw, + dp1.Object.y_gaap0p7Flux_flag_bigPsf AS y_gaap0p7Flux_flag_bigPsf_raw, + dp1.Object.y_gaap0p7FluxErr AS y_gaap0p7FluxErr_raw, + dp1.Object.y_gaap1p0Flux AS y_gaap1p0Flux_raw, + dp1.Object.y_gaap1p0Flux_flag_bigPsf AS y_gaap1p0Flux_flag_bigPsf_raw, + dp1.Object.y_gaap1p0FluxErr AS y_gaap1p0FluxErr_raw, + dp1.Object.y_gaap1p5Flux AS y_gaap1p5Flux_raw, + dp1.Object.y_gaap1p5Flux_flag_bigPsf AS y_gaap1p5Flux_flag_bigPsf_raw, + dp1.Object.y_gaap1p5FluxErr AS y_gaap1p5FluxErr_raw, + dp1.Object.y_gaap2p5Flux AS y_gaap2p5Flux_raw, + dp1.Object.y_gaap2p5Flux_flag_bigPsf AS y_gaap2p5Flux_flag_bigPsf_raw, + dp1.Object.y_gaap2p5FluxErr AS y_gaap2p5FluxErr_raw, + dp1.Object.y_gaap3p0Flux AS y_gaap3p0Flux_raw, + dp1.Object.y_gaap3p0Flux_flag_bigPsf AS y_gaap3p0Flux_flag_bigPsf_raw, + dp1.Object.y_gaap3p0FluxErr AS y_gaap3p0FluxErr_raw, + dp1.Object.y_gaapFlux_flag AS y_gaapFlux_flag_raw, + dp1.Object.y_gaapFlux_flag_edge AS y_gaapFlux_flag_edge_raw, + dp1.Object.y_gaapFlux_flag_gaussianization AS y_gaapFlux_flag_gaussianization_raw, + dp1.Object.y_gaapOptimalFlux AS y_gaapOptimalFlux_raw, + dp1.Object.y_gaapOptimalFlux_flag_bigPsf AS y_gaapOptimalFlux_flag_bigPsf_raw, + dp1.Object.y_gaapOptimalFluxErr AS y_gaapOptimalFluxErr_raw, + dp1.Object.y_gaapPsfFlux AS y_gaapPsfFlux_raw, + dp1.Object.y_gaapPsfFluxErr AS y_gaapPsfFluxErr_raw, + dp1.Object.y_hsm_moments_03 AS y_hsm_moments_03_raw, + dp1.Object.y_hsm_moments_04 AS y_hsm_moments_04_raw, + dp1.Object.y_hsm_moments_12 AS y_hsm_moments_12_raw, + dp1.Object.y_hsm_moments_13 AS y_hsm_moments_13_raw, + dp1.Object.y_hsm_moments_21 AS y_hsm_moments_21_raw, + dp1.Object.y_hsm_moments_22 AS y_hsm_moments_22_raw, + dp1.Object.y_hsm_moments_30 AS y_hsm_moments_30_raw, + dp1.Object.y_hsm_moments_31 AS y_hsm_moments_31_raw, + dp1.Object.y_hsm_moments_40 AS y_hsm_moments_40_raw, + dp1.Object.y_hsm_moments_flag AS y_hsm_moments_flag_raw, + dp1.Object.y_hsm_momentsPsf_03 AS y_hsm_momentsPsf_03_raw, + dp1.Object.y_hsm_momentsPsf_04 AS y_hsm_momentsPsf_04_raw, + dp1.Object.y_hsm_momentsPsf_12 AS y_hsm_momentsPsf_12_raw, + dp1.Object.y_hsm_momentsPsf_13 AS y_hsm_momentsPsf_13_raw, + dp1.Object.y_hsm_momentsPsf_21 AS y_hsm_momentsPsf_21_raw, + dp1.Object.y_hsm_momentsPsf_22 AS y_hsm_momentsPsf_22_raw, + dp1.Object.y_hsm_momentsPsf_30 AS y_hsm_momentsPsf_30_raw, + dp1.Object.y_hsm_momentsPsf_31 AS y_hsm_momentsPsf_31_raw, + dp1.Object.y_hsm_momentsPsf_40 AS y_hsm_momentsPsf_40_raw, + dp1.Object.y_hsm_momentsPsf_flag AS y_hsm_momentsPsf_flag_raw, + dp1.Object.y_hsmShapeRegauss_e1 AS y_hsmShapeRegauss_e1_raw, + dp1.Object.y_hsmShapeRegauss_e2 AS y_hsmShapeRegauss_e2_raw, + dp1.Object.y_hsmShapeRegauss_flag AS y_hsmShapeRegauss_flag_raw, + dp1.Object.y_hsmShapeRegauss_sigma AS y_hsmShapeRegauss_sigma_raw, + dp1.Object.y_i_flag AS y_i_flag_raw, + dp1.Object.y_iDebiasedPSF_flag AS y_iDebiasedPSF_flag_raw, + dp1.Object.y_inputCount AS y_inputCount_raw, + dp1.Object.y_inputCount_flag AS y_inputCount_flag_raw, + dp1.Object.y_inputCount_flag_noInputs AS y_inputCount_flag_noInputs_raw, + dp1.Object.y_invalidPsfFlag AS y_invalidPsfFlag_raw, + dp1.Object.y_iPSF_flag AS y_iPSF_flag_raw, + dp1.Object.y_iRound_flag AS y_iRound_flag_raw, + dp1.Object.y_ixx AS y_ixx_raw, + dp1.Object.y_ixxDebiasedPSF AS y_ixxDebiasedPSF_raw, + dp1.Object.y_ixxPSF AS y_ixxPSF_raw, + dp1.Object.y_ixxRound AS y_ixxRound_raw, + dp1.Object.y_ixy AS y_ixy_raw, + dp1.Object.y_ixyDebiasedPSF AS y_ixyDebiasedPSF_raw, + dp1.Object.y_ixyPSF AS y_ixyPSF_raw, + dp1.Object.y_ixyRound AS y_ixyRound_raw, + dp1.Object.y_iyy AS y_iyy_raw, + dp1.Object.y_iyyDebiasedPSF AS y_iyyDebiasedPSF_raw, + dp1.Object.y_iyyPSF AS y_iyyPSF_raw, + dp1.Object.y_iyyRound AS y_iyyRound_raw, + dp1.Object.y_kronFlux AS y_kronFlux_raw, + dp1.Object.y_kronFlux_flag AS y_kronFlux_flag_raw, + dp1.Object.y_kronFlux_flag_bad_radius AS y_kronFlux_flag_bad_radius_raw, + dp1.Object.y_kronFlux_flag_bad_shape AS y_kronFlux_flag_bad_shape_raw, + dp1.Object.y_kronFlux_flag_bad_shape_no_psf AS y_kronFlux_flag_bad_shape_no_psf_raw, + dp1.Object.y_kronFlux_flag_edge AS y_kronFlux_flag_edge_raw, + dp1.Object.y_kronFlux_flag_no_fallback_radius AS y_kronFlux_flag_no_fallback_radius_raw, + dp1.Object.y_kronFlux_flag_no_minimum_radius AS y_kronFlux_flag_no_minimum_radius_raw, + dp1.Object.y_kronFlux_flag_small_radius AS y_kronFlux_flag_small_radius_raw, + dp1.Object.y_kronFlux_flag_used_minimum_radius AS y_kronFlux_flag_used_minimum_radius_raw, + dp1.Object.y_kronFlux_flag_used_psf_radius AS y_kronFlux_flag_used_psf_radius_raw, + dp1.Object.y_kronFluxErr AS y_kronFluxErr_raw, + dp1.Object.y_kronRad AS y_kronRad_raw, + dp1.Object.y_pixelFlags_bad AS y_pixelFlags_bad_raw, + dp1.Object.y_pixelFlags_clipped AS y_pixelFlags_clipped_raw, + dp1.Object.y_pixelFlags_clippedCenter AS y_pixelFlags_clippedCenter_raw, + dp1.Object.y_pixelFlags_cr AS y_pixelFlags_cr_raw, + dp1.Object.y_pixelFlags_crCenter AS y_pixelFlags_crCenter_raw, + dp1.Object.y_pixelFlags_edge AS y_pixelFlags_edge_raw, + dp1.Object.y_pixelFlags_inexact_psf AS y_pixelFlags_inexact_psf_raw, + dp1.Object.y_pixelFlags_inexact_psfCenter AS y_pixelFlags_inexact_psfCenter_raw, + dp1.Object.y_pixelFlags_interpolated AS y_pixelFlags_interpolated_raw, + dp1.Object.y_pixelFlags_interpolatedCenter AS y_pixelFlags_interpolatedCenter_raw, + dp1.Object.y_pixelFlags_nodata AS y_pixelFlags_nodata_raw, + dp1.Object.y_pixelFlags_offimage AS y_pixelFlags_offimage_raw, + dp1.Object.y_pixelFlags_saturated AS y_pixelFlags_saturated_raw, + dp1.Object.y_pixelFlags_saturatedCenter AS y_pixelFlags_saturatedCenter_raw, + dp1.Object.y_pixelFlags_sensor_edge AS y_pixelFlags_sensor_edge_raw, + dp1.Object.y_pixelFlags_sensor_edgeCenter AS y_pixelFlags_sensor_edgeCenter_raw, + dp1.Object.y_pixelFlags_suspect AS y_pixelFlags_suspect_raw, + dp1.Object.y_pixelFlags_suspectCenter AS y_pixelFlags_suspectCenter_raw, + dp1.Object.y_psfFlux AS y_psfFlux_raw, + dp1.Object.y_psfFlux_area AS y_psfFlux_area_raw, + dp1.Object.y_psfFlux_flag AS y_psfFlux_flag_raw, + dp1.Object.y_psfFlux_flag_apCorr AS y_psfFlux_flag_apCorr_raw, + dp1.Object.y_psfFlux_flag_edge AS y_psfFlux_flag_edge_raw, + dp1.Object.y_psfFlux_flag_noGoodPixels AS y_psfFlux_flag_noGoodPixels_raw, + dp1.Object.y_psfFluxErr AS y_psfFluxErr_raw, + dp1.Object.y_psfMag AS y_psfMag_raw, + dp1.Object.y_psfMagErr AS y_psfMagErr_raw, + dp1.Object.y_psfModel_TwoGaussian_chisq_reduced AS y_psfModel_TwoGaussian_chisq_reduced_raw, + dp1.Object.y_psfModel_TwoGaussian_gauss1_fluxfrac AS y_psfModel_TwoGaussian_gauss1_fluxfrac_raw, + dp1.Object.y_psfModel_TwoGaussian_gauss1_rho AS y_psfModel_TwoGaussian_gauss1_rho_raw, + dp1.Object.y_psfModel_TwoGaussian_gauss1_sigma_x AS y_psfModel_TwoGaussian_gauss1_sigma_x_raw, + dp1.Object.y_psfModel_TwoGaussian_gauss1_sigma_y AS y_psfModel_TwoGaussian_gauss1_sigma_y_raw, + dp1.Object.y_psfModel_TwoGaussian_gauss2_rho AS y_psfModel_TwoGaussian_gauss2_rho_raw, + dp1.Object.y_psfModel_TwoGaussian_gauss2_sigma_x AS y_psfModel_TwoGaussian_gauss2_sigma_x_raw, + dp1.Object.y_psfModel_TwoGaussian_gauss2_sigma_y AS y_psfModel_TwoGaussian_gauss2_sigma_y_raw, + dp1.Object.y_psfModel_TwoGaussian_n_iter AS y_psfModel_TwoGaussian_n_iter_raw, + dp1.Object.y_psfModel_TwoGaussian_no_inputs_flag AS y_psfModel_TwoGaussian_no_inputs_flag_raw, + dp1.Object.y_psfModel_TwoGaussian_unknown_flag AS y_psfModel_TwoGaussian_unknown_flag_raw, + dp1.Object.y_ra AS y_ra_raw, + dp1.Object.y_ra_dec_Cov AS y_ra_dec_Cov_raw, + dp1.Object.y_raErr AS y_raErr_raw, + dp1.Object.y_sersicFlux AS y_sersicFlux_raw, + dp1.Object.y_sersicFluxErr AS y_sersicFluxErr_raw, + dp1.Object.y_sizeExtendedness AS y_sizeExtendedness_raw, + dp1.Object.y_sizeExtendedness_flag AS y_sizeExtendedness_flag_raw, + dp1.Object.yErr AS yErr_raw, + dp1.Object.z_ap03Flux AS z_ap03Flux_raw, + dp1.Object.z_ap03Flux_flag AS z_ap03Flux_flag_raw, + dp1.Object.z_ap03FluxErr AS z_ap03FluxErr_raw, + dp1.Object.z_ap06Flux AS z_ap06Flux_raw, + dp1.Object.z_ap06Flux_flag AS z_ap06Flux_flag_raw, + dp1.Object.z_ap06FluxErr AS z_ap06FluxErr_raw, + dp1.Object.z_ap09Flux AS z_ap09Flux_raw, + dp1.Object.z_ap09Flux_flag AS z_ap09Flux_flag_raw, + dp1.Object.z_ap09FluxErr AS z_ap09FluxErr_raw, + dp1.Object.z_ap12Flux AS z_ap12Flux_raw, + dp1.Object.z_ap12Flux_flag AS z_ap12Flux_flag_raw, + dp1.Object.z_ap12FluxErr AS z_ap12FluxErr_raw, + dp1.Object.z_ap17Flux AS z_ap17Flux_raw, + dp1.Object.z_ap17Flux_flag AS z_ap17Flux_flag_raw, + dp1.Object.z_ap17FluxErr AS z_ap17FluxErr_raw, + dp1.Object.z_ap25Flux AS z_ap25Flux_raw, + dp1.Object.z_ap25Flux_flag AS z_ap25Flux_flag_raw, + dp1.Object.z_ap25FluxErr AS z_ap25FluxErr_raw, + dp1.Object.z_ap35Flux AS z_ap35Flux_raw, + dp1.Object.z_ap35Flux_flag AS z_ap35Flux_flag_raw, + dp1.Object.z_ap35FluxErr AS z_ap35FluxErr_raw, + dp1.Object.z_ap50Flux AS z_ap50Flux_raw, + dp1.Object.z_ap50Flux_flag AS z_ap50Flux_flag_raw, + dp1.Object.z_ap50FluxErr AS z_ap50FluxErr_raw, + dp1.Object.z_ap70Flux AS z_ap70Flux_raw, + dp1.Object.z_ap70Flux_flag AS z_ap70Flux_flag_raw, + dp1.Object.z_ap70FluxErr AS z_ap70FluxErr_raw, + dp1.Object.z_apFlux_flag AS z_apFlux_flag_raw, + dp1.Object.z_apFlux_flag_apertureTruncated AS z_apFlux_flag_apertureTruncated_raw, + dp1.Object.z_apFlux_flag_sincCoeffsTruncated AS z_apFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.z_bdChi2 AS z_bdChi2_raw, + dp1.Object.z_bdE1 AS z_bdE1_raw, + dp1.Object.z_bdE2 AS z_bdE2_raw, + dp1.Object.z_bdFluxB AS z_bdFluxB_raw, + dp1.Object.z_bdFluxBErr AS z_bdFluxBErr_raw, + dp1.Object.z_bdFluxD AS z_bdFluxD_raw, + dp1.Object.z_bdFluxDErr AS z_bdFluxDErr_raw, + dp1.Object.z_bdReB AS z_bdReB_raw, + dp1.Object.z_bdReD AS z_bdReD_raw, + dp1.Object.z_blendedness AS z_blendedness_raw, + dp1.Object.z_blendedness_flag AS z_blendedness_flag_raw, + dp1.Object.z_calib_astrometry_used AS z_calib_astrometry_used_raw, + dp1.Object.z_calib_photometry_reserved AS z_calib_photometry_reserved_raw, + dp1.Object.z_calib_photometry_used AS z_calib_photometry_used_raw, + dp1.Object.z_calib_psf_candidate AS z_calib_psf_candidate_raw, + dp1.Object.z_calib_psf_reserved AS z_calib_psf_reserved_raw, + dp1.Object.z_calib_psf_used AS z_calib_psf_used_raw, + dp1.Object.z_calibFlux AS z_calibFlux_raw, + dp1.Object.z_calibFlux_flag AS z_calibFlux_flag_raw, + dp1.Object.z_calibFlux_flag_apertureTruncated AS z_calibFlux_flag_apertureTruncated_raw, + dp1.Object.z_calibFlux_flag_sincCoeffsTruncated AS z_calibFlux_flag_sincCoeffsTruncated_raw, + dp1.Object.z_calibFluxErr AS z_calibFluxErr_raw, + dp1.Object.z_centroid_flag AS z_centroid_flag_raw, + dp1.Object.z_centroid_x AS z_centroid_x_raw, + dp1.Object.z_centroid_xErr AS z_centroid_xErr_raw, + dp1.Object.z_centroid_y AS z_centroid_y_raw, + dp1.Object.z_centroid_yErr AS z_centroid_yErr_raw, + dp1.Object.z_cModel_flag AS z_cModel_flag_raw, + dp1.Object.z_cModel_flag_apCorr AS z_cModel_flag_apCorr_raw, + dp1.Object.z_cModelFlux AS z_cModelFlux_raw, + dp1.Object.z_cModelFlux_inner AS z_cModelFlux_inner_raw, + dp1.Object.z_cModelFluxErr AS z_cModelFluxErr_raw, + dp1.Object.z_cModelMag AS z_cModelMag_raw, + dp1.Object.z_cModelMagErr AS z_cModelMagErr_raw, + dp1.Object.z_deblend_blendedness AS z_deblend_blendedness_raw, + dp1.Object.z_deblend_dataCoverage AS z_deblend_dataCoverage_raw, + dp1.Object.z_deblend_fluxOverlap AS z_deblend_fluxOverlap_raw, + dp1.Object.z_deblend_fluxOverlapFraction AS z_deblend_fluxOverlapFraction_raw, + dp1.Object.z_deblend_zeroFlux AS z_deblend_zeroFlux_raw, + dp1.Object.z_dec AS z_dec_raw, + dp1.Object.z_decErr AS z_decErr_raw, + dp1.Object.z_epoch AS z_epoch_raw, + dp1.Object.z_extendedness AS z_extendedness_raw, + dp1.Object.z_extendedness_flag AS z_extendedness_flag_raw, + dp1.Object.z_free_cModelFlux AS z_free_cModelFlux_raw, + dp1.Object.z_free_cModelFlux_flag AS z_free_cModelFlux_flag_raw, + dp1.Object.z_free_cModelFlux_inner AS z_free_cModelFlux_inner_raw, + dp1.Object.z_free_cModelFluxErr AS z_free_cModelFluxErr_raw, + dp1.Object.z_free_psfFlux AS z_free_psfFlux_raw, + dp1.Object.z_free_psfFlux_flag AS z_free_psfFlux_flag_raw, + dp1.Object.z_free_psfFluxErr AS z_free_psfFluxErr_raw, + dp1.Object.z_gaap0p7Flux AS z_gaap0p7Flux_raw, + dp1.Object.z_gaap0p7Flux_flag_bigPsf AS z_gaap0p7Flux_flag_bigPsf_raw, + dp1.Object.z_gaap0p7FluxErr AS z_gaap0p7FluxErr_raw, + dp1.Object.z_gaap1p0Flux AS z_gaap1p0Flux_raw, + dp1.Object.z_gaap1p0Flux_flag_bigPsf AS z_gaap1p0Flux_flag_bigPsf_raw, + dp1.Object.z_gaap1p0FluxErr AS z_gaap1p0FluxErr_raw, + dp1.Object.z_gaap1p5Flux AS z_gaap1p5Flux_raw, + dp1.Object.z_gaap1p5Flux_flag_bigPsf AS z_gaap1p5Flux_flag_bigPsf_raw, + dp1.Object.z_gaap1p5FluxErr AS z_gaap1p5FluxErr_raw, + dp1.Object.z_gaap2p5Flux AS z_gaap2p5Flux_raw, + dp1.Object.z_gaap2p5Flux_flag_bigPsf AS z_gaap2p5Flux_flag_bigPsf_raw, + dp1.Object.z_gaap2p5FluxErr AS z_gaap2p5FluxErr_raw, + dp1.Object.z_gaap3p0Flux AS z_gaap3p0Flux_raw, + dp1.Object.z_gaap3p0Flux_flag_bigPsf AS z_gaap3p0Flux_flag_bigPsf_raw, + dp1.Object.z_gaap3p0FluxErr AS z_gaap3p0FluxErr_raw, + dp1.Object.z_gaapFlux_flag AS z_gaapFlux_flag_raw, + dp1.Object.z_gaapFlux_flag_edge AS z_gaapFlux_flag_edge_raw, + dp1.Object.z_gaapFlux_flag_gaussianization AS z_gaapFlux_flag_gaussianization_raw, + dp1.Object.z_gaapOptimalFlux AS z_gaapOptimalFlux_raw, + dp1.Object.z_gaapOptimalFlux_flag_bigPsf AS z_gaapOptimalFlux_flag_bigPsf_raw, + dp1.Object.z_gaapOptimalFluxErr AS z_gaapOptimalFluxErr_raw, + dp1.Object.z_gaapPsfFlux AS z_gaapPsfFlux_raw, + dp1.Object.z_gaapPsfFluxErr AS z_gaapPsfFluxErr_raw, + dp1.Object.z_hsm_moments_03 AS z_hsm_moments_03_raw, + dp1.Object.z_hsm_moments_04 AS z_hsm_moments_04_raw, + dp1.Object.z_hsm_moments_12 AS z_hsm_moments_12_raw, + dp1.Object.z_hsm_moments_13 AS z_hsm_moments_13_raw, + dp1.Object.z_hsm_moments_21 AS z_hsm_moments_21_raw, + dp1.Object.z_hsm_moments_22 AS z_hsm_moments_22_raw, + dp1.Object.z_hsm_moments_30 AS z_hsm_moments_30_raw, + dp1.Object.z_hsm_moments_31 AS z_hsm_moments_31_raw, + dp1.Object.z_hsm_moments_40 AS z_hsm_moments_40_raw, + dp1.Object.z_hsm_moments_flag AS z_hsm_moments_flag_raw, + dp1.Object.z_hsm_momentsPsf_03 AS z_hsm_momentsPsf_03_raw, + dp1.Object.z_hsm_momentsPsf_04 AS z_hsm_momentsPsf_04_raw, + dp1.Object.z_hsm_momentsPsf_12 AS z_hsm_momentsPsf_12_raw, + dp1.Object.z_hsm_momentsPsf_13 AS z_hsm_momentsPsf_13_raw, + dp1.Object.z_hsm_momentsPsf_21 AS z_hsm_momentsPsf_21_raw, + dp1.Object.z_hsm_momentsPsf_22 AS z_hsm_momentsPsf_22_raw, + dp1.Object.z_hsm_momentsPsf_30 AS z_hsm_momentsPsf_30_raw, + dp1.Object.z_hsm_momentsPsf_31 AS z_hsm_momentsPsf_31_raw, + dp1.Object.z_hsm_momentsPsf_40 AS z_hsm_momentsPsf_40_raw, + dp1.Object.z_hsm_momentsPsf_flag AS z_hsm_momentsPsf_flag_raw, + dp1.Object.z_hsmShapeRegauss_e1 AS z_hsmShapeRegauss_e1_raw, + dp1.Object.z_hsmShapeRegauss_e2 AS z_hsmShapeRegauss_e2_raw, + dp1.Object.z_hsmShapeRegauss_flag AS z_hsmShapeRegauss_flag_raw, + dp1.Object.z_hsmShapeRegauss_sigma AS z_hsmShapeRegauss_sigma_raw, + dp1.Object.z_i_flag AS z_i_flag_raw, + dp1.Object.z_iDebiasedPSF_flag AS z_iDebiasedPSF_flag_raw, + dp1.Object.z_inputCount AS z_inputCount_raw, + dp1.Object.z_inputCount_flag AS z_inputCount_flag_raw, + dp1.Object.z_inputCount_flag_noInputs AS z_inputCount_flag_noInputs_raw, + dp1.Object.z_invalidPsfFlag AS z_invalidPsfFlag_raw, + dp1.Object.z_iPSF_flag AS z_iPSF_flag_raw, + dp1.Object.z_iRound_flag AS z_iRound_flag_raw, + dp1.Object.z_ixx AS z_ixx_raw, + dp1.Object.z_ixxDebiasedPSF AS z_ixxDebiasedPSF_raw, + dp1.Object.z_ixxPSF AS z_ixxPSF_raw, + dp1.Object.z_ixxRound AS z_ixxRound_raw, + dp1.Object.z_ixy AS z_ixy_raw, + dp1.Object.z_ixyDebiasedPSF AS z_ixyDebiasedPSF_raw, + dp1.Object.z_ixyPSF AS z_ixyPSF_raw, + dp1.Object.z_ixyRound AS z_ixyRound_raw, + dp1.Object.z_iyy AS z_iyy_raw, + dp1.Object.z_iyyDebiasedPSF AS z_iyyDebiasedPSF_raw, + dp1.Object.z_iyyPSF AS z_iyyPSF_raw, + dp1.Object.z_iyyRound AS z_iyyRound_raw, + dp1.Object.z_kronFlux AS z_kronFlux_raw, + dp1.Object.z_kronFlux_flag AS z_kronFlux_flag_raw, + dp1.Object.z_kronFlux_flag_bad_radius AS z_kronFlux_flag_bad_radius_raw, + dp1.Object.z_kronFlux_flag_bad_shape AS z_kronFlux_flag_bad_shape_raw, + dp1.Object.z_kronFlux_flag_bad_shape_no_psf AS z_kronFlux_flag_bad_shape_no_psf_raw, + dp1.Object.z_kronFlux_flag_edge AS z_kronFlux_flag_edge_raw, + dp1.Object.z_kronFlux_flag_no_fallback_radius AS z_kronFlux_flag_no_fallback_radius_raw, + dp1.Object.z_kronFlux_flag_no_minimum_radius AS z_kronFlux_flag_no_minimum_radius_raw, + dp1.Object.z_kronFlux_flag_small_radius AS z_kronFlux_flag_small_radius_raw, + dp1.Object.z_kronFlux_flag_used_minimum_radius AS z_kronFlux_flag_used_minimum_radius_raw, + dp1.Object.z_kronFlux_flag_used_psf_radius AS z_kronFlux_flag_used_psf_radius_raw, + dp1.Object.z_kronFluxErr AS z_kronFluxErr_raw, + dp1.Object.z_kronRad AS z_kronRad_raw, + dp1.Object.z_pixelFlags_bad AS z_pixelFlags_bad_raw, + dp1.Object.z_pixelFlags_clipped AS z_pixelFlags_clipped_raw, + dp1.Object.z_pixelFlags_clippedCenter AS z_pixelFlags_clippedCenter_raw, + dp1.Object.z_pixelFlags_cr AS z_pixelFlags_cr_raw, + dp1.Object.z_pixelFlags_crCenter AS z_pixelFlags_crCenter_raw, + dp1.Object.z_pixelFlags_edge AS z_pixelFlags_edge_raw, + dp1.Object.z_pixelFlags_inexact_psf AS z_pixelFlags_inexact_psf_raw, + dp1.Object.z_pixelFlags_inexact_psfCenter AS z_pixelFlags_inexact_psfCenter_raw, + dp1.Object.z_pixelFlags_interpolated AS z_pixelFlags_interpolated_raw, + dp1.Object.z_pixelFlags_interpolatedCenter AS z_pixelFlags_interpolatedCenter_raw, + dp1.Object.z_pixelFlags_nodata AS z_pixelFlags_nodata_raw, + dp1.Object.z_pixelFlags_offimage AS z_pixelFlags_offimage_raw, + dp1.Object.z_pixelFlags_saturated AS z_pixelFlags_saturated_raw, + dp1.Object.z_pixelFlags_saturatedCenter AS z_pixelFlags_saturatedCenter_raw, + dp1.Object.z_pixelFlags_sensor_edge AS z_pixelFlags_sensor_edge_raw, + dp1.Object.z_pixelFlags_sensor_edgeCenter AS z_pixelFlags_sensor_edgeCenter_raw, + dp1.Object.z_pixelFlags_suspect AS z_pixelFlags_suspect_raw, + dp1.Object.z_pixelFlags_suspectCenter AS z_pixelFlags_suspectCenter_raw, + dp1.Object.z_psfFlux AS z_psfFlux_raw, + dp1.Object.z_psfFlux_area AS z_psfFlux_area_raw, + dp1.Object.z_psfFlux_flag AS z_psfFlux_flag_raw, + dp1.Object.z_psfFlux_flag_apCorr AS z_psfFlux_flag_apCorr_raw, + dp1.Object.z_psfFlux_flag_edge AS z_psfFlux_flag_edge_raw, + dp1.Object.z_psfFlux_flag_noGoodPixels AS z_psfFlux_flag_noGoodPixels_raw, + dp1.Object.z_psfFluxErr AS z_psfFluxErr_raw, + dp1.Object.z_psfMag AS z_psfMag_raw, + dp1.Object.z_psfMagErr AS z_psfMagErr_raw, + dp1.Object.z_psfModel_TwoGaussian_chisq_reduced AS z_psfModel_TwoGaussian_chisq_reduced_raw, + dp1.Object.z_psfModel_TwoGaussian_gauss1_fluxfrac AS z_psfModel_TwoGaussian_gauss1_fluxfrac_raw, + dp1.Object.z_psfModel_TwoGaussian_gauss1_rho AS z_psfModel_TwoGaussian_gauss1_rho_raw, + dp1.Object.z_psfModel_TwoGaussian_gauss1_sigma_x AS z_psfModel_TwoGaussian_gauss1_sigma_x_raw, + dp1.Object.z_psfModel_TwoGaussian_gauss1_sigma_y AS z_psfModel_TwoGaussian_gauss1_sigma_y_raw, + dp1.Object.z_psfModel_TwoGaussian_gauss2_rho AS z_psfModel_TwoGaussian_gauss2_rho_raw, + dp1.Object.z_psfModel_TwoGaussian_gauss2_sigma_x AS z_psfModel_TwoGaussian_gauss2_sigma_x_raw, + dp1.Object.z_psfModel_TwoGaussian_gauss2_sigma_y AS z_psfModel_TwoGaussian_gauss2_sigma_y_raw, + dp1.Object.z_psfModel_TwoGaussian_n_iter AS z_psfModel_TwoGaussian_n_iter_raw, + dp1.Object.z_psfModel_TwoGaussian_no_inputs_flag AS z_psfModel_TwoGaussian_no_inputs_flag_raw, + dp1.Object.z_psfModel_TwoGaussian_unknown_flag AS z_psfModel_TwoGaussian_unknown_flag_raw, + dp1.Object.z_ra AS z_ra_raw, + dp1.Object.z_ra_dec_Cov AS z_ra_dec_Cov_raw, + dp1.Object.z_raErr AS z_raErr_raw, + dp1.Object.z_sersicFlux AS z_sersicFlux_raw, + dp1.Object.z_sersicFluxErr AS z_sersicFluxErr_raw, + dp1.Object.z_sizeExtendedness AS z_sizeExtendedness_raw, + dp1.Object.z_sizeExtendedness_flag AS z_sizeExtendedness_flag_raw, + (dp1.Object.coord_dec + 0) AS coord_dec_plus_0, + (dp1.Object.coord_decErr + 1) AS coord_decErr_plus_1, + (dp1.Object.coord_ra + 2) AS coord_ra_plus_2, + (dp1.Object.coord_ra_dec_Cov + 3) AS coord_ra_dec_Cov_plus_3, + (dp1.Object.coord_raErr + 4) AS coord_raErr_plus_4, + (dp1.Object.deblend_failed + 5) AS deblend_failed_plus_5, + (dp1.Object.deblend_incompleteData + 6) AS deblend_incompleteData_plus_6, + (dp1.Object.deblend_isolatedParent + 7) AS deblend_isolatedParent_plus_7, + (dp1.Object.deblend_iterations + 8) AS deblend_iterations_plus_8, + (dp1.Object.deblend_logL + 9) AS deblend_logL_plus_9, + (dp1.Object.deblend_masked + 10) AS deblend_masked_plus_10, + (dp1.Object.deblend_nChild + 11) AS deblend_nChild_plus_11, + (dp1.Object.deblend_nPeaks + 12) AS deblend_nPeaks_plus_12, + (dp1.Object.deblend_parentTooBig + 13) AS deblend_parentTooBig_plus_13, + (dp1.Object.deblend_peak_center_x + 14) AS deblend_peak_center_x_plus_14, + (dp1.Object.deblend_peak_center_y + 15) AS deblend_peak_center_y_plus_15, + (dp1.Object.deblend_skipped + 16) AS deblend_skipped_plus_16, + (dp1.Object.deblend_tooManyPeaks + 0) AS deblend_tooManyPeaks_plus_17, + (dp1.Object.detect_fromBlend + 1) AS detect_fromBlend_plus_18, + (dp1.Object.detect_isDeblendedModelSource + 2) AS detect_isDeblendedModelSource_plus_19, + (dp1.Object.detect_isIsolated + 3) AS detect_isIsolated_plus_20, + (dp1.Object.ebv + 4) AS ebv_plus_21, + (dp1.Object.footprintArea + 5) AS footprintArea_plus_22, + (dp1.Object.g_ap03Flux + 6) AS g_ap03Flux_plus_23, + (dp1.Object.g_ap03Flux_flag + 7) AS g_ap03Flux_flag_plus_24, + (dp1.Object.g_ap03FluxErr + 8) AS g_ap03FluxErr_plus_25, + (dp1.Object.g_ap06Flux + 9) AS g_ap06Flux_plus_26, + (dp1.Object.g_ap06Flux_flag + 10) AS g_ap06Flux_flag_plus_27, + (dp1.Object.g_ap06FluxErr + 11) AS g_ap06FluxErr_plus_28, + (dp1.Object.g_ap09Flux + 12) AS g_ap09Flux_plus_29, + (dp1.Object.g_ap09Flux_flag + 13) AS g_ap09Flux_flag_plus_30, + (dp1.Object.g_ap09FluxErr + 14) AS g_ap09FluxErr_plus_31, + (dp1.Object.g_ap12Flux + 15) AS g_ap12Flux_plus_32, + (dp1.Object.g_ap12Flux_flag + 16) AS g_ap12Flux_flag_plus_33, + (dp1.Object.g_ap12FluxErr + 0) AS g_ap12FluxErr_plus_34, + (dp1.Object.g_ap17Flux + 1) AS g_ap17Flux_plus_35, + (dp1.Object.g_ap17Flux_flag + 2) AS g_ap17Flux_flag_plus_36, + (dp1.Object.g_ap17FluxErr + 3) AS g_ap17FluxErr_plus_37, + (dp1.Object.g_ap25Flux + 4) AS g_ap25Flux_plus_38, + (dp1.Object.g_ap25Flux_flag + 5) AS g_ap25Flux_flag_plus_39, + (dp1.Object.g_ap25FluxErr + 6) AS g_ap25FluxErr_plus_40, + (dp1.Object.g_ap35Flux + 7) AS g_ap35Flux_plus_41, + (dp1.Object.g_ap35Flux_flag + 8) AS g_ap35Flux_flag_plus_42, + (dp1.Object.g_ap35FluxErr + 9) AS g_ap35FluxErr_plus_43, + (dp1.Object.g_ap50Flux + 10) AS g_ap50Flux_plus_44, + (dp1.Object.g_ap50Flux_flag + 11) AS g_ap50Flux_flag_plus_45, + (dp1.Object.g_ap50FluxErr + 12) AS g_ap50FluxErr_plus_46, + (dp1.Object.g_ap70Flux + 13) AS g_ap70Flux_plus_47, + (dp1.Object.g_ap70Flux_flag + 14) AS g_ap70Flux_flag_plus_48, + (dp1.Object.g_ap70FluxErr + 15) AS g_ap70FluxErr_plus_49, + (dp1.Object.g_apFlux_flag + 16) AS g_apFlux_flag_plus_50, + (dp1.Object.g_apFlux_flag_apertureTruncated + 0) AS g_apFlux_flag_apertureTruncated_plus_51, + (dp1.Object.g_apFlux_flag_sincCoeffsTruncated + 1) AS g_apFlux_flag_sincCoeffsTruncated_plus_52, + (dp1.Object.g_bdChi2 + 2) AS g_bdChi2_plus_53, + (dp1.Object.g_bdE1 + 3) AS g_bdE1_plus_54, + (dp1.Object.g_bdE2 + 4) AS g_bdE2_plus_55, + (dp1.Object.g_bdFluxB + 5) AS g_bdFluxB_plus_56, + (dp1.Object.g_bdFluxBErr + 6) AS g_bdFluxBErr_plus_57, + (dp1.Object.g_bdFluxD + 7) AS g_bdFluxD_plus_58, + (dp1.Object.g_bdFluxDErr + 8) AS g_bdFluxDErr_plus_59, + (dp1.Object.g_bdReB + 9) AS g_bdReB_plus_60, + (dp1.Object.g_bdReD + 10) AS g_bdReD_plus_61, + (dp1.Object.g_blendedness + 11) AS g_blendedness_plus_62, + (dp1.Object.g_blendedness_flag + 12) AS g_blendedness_flag_plus_63, + (dp1.Object.g_calib_astrometry_used + 13) AS g_calib_astrometry_used_plus_64, + (dp1.Object.g_calib_photometry_reserved + 14) AS g_calib_photometry_reserved_plus_65, + (dp1.Object.g_calib_photometry_used + 15) AS g_calib_photometry_used_plus_66, + (dp1.Object.g_calib_psf_candidate + 16) AS g_calib_psf_candidate_plus_67, + (dp1.Object.g_calib_psf_reserved + 0) AS g_calib_psf_reserved_plus_68, + (dp1.Object.g_calib_psf_used + 1) AS g_calib_psf_used_plus_69, + (dp1.Object.g_calibFlux + 2) AS g_calibFlux_plus_70, + (dp1.Object.g_calibFlux_flag + 3) AS g_calibFlux_flag_plus_71, + (dp1.Object.g_calibFlux_flag_apertureTruncated + 4) AS g_calibFlux_flag_apertureTruncated_plus_72, + (dp1.Object.g_calibFlux_flag_sincCoeffsTruncated + 5) AS g_calibFlux_flag_sincCoeffsTruncated_plus_73, + (dp1.Object.g_calibFluxErr + 6) AS g_calibFluxErr_plus_74, + (dp1.Object.g_centroid_flag + 7) AS g_centroid_flag_plus_75, + (dp1.Object.g_centroid_x + 8) AS g_centroid_x_plus_76, + (dp1.Object.g_centroid_xErr + 9) AS g_centroid_xErr_plus_77, + (dp1.Object.g_centroid_y + 10) AS g_centroid_y_plus_78, + (dp1.Object.g_centroid_yErr + 11) AS g_centroid_yErr_plus_79, + (dp1.Object.g_cModel_flag + 12) AS g_cModel_flag_plus_80, + (dp1.Object.g_cModel_flag_apCorr + 13) AS g_cModel_flag_apCorr_plus_81, + (dp1.Object.g_cModelFlux + 14) AS g_cModelFlux_plus_82, + (dp1.Object.g_cModelFlux_inner + 15) AS g_cModelFlux_inner_plus_83, + (dp1.Object.g_cModelFluxErr + 16) AS g_cModelFluxErr_plus_84, + (dp1.Object.g_cModelMag + 0) AS g_cModelMag_plus_85, + (dp1.Object.g_cModelMagErr + 1) AS g_cModelMagErr_plus_86, + (dp1.Object.g_deblend_blendedness + 2) AS g_deblend_blendedness_plus_87, + (dp1.Object.g_deblend_dataCoverage + 3) AS g_deblend_dataCoverage_plus_88, + (dp1.Object.g_deblend_fluxOverlap + 4) AS g_deblend_fluxOverlap_plus_89, + (dp1.Object.g_deblend_fluxOverlapFraction + 5) AS g_deblend_fluxOverlapFraction_plus_90, + (dp1.Object.g_deblend_zeroFlux + 6) AS g_deblend_zeroFlux_plus_91, + (dp1.Object.g_dec + 7) AS g_dec_plus_92, + (dp1.Object.g_decErr + 8) AS g_decErr_plus_93, + (dp1.Object.g_epoch + 9) AS g_epoch_plus_94, + (dp1.Object.g_extendedness + 10) AS g_extendedness_plus_95, + (dp1.Object.g_extendedness_flag + 11) AS g_extendedness_flag_plus_96, + (dp1.Object.g_free_cModelFlux + 12) AS g_free_cModelFlux_plus_97, + (dp1.Object.g_free_cModelFlux_flag + 13) AS g_free_cModelFlux_flag_plus_98, + (dp1.Object.g_free_cModelFlux_inner + 14) AS g_free_cModelFlux_inner_plus_99, + (dp1.Object.g_free_cModelFluxErr + 15) AS g_free_cModelFluxErr_plus_100, + (dp1.Object.g_free_psfFlux + 16) AS g_free_psfFlux_plus_101, + (dp1.Object.g_free_psfFlux_flag + 0) AS g_free_psfFlux_flag_plus_102, + (dp1.Object.g_free_psfFluxErr + 1) AS g_free_psfFluxErr_plus_103, + (dp1.Object.g_gaap0p7Flux + 2) AS g_gaap0p7Flux_plus_104, + (dp1.Object.g_gaap0p7Flux_flag_bigPsf + 3) AS g_gaap0p7Flux_flag_bigPsf_plus_105, + (dp1.Object.g_gaap0p7FluxErr + 4) AS g_gaap0p7FluxErr_plus_106, + (dp1.Object.g_gaap1p0Flux + 5) AS g_gaap1p0Flux_plus_107, + (dp1.Object.g_gaap1p0Flux_flag_bigPsf + 6) AS g_gaap1p0Flux_flag_bigPsf_plus_108, + (dp1.Object.g_gaap1p0FluxErr + 7) AS g_gaap1p0FluxErr_plus_109, + (dp1.Object.g_gaap1p5Flux + 8) AS g_gaap1p5Flux_plus_110, + (dp1.Object.g_gaap1p5Flux_flag_bigPsf + 9) AS g_gaap1p5Flux_flag_bigPsf_plus_111, + (dp1.Object.g_gaap1p5FluxErr + 10) AS g_gaap1p5FluxErr_plus_112, + (dp1.Object.g_gaap2p5Flux + 11) AS g_gaap2p5Flux_plus_113, + (dp1.Object.g_gaap2p5Flux_flag_bigPsf + 12) AS g_gaap2p5Flux_flag_bigPsf_plus_114, + (dp1.Object.g_gaap2p5FluxErr + 13) AS g_gaap2p5FluxErr_plus_115, + (dp1.Object.g_gaap3p0Flux + 14) AS g_gaap3p0Flux_plus_116, + (dp1.Object.g_gaap3p0Flux_flag_bigPsf + 15) AS g_gaap3p0Flux_flag_bigPsf_plus_117, + (dp1.Object.g_gaap3p0FluxErr + 16) AS g_gaap3p0FluxErr_plus_118, + (dp1.Object.g_gaapFlux_flag + 0) AS g_gaapFlux_flag_plus_119, + (dp1.Object.g_gaapFlux_flag_edge + 1) AS g_gaapFlux_flag_edge_plus_120, + (dp1.Object.g_gaapFlux_flag_gaussianization + 2) AS g_gaapFlux_flag_gaussianization_plus_121, + (dp1.Object.g_gaapOptimalFlux + 3) AS g_gaapOptimalFlux_plus_122, + (dp1.Object.g_gaapOptimalFlux_flag_bigPsf + 4) AS g_gaapOptimalFlux_flag_bigPsf_plus_123, + (dp1.Object.g_gaapOptimalFluxErr + 5) AS g_gaapOptimalFluxErr_plus_124, + (dp1.Object.g_gaapPsfFlux + 6) AS g_gaapPsfFlux_plus_125, + (dp1.Object.g_gaapPsfFluxErr + 7) AS g_gaapPsfFluxErr_plus_126, + (dp1.Object.g_hsm_moments_03 + 8) AS g_hsm_moments_03_plus_127, + (dp1.Object.g_hsm_moments_04 + 9) AS g_hsm_moments_04_plus_128, + (dp1.Object.g_hsm_moments_12 + 10) AS g_hsm_moments_12_plus_129, + (dp1.Object.g_hsm_moments_13 + 11) AS g_hsm_moments_13_plus_130, + (dp1.Object.g_hsm_moments_21 + 12) AS g_hsm_moments_21_plus_131, + (dp1.Object.g_hsm_moments_22 + 13) AS g_hsm_moments_22_plus_132, + (dp1.Object.g_hsm_moments_30 + 14) AS g_hsm_moments_30_plus_133, + (dp1.Object.g_hsm_moments_31 + 15) AS g_hsm_moments_31_plus_134, + (dp1.Object.g_hsm_moments_40 + 16) AS g_hsm_moments_40_plus_135, + (dp1.Object.g_hsm_moments_flag + 0) AS g_hsm_moments_flag_plus_136, + (dp1.Object.g_hsm_momentsPsf_03 + 1) AS g_hsm_momentsPsf_03_plus_137, + (dp1.Object.g_hsm_momentsPsf_04 + 2) AS g_hsm_momentsPsf_04_plus_138, + (dp1.Object.g_hsm_momentsPsf_12 + 3) AS g_hsm_momentsPsf_12_plus_139, + (dp1.Object.g_hsm_momentsPsf_13 + 4) AS g_hsm_momentsPsf_13_plus_140, + (dp1.Object.g_hsm_momentsPsf_21 + 5) AS g_hsm_momentsPsf_21_plus_141, + (dp1.Object.g_hsm_momentsPsf_22 + 6) AS g_hsm_momentsPsf_22_plus_142, + (dp1.Object.g_hsm_momentsPsf_30 + 7) AS g_hsm_momentsPsf_30_plus_143, + (dp1.Object.g_hsm_momentsPsf_31 + 8) AS g_hsm_momentsPsf_31_plus_144, + (dp1.Object.g_hsm_momentsPsf_40 + 9) AS g_hsm_momentsPsf_40_plus_145, + (dp1.Object.g_hsm_momentsPsf_flag + 10) AS g_hsm_momentsPsf_flag_plus_146, + (dp1.Object.g_hsmShapeRegauss_e1 + 11) AS g_hsmShapeRegauss_e1_plus_147, + (dp1.Object.g_hsmShapeRegauss_e2 + 12) AS g_hsmShapeRegauss_e2_plus_148, + (dp1.Object.g_hsmShapeRegauss_flag + 13) AS g_hsmShapeRegauss_flag_plus_149, + (dp1.Object.g_hsmShapeRegauss_sigma + 14) AS g_hsmShapeRegauss_sigma_plus_150, + (dp1.Object.g_i_flag + 15) AS g_i_flag_plus_151, + (dp1.Object.g_iDebiasedPSF_flag + 16) AS g_iDebiasedPSF_flag_plus_152, + (dp1.Object.g_inputCount + 0) AS g_inputCount_plus_153, + (dp1.Object.g_inputCount_flag + 1) AS g_inputCount_flag_plus_154, + (dp1.Object.g_inputCount_flag_noInputs + 2) AS g_inputCount_flag_noInputs_plus_155, + (dp1.Object.g_invalidPsfFlag + 3) AS g_invalidPsfFlag_plus_156, + (dp1.Object.g_iPSF_flag + 4) AS g_iPSF_flag_plus_157, + (dp1.Object.g_iRound_flag + 5) AS g_iRound_flag_plus_158, + (dp1.Object.g_ixx + 6) AS g_ixx_plus_159, + (dp1.Object.g_ixxDebiasedPSF + 7) AS g_ixxDebiasedPSF_plus_160, + (dp1.Object.g_ixxPSF + 8) AS g_ixxPSF_plus_161, + (dp1.Object.g_ixxRound + 9) AS g_ixxRound_plus_162, + (dp1.Object.g_ixy + 10) AS g_ixy_plus_163, + (dp1.Object.g_ixyDebiasedPSF + 11) AS g_ixyDebiasedPSF_plus_164, + (dp1.Object.g_ixyPSF + 12) AS g_ixyPSF_plus_165, + (dp1.Object.g_ixyRound + 13) AS g_ixyRound_plus_166, + (dp1.Object.g_iyy + 14) AS g_iyy_plus_167, + (dp1.Object.g_iyyDebiasedPSF + 15) AS g_iyyDebiasedPSF_plus_168, + (dp1.Object.g_iyyPSF + 16) AS g_iyyPSF_plus_169, + (dp1.Object.g_iyyRound + 0) AS g_iyyRound_plus_170, + (dp1.Object.g_kronFlux + 1) AS g_kronFlux_plus_171, + (dp1.Object.g_kronFlux_flag + 2) AS g_kronFlux_flag_plus_172, + (dp1.Object.g_kronFlux_flag_bad_radius + 3) AS g_kronFlux_flag_bad_radius_plus_173, + (dp1.Object.g_kronFlux_flag_bad_shape + 4) AS g_kronFlux_flag_bad_shape_plus_174, + (dp1.Object.g_kronFlux_flag_bad_shape_no_psf + 5) AS g_kronFlux_flag_bad_shape_no_psf_plus_175, + (dp1.Object.g_kronFlux_flag_edge + 6) AS g_kronFlux_flag_edge_plus_176, + (dp1.Object.g_kronFlux_flag_no_fallback_radius + 7) AS g_kronFlux_flag_no_fallback_radius_plus_177, + (dp1.Object.g_kronFlux_flag_no_minimum_radius + 8) AS g_kronFlux_flag_no_minimum_radius_plus_178, + (dp1.Object.g_kronFlux_flag_small_radius + 9) AS g_kronFlux_flag_small_radius_plus_179, + (dp1.Object.g_kronFlux_flag_used_minimum_radius + 10) AS g_kronFlux_flag_used_minimum_radius_plus_180, + (dp1.Object.g_kronFlux_flag_used_psf_radius + 11) AS g_kronFlux_flag_used_psf_radius_plus_181, + (dp1.Object.g_kronFluxErr + 12) AS g_kronFluxErr_plus_182, + (dp1.Object.g_kronRad + 13) AS g_kronRad_plus_183, + (dp1.Object.g_pixelFlags_bad + 14) AS g_pixelFlags_bad_plus_184, + (dp1.Object.g_pixelFlags_clipped + 15) AS g_pixelFlags_clipped_plus_185, + (dp1.Object.g_pixelFlags_clippedCenter + 16) AS g_pixelFlags_clippedCenter_plus_186, + (dp1.Object.g_pixelFlags_cr + 0) AS g_pixelFlags_cr_plus_187, + (dp1.Object.g_pixelFlags_crCenter + 1) AS g_pixelFlags_crCenter_plus_188, + (dp1.Object.g_pixelFlags_edge + 2) AS g_pixelFlags_edge_plus_189, + (dp1.Object.g_pixelFlags_inexact_psf + 3) AS g_pixelFlags_inexact_psf_plus_190, + (dp1.Object.g_pixelFlags_inexact_psfCenter + 4) AS g_pixelFlags_inexact_psfCenter_plus_191, + (dp1.Object.g_pixelFlags_interpolated + 5) AS g_pixelFlags_interpolated_plus_192, + (dp1.Object.g_pixelFlags_interpolatedCenter + 6) AS g_pixelFlags_interpolatedCenter_plus_193, + (dp1.Object.g_pixelFlags_nodata + 7) AS g_pixelFlags_nodata_plus_194, + (dp1.Object.g_pixelFlags_offimage + 8) AS g_pixelFlags_offimage_plus_195, + (dp1.Object.g_pixelFlags_saturated + 9) AS g_pixelFlags_saturated_plus_196, + (dp1.Object.g_pixelFlags_saturatedCenter + 10) AS g_pixelFlags_saturatedCenter_plus_197, + (dp1.Object.g_pixelFlags_sensor_edge + 11) AS g_pixelFlags_sensor_edge_plus_198, + (dp1.Object.g_pixelFlags_sensor_edgeCenter + 12) AS g_pixelFlags_sensor_edgeCenter_plus_199, + (dp1.Object.g_pixelFlags_suspect + 13) AS g_pixelFlags_suspect_plus_200, + (dp1.Object.g_pixelFlags_suspectCenter + 14) AS g_pixelFlags_suspectCenter_plus_201, + (dp1.Object.g_psfFlux + 15) AS g_psfFlux_plus_202, + (dp1.Object.g_psfFlux_area + 16) AS g_psfFlux_area_plus_203, + (dp1.Object.g_psfFlux_flag + 0) AS g_psfFlux_flag_plus_204, + (dp1.Object.g_psfFlux_flag_apCorr + 1) AS g_psfFlux_flag_apCorr_plus_205, + (dp1.Object.g_psfFlux_flag_edge + 2) AS g_psfFlux_flag_edge_plus_206, + (dp1.Object.g_psfFlux_flag_noGoodPixels + 3) AS g_psfFlux_flag_noGoodPixels_plus_207, + (dp1.Object.g_psfFluxErr + 4) AS g_psfFluxErr_plus_208, + (dp1.Object.g_psfMag + 5) AS g_psfMag_plus_209, + (dp1.Object.g_psfMagErr + 6) AS g_psfMagErr_plus_210, + (dp1.Object.g_psfModel_TwoGaussian_chisq_reduced + 7) AS g_psfModel_TwoGaussian_chisq_reduced_plus_211, + (dp1.Object.g_psfModel_TwoGaussian_gauss1_fluxfrac + 8) AS g_psfModel_TwoGaussian_gauss1_fluxfrac_plus_212, + (dp1.Object.g_psfModel_TwoGaussian_gauss1_rho + 9) AS g_psfModel_TwoGaussian_gauss1_rho_plus_213, + (dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_x + 10) AS g_psfModel_TwoGaussian_gauss1_sigma_x_plus_214, + (dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_y + 11) AS g_psfModel_TwoGaussian_gauss1_sigma_y_plus_215, + (dp1.Object.g_psfModel_TwoGaussian_gauss2_rho + 12) AS g_psfModel_TwoGaussian_gauss2_rho_plus_216, + (dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_x + 13) AS g_psfModel_TwoGaussian_gauss2_sigma_x_plus_217, + (dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_y + 14) AS g_psfModel_TwoGaussian_gauss2_sigma_y_plus_218, + (dp1.Object.g_psfModel_TwoGaussian_n_iter + 15) AS g_psfModel_TwoGaussian_n_iter_plus_219, + (dp1.Object.g_psfModel_TwoGaussian_no_inputs_flag + 16) AS g_psfModel_TwoGaussian_no_inputs_flag_plus_220, + (dp1.Object.g_psfModel_TwoGaussian_unknown_flag + 0) AS g_psfModel_TwoGaussian_unknown_flag_plus_221, + (dp1.Object.g_ra + 1) AS g_ra_plus_222, + (dp1.Object.g_ra_dec_Cov + 2) AS g_ra_dec_Cov_plus_223, + (dp1.Object.g_raErr + 3) AS g_raErr_plus_224, + (dp1.Object.g_sersicFlux + 4) AS g_sersicFlux_plus_225, + (dp1.Object.g_sersicFluxErr + 5) AS g_sersicFluxErr_plus_226, + (dp1.Object.g_sizeExtendedness + 6) AS g_sizeExtendedness_plus_227, + (dp1.Object.g_sizeExtendedness_flag + 7) AS g_sizeExtendedness_flag_plus_228, + (dp1.Object.i_ap03Flux + 8) AS i_ap03Flux_plus_229, + (dp1.Object.i_ap03Flux_flag + 9) AS i_ap03Flux_flag_plus_230, + (dp1.Object.i_ap03FluxErr + 10) AS i_ap03FluxErr_plus_231, + (dp1.Object.i_ap06Flux + 11) AS i_ap06Flux_plus_232, + (dp1.Object.i_ap06Flux_flag + 12) AS i_ap06Flux_flag_plus_233, + (dp1.Object.i_ap06FluxErr + 13) AS i_ap06FluxErr_plus_234, + (dp1.Object.i_ap09Flux + 14) AS i_ap09Flux_plus_235, + (dp1.Object.i_ap09Flux_flag + 15) AS i_ap09Flux_flag_plus_236, + (dp1.Object.i_ap09FluxErr + 16) AS i_ap09FluxErr_plus_237, + (dp1.Object.i_ap12Flux + 0) AS i_ap12Flux_plus_238, + (dp1.Object.i_ap12Flux_flag + 1) AS i_ap12Flux_flag_plus_239, + (dp1.Object.i_ap12FluxErr + 2) AS i_ap12FluxErr_plus_240, + (dp1.Object.i_ap17Flux + 3) AS i_ap17Flux_plus_241, + (dp1.Object.i_ap17Flux_flag + 4) AS i_ap17Flux_flag_plus_242, + (dp1.Object.i_ap17FluxErr + 5) AS i_ap17FluxErr_plus_243, + (dp1.Object.i_ap25Flux + 6) AS i_ap25Flux_plus_244, + (dp1.Object.i_ap25Flux_flag + 7) AS i_ap25Flux_flag_plus_245, + (dp1.Object.i_ap25FluxErr + 8) AS i_ap25FluxErr_plus_246, + (dp1.Object.i_ap35Flux + 9) AS i_ap35Flux_plus_247, + (dp1.Object.i_ap35Flux_flag + 10) AS i_ap35Flux_flag_plus_248, + (dp1.Object.i_ap35FluxErr + 11) AS i_ap35FluxErr_plus_249, + (dp1.Object.i_ap50Flux + 12) AS i_ap50Flux_plus_250, + (dp1.Object.i_ap50Flux_flag + 13) AS i_ap50Flux_flag_plus_251, + (dp1.Object.i_ap50FluxErr + 14) AS i_ap50FluxErr_plus_252, + (dp1.Object.i_ap70Flux + 15) AS i_ap70Flux_plus_253, + (dp1.Object.i_ap70Flux_flag + 16) AS i_ap70Flux_flag_plus_254, + (dp1.Object.i_ap70FluxErr + 0) AS i_ap70FluxErr_plus_255, + (dp1.Object.i_apFlux_flag + 1) AS i_apFlux_flag_plus_256, + (dp1.Object.i_apFlux_flag_apertureTruncated + 2) AS i_apFlux_flag_apertureTruncated_plus_257, + (dp1.Object.i_apFlux_flag_sincCoeffsTruncated + 3) AS i_apFlux_flag_sincCoeffsTruncated_plus_258, + (dp1.Object.i_bdChi2 + 4) AS i_bdChi2_plus_259, + (dp1.Object.i_bdE1 + 5) AS i_bdE1_plus_260, + (dp1.Object.i_bdE2 + 6) AS i_bdE2_plus_261, + (dp1.Object.i_bdFluxB + 7) AS i_bdFluxB_plus_262, + (dp1.Object.i_bdFluxBErr + 8) AS i_bdFluxBErr_plus_263, + (dp1.Object.i_bdFluxD + 9) AS i_bdFluxD_plus_264, + (dp1.Object.i_bdFluxDErr + 10) AS i_bdFluxDErr_plus_265, + (dp1.Object.i_bdReB + 11) AS i_bdReB_plus_266, + (dp1.Object.i_bdReD + 12) AS i_bdReD_plus_267, + (dp1.Object.i_blendedness + 13) AS i_blendedness_plus_268, + (dp1.Object.i_blendedness_flag + 14) AS i_blendedness_flag_plus_269, + (dp1.Object.i_calib_astrometry_used + 15) AS i_calib_astrometry_used_plus_270, + (dp1.Object.i_calib_photometry_reserved + 16) AS i_calib_photometry_reserved_plus_271, + (dp1.Object.i_calib_photometry_used + 0) AS i_calib_photometry_used_plus_272, + (dp1.Object.i_calib_psf_candidate + 1) AS i_calib_psf_candidate_plus_273, + (dp1.Object.i_calib_psf_reserved + 2) AS i_calib_psf_reserved_plus_274, + (dp1.Object.i_calib_psf_used + 3) AS i_calib_psf_used_plus_275, + (dp1.Object.i_calibFlux + 4) AS i_calibFlux_plus_276, + (dp1.Object.i_calibFlux_flag + 5) AS i_calibFlux_flag_plus_277, + (dp1.Object.i_calibFlux_flag_apertureTruncated + 6) AS i_calibFlux_flag_apertureTruncated_plus_278, + (dp1.Object.i_calibFlux_flag_sincCoeffsTruncated + 7) AS i_calibFlux_flag_sincCoeffsTruncated_plus_279, + (dp1.Object.i_calibFluxErr + 8) AS i_calibFluxErr_plus_280, + (dp1.Object.i_centroid_flag + 9) AS i_centroid_flag_plus_281, + (dp1.Object.i_centroid_x + 10) AS i_centroid_x_plus_282, + (dp1.Object.i_centroid_xErr + 11) AS i_centroid_xErr_plus_283, + (dp1.Object.i_centroid_y + 12) AS i_centroid_y_plus_284, + (dp1.Object.i_centroid_yErr + 13) AS i_centroid_yErr_plus_285, + (dp1.Object.i_cModel_flag + 14) AS i_cModel_flag_plus_286, + (dp1.Object.i_cModel_flag_apCorr + 15) AS i_cModel_flag_apCorr_plus_287, + (dp1.Object.i_cModelFlux + 16) AS i_cModelFlux_plus_288, + (dp1.Object.i_cModelFlux_inner + 0) AS i_cModelFlux_inner_plus_289, + (dp1.Object.i_cModelFluxErr + 1) AS i_cModelFluxErr_plus_290, + (dp1.Object.i_cModelMag + 2) AS i_cModelMag_plus_291, + (dp1.Object.i_cModelMagErr + 3) AS i_cModelMagErr_plus_292, + (dp1.Object.i_deblend_blendedness + 4) AS i_deblend_blendedness_plus_293, + (dp1.Object.i_deblend_dataCoverage + 5) AS i_deblend_dataCoverage_plus_294, + (dp1.Object.i_deblend_fluxOverlap + 6) AS i_deblend_fluxOverlap_plus_295, + (dp1.Object.i_deblend_fluxOverlapFraction + 7) AS i_deblend_fluxOverlapFraction_plus_296, + (dp1.Object.i_deblend_zeroFlux + 8) AS i_deblend_zeroFlux_plus_297, + (dp1.Object.i_dec + 9) AS i_dec_plus_298, + (dp1.Object.i_decErr + 10) AS i_decErr_plus_299, + (dp1.Object.i_epoch + 11) AS i_epoch_plus_300, + (dp1.Object.i_extendedness + 12) AS i_extendedness_plus_301, + (dp1.Object.i_extendedness_flag + 13) AS i_extendedness_flag_plus_302, + (dp1.Object.i_free_cModelFlux + 14) AS i_free_cModelFlux_plus_303, + (dp1.Object.i_free_cModelFlux_flag + 15) AS i_free_cModelFlux_flag_plus_304, + (dp1.Object.i_free_cModelFlux_inner + 16) AS i_free_cModelFlux_inner_plus_305, + (dp1.Object.i_free_cModelFluxErr + 0) AS i_free_cModelFluxErr_plus_306, + (dp1.Object.i_free_psfFlux + 1) AS i_free_psfFlux_plus_307, + (dp1.Object.i_free_psfFlux_flag + 2) AS i_free_psfFlux_flag_plus_308, + (dp1.Object.i_free_psfFluxErr + 3) AS i_free_psfFluxErr_plus_309, + (dp1.Object.i_gaap0p7Flux + 4) AS i_gaap0p7Flux_plus_310, + (dp1.Object.i_gaap0p7Flux_flag_bigPsf + 5) AS i_gaap0p7Flux_flag_bigPsf_plus_311, + (dp1.Object.i_gaap0p7FluxErr + 6) AS i_gaap0p7FluxErr_plus_312, + (dp1.Object.i_gaap1p0Flux + 7) AS i_gaap1p0Flux_plus_313, + (dp1.Object.i_gaap1p0Flux_flag_bigPsf + 8) AS i_gaap1p0Flux_flag_bigPsf_plus_314, + (dp1.Object.i_gaap1p0FluxErr + 9) AS i_gaap1p0FluxErr_plus_315, + (dp1.Object.i_gaap1p5Flux + 10) AS i_gaap1p5Flux_plus_316, + (dp1.Object.i_gaap1p5Flux_flag_bigPsf + 11) AS i_gaap1p5Flux_flag_bigPsf_plus_317, + (dp1.Object.i_gaap1p5FluxErr + 12) AS i_gaap1p5FluxErr_plus_318, + (dp1.Object.i_gaap2p5Flux + 13) AS i_gaap2p5Flux_plus_319, + (dp1.Object.i_gaap2p5Flux_flag_bigPsf + 14) AS i_gaap2p5Flux_flag_bigPsf_plus_320, + (dp1.Object.i_gaap2p5FluxErr + 15) AS i_gaap2p5FluxErr_plus_321, + (dp1.Object.i_gaap3p0Flux + 16) AS i_gaap3p0Flux_plus_322, + (dp1.Object.i_gaap3p0Flux_flag_bigPsf + 0) AS i_gaap3p0Flux_flag_bigPsf_plus_323, + (dp1.Object.i_gaap3p0FluxErr + 1) AS i_gaap3p0FluxErr_plus_324, + (dp1.Object.i_gaapFlux_flag + 2) AS i_gaapFlux_flag_plus_325, + (dp1.Object.i_gaapFlux_flag_edge + 3) AS i_gaapFlux_flag_edge_plus_326, + (dp1.Object.i_gaapFlux_flag_gaussianization + 4) AS i_gaapFlux_flag_gaussianization_plus_327, + (dp1.Object.i_gaapOptimalFlux + 5) AS i_gaapOptimalFlux_plus_328, + (dp1.Object.i_gaapOptimalFlux_flag_bigPsf + 6) AS i_gaapOptimalFlux_flag_bigPsf_plus_329, + (dp1.Object.i_gaapOptimalFluxErr + 7) AS i_gaapOptimalFluxErr_plus_330, + (dp1.Object.i_gaapPsfFlux + 8) AS i_gaapPsfFlux_plus_331, + (dp1.Object.i_gaapPsfFluxErr + 9) AS i_gaapPsfFluxErr_plus_332, + (dp1.Object.i_hsm_moments_03 + 10) AS i_hsm_moments_03_plus_333, + (dp1.Object.i_hsm_moments_04 + 11) AS i_hsm_moments_04_plus_334, + (dp1.Object.i_hsm_moments_12 + 12) AS i_hsm_moments_12_plus_335, + (dp1.Object.i_hsm_moments_13 + 13) AS i_hsm_moments_13_plus_336, + (dp1.Object.i_hsm_moments_21 + 14) AS i_hsm_moments_21_plus_337, + (dp1.Object.i_hsm_moments_22 + 15) AS i_hsm_moments_22_plus_338, + (dp1.Object.i_hsm_moments_30 + 16) AS i_hsm_moments_30_plus_339, + (dp1.Object.i_hsm_moments_31 + 0) AS i_hsm_moments_31_plus_340, + (dp1.Object.i_hsm_moments_40 + 1) AS i_hsm_moments_40_plus_341, + (dp1.Object.i_hsm_moments_flag + 2) AS i_hsm_moments_flag_plus_342, + (dp1.Object.i_hsm_momentsPsf_03 + 3) AS i_hsm_momentsPsf_03_plus_343, + (dp1.Object.i_hsm_momentsPsf_04 + 4) AS i_hsm_momentsPsf_04_plus_344, + (dp1.Object.i_hsm_momentsPsf_12 + 5) AS i_hsm_momentsPsf_12_plus_345, + (dp1.Object.i_hsm_momentsPsf_13 + 6) AS i_hsm_momentsPsf_13_plus_346, + (dp1.Object.i_hsm_momentsPsf_21 + 7) AS i_hsm_momentsPsf_21_plus_347, + (dp1.Object.i_hsm_momentsPsf_22 + 8) AS i_hsm_momentsPsf_22_plus_348, + (dp1.Object.i_hsm_momentsPsf_30 + 9) AS i_hsm_momentsPsf_30_plus_349, + (dp1.Object.i_hsm_momentsPsf_31 + 10) AS i_hsm_momentsPsf_31_plus_350, + (dp1.Object.i_hsm_momentsPsf_40 + 11) AS i_hsm_momentsPsf_40_plus_351, + (dp1.Object.i_hsm_momentsPsf_flag + 12) AS i_hsm_momentsPsf_flag_plus_352, + (dp1.Object.i_hsmShapeRegauss_e1 + 13) AS i_hsmShapeRegauss_e1_plus_353, + (dp1.Object.i_hsmShapeRegauss_e2 + 14) AS i_hsmShapeRegauss_e2_plus_354, + (dp1.Object.i_hsmShapeRegauss_flag + 15) AS i_hsmShapeRegauss_flag_plus_355, + (dp1.Object.i_hsmShapeRegauss_sigma + 16) AS i_hsmShapeRegauss_sigma_plus_356, + (dp1.Object.i_i_flag + 0) AS i_i_flag_plus_357, + (dp1.Object.i_iDebiasedPSF_flag + 1) AS i_iDebiasedPSF_flag_plus_358, + (dp1.Object.i_inputCount + 2) AS i_inputCount_plus_359, + (dp1.Object.i_inputCount_flag + 3) AS i_inputCount_flag_plus_360, + (dp1.Object.i_inputCount_flag_noInputs + 4) AS i_inputCount_flag_noInputs_plus_361, + (dp1.Object.i_invalidPsfFlag + 5) AS i_invalidPsfFlag_plus_362, + (dp1.Object.i_iPSF_flag + 6) AS i_iPSF_flag_plus_363, + (dp1.Object.i_iRound_flag + 7) AS i_iRound_flag_plus_364, + (dp1.Object.i_ixx + 8) AS i_ixx_plus_365, + (dp1.Object.i_ixxDebiasedPSF + 9) AS i_ixxDebiasedPSF_plus_366, + (dp1.Object.i_ixxPSF + 10) AS i_ixxPSF_plus_367, + (dp1.Object.i_ixxRound + 11) AS i_ixxRound_plus_368, + (dp1.Object.i_ixy + 12) AS i_ixy_plus_369, + (dp1.Object.i_ixyDebiasedPSF + 13) AS i_ixyDebiasedPSF_plus_370, + (dp1.Object.i_ixyPSF + 14) AS i_ixyPSF_plus_371, + (dp1.Object.i_ixyRound + 15) AS i_ixyRound_plus_372, + (dp1.Object.i_iyy + 16) AS i_iyy_plus_373, + (dp1.Object.i_iyyDebiasedPSF + 0) AS i_iyyDebiasedPSF_plus_374, + (dp1.Object.i_iyyPSF + 1) AS i_iyyPSF_plus_375, + (dp1.Object.i_iyyRound + 2) AS i_iyyRound_plus_376, + (dp1.Object.i_kronFlux + 3) AS i_kronFlux_plus_377, + (dp1.Object.i_kronFlux_flag + 4) AS i_kronFlux_flag_plus_378, + (dp1.Object.i_kronFlux_flag_bad_radius + 5) AS i_kronFlux_flag_bad_radius_plus_379, + (dp1.Object.i_kronFlux_flag_bad_shape + 6) AS i_kronFlux_flag_bad_shape_plus_380, + (dp1.Object.i_kronFlux_flag_bad_shape_no_psf + 7) AS i_kronFlux_flag_bad_shape_no_psf_plus_381, + (dp1.Object.i_kronFlux_flag_edge + 8) AS i_kronFlux_flag_edge_plus_382, + (dp1.Object.i_kronFlux_flag_no_fallback_radius + 9) AS i_kronFlux_flag_no_fallback_radius_plus_383, + (dp1.Object.i_kronFlux_flag_no_minimum_radius + 10) AS i_kronFlux_flag_no_minimum_radius_plus_384, + (dp1.Object.i_kronFlux_flag_small_radius + 11) AS i_kronFlux_flag_small_radius_plus_385, + (dp1.Object.i_kronFlux_flag_used_minimum_radius + 12) AS i_kronFlux_flag_used_minimum_radius_plus_386, + (dp1.Object.i_kronFlux_flag_used_psf_radius + 13) AS i_kronFlux_flag_used_psf_radius_plus_387, + (dp1.Object.i_kronFluxErr + 14) AS i_kronFluxErr_plus_388, + (dp1.Object.i_kronRad + 15) AS i_kronRad_plus_389, + (dp1.Object.i_pixelFlags_bad + 16) AS i_pixelFlags_bad_plus_390, + (dp1.Object.i_pixelFlags_clipped + 0) AS i_pixelFlags_clipped_plus_391, + (dp1.Object.i_pixelFlags_clippedCenter + 1) AS i_pixelFlags_clippedCenter_plus_392, + (dp1.Object.i_pixelFlags_cr + 2) AS i_pixelFlags_cr_plus_393, + (dp1.Object.i_pixelFlags_crCenter + 3) AS i_pixelFlags_crCenter_plus_394, + (dp1.Object.i_pixelFlags_edge + 4) AS i_pixelFlags_edge_plus_395, + (dp1.Object.i_pixelFlags_inexact_psf + 5) AS i_pixelFlags_inexact_psf_plus_396, + (dp1.Object.i_pixelFlags_inexact_psfCenter + 6) AS i_pixelFlags_inexact_psfCenter_plus_397, + (dp1.Object.i_pixelFlags_interpolated + 7) AS i_pixelFlags_interpolated_plus_398, + (dp1.Object.i_pixelFlags_interpolatedCenter + 8) AS i_pixelFlags_interpolatedCenter_plus_399, + (dp1.Object.i_pixelFlags_nodata + 9) AS i_pixelFlags_nodata_plus_400, + (dp1.Object.i_pixelFlags_offimage + 10) AS i_pixelFlags_offimage_plus_401, + (dp1.Object.i_pixelFlags_saturated + 11) AS i_pixelFlags_saturated_plus_402, + (dp1.Object.i_pixelFlags_saturatedCenter + 12) AS i_pixelFlags_saturatedCenter_plus_403, + (dp1.Object.i_pixelFlags_sensor_edge + 13) AS i_pixelFlags_sensor_edge_plus_404, + (dp1.Object.i_pixelFlags_sensor_edgeCenter + 14) AS i_pixelFlags_sensor_edgeCenter_plus_405, + (dp1.Object.i_pixelFlags_suspect + 15) AS i_pixelFlags_suspect_plus_406, + (dp1.Object.i_pixelFlags_suspectCenter + 16) AS i_pixelFlags_suspectCenter_plus_407, + (dp1.Object.i_psfFlux + 0) AS i_psfFlux_plus_408, + (dp1.Object.i_psfFlux_area + 1) AS i_psfFlux_area_plus_409, + (dp1.Object.i_psfFlux_flag + 2) AS i_psfFlux_flag_plus_410, + (dp1.Object.i_psfFlux_flag_apCorr + 3) AS i_psfFlux_flag_apCorr_plus_411, + (dp1.Object.i_psfFlux_flag_edge + 4) AS i_psfFlux_flag_edge_plus_412, + (dp1.Object.i_psfFlux_flag_noGoodPixels + 5) AS i_psfFlux_flag_noGoodPixels_plus_413, + (dp1.Object.i_psfFluxErr + 6) AS i_psfFluxErr_plus_414, + (dp1.Object.i_psfMag + 7) AS i_psfMag_plus_415, + (dp1.Object.i_psfMagErr + 8) AS i_psfMagErr_plus_416, + (dp1.Object.i_psfModel_TwoGaussian_chisq_reduced + 9) AS i_psfModel_TwoGaussian_chisq_reduced_plus_417, + (dp1.Object.i_psfModel_TwoGaussian_gauss1_fluxfrac + 10) AS i_psfModel_TwoGaussian_gauss1_fluxfrac_plus_418, + (dp1.Object.i_psfModel_TwoGaussian_gauss1_rho + 11) AS i_psfModel_TwoGaussian_gauss1_rho_plus_419 +FROM dp1.Object +WHERE objectId = 0 + AND coord_ra BETWEEN 0 AND 360 + AND coord_dec BETWEEN -90 AND 90 diff --git a/src/ccontrol/testdata/parser-corpus/q06_object_table_aggregates.sql b/src/ccontrol/testdata/parser-corpus/q06_object_table_aggregates.sql new file mode 100644 index 0000000000..d2eef5f827 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q06_object_table_aggregates.sql @@ -0,0 +1,703 @@ +SELECT + dp1.Object.canonicalFilterId, + dp1.Object.extendedness, + COUNT(dp1.Object.qserv_trans_id) AS count_qserv_trans_id, + MIN(dp1.Object.qserv_trans_id) AS min_qserv_trans_id, + MAX(dp1.Object.qserv_trans_id) AS max_qserv_trans_id, + COUNT(dp1.Object.objectId) AS count_objectId, + MIN(dp1.Object.objectId) AS min_objectId, + MAX(dp1.Object.objectId) AS max_objectId, + COUNT(dp1.Object.iauId) AS count_iauId, + MIN(dp1.Object.iauId) AS min_iauId, + MAX(dp1.Object.iauId) AS max_iauId, + COUNT(dp1.Object.ra_PS) AS count_ra_PS, + MIN(dp1.Object.ra_PS) AS min_ra_PS, + MAX(dp1.Object.ra_PS) AS max_ra_PS, + COUNT(dp1.Object.ra_PS_Sigma) AS count_ra_PS_Sigma, + MIN(dp1.Object.ra_PS_Sigma) AS min_ra_PS_Sigma, + MAX(dp1.Object.ra_PS_Sigma) AS max_ra_PS_Sigma, + COUNT(dp1.Object.decl_PS) AS count_decl_PS, + MIN(dp1.Object.decl_PS) AS min_decl_PS, + MAX(dp1.Object.decl_PS) AS max_decl_PS, + COUNT(dp1.Object.decl_PS_Sigma) AS count_decl_PS_Sigma, + MIN(dp1.Object.decl_PS_Sigma) AS min_decl_PS_Sigma, + MAX(dp1.Object.decl_PS_Sigma) AS max_decl_PS_Sigma, + COUNT(dp1.Object.radecl_PS_Cov) AS count_radecl_PS_Cov, + MIN(dp1.Object.radecl_PS_Cov) AS min_radecl_PS_Cov, + MAX(dp1.Object.radecl_PS_Cov) AS max_radecl_PS_Cov, + COUNT(dp1.Object.htmId20) AS count_htmId20, + MIN(dp1.Object.htmId20) AS min_htmId20, + MAX(dp1.Object.htmId20) AS max_htmId20, + COUNT(dp1.Object.ra_SG) AS count_ra_SG, + MIN(dp1.Object.ra_SG) AS min_ra_SG, + MAX(dp1.Object.ra_SG) AS max_ra_SG, + COUNT(dp1.Object.ra_SG_Sigma) AS count_ra_SG_Sigma, + MIN(dp1.Object.ra_SG_Sigma) AS min_ra_SG_Sigma, + MAX(dp1.Object.ra_SG_Sigma) AS max_ra_SG_Sigma, + COUNT(dp1.Object.decl_SG) AS count_decl_SG, + MIN(dp1.Object.decl_SG) AS min_decl_SG, + MAX(dp1.Object.decl_SG) AS max_decl_SG, + COUNT(dp1.Object.decl_SG_Sigma) AS count_decl_SG_Sigma, + MIN(dp1.Object.decl_SG_Sigma) AS min_decl_SG_Sigma, + MAX(dp1.Object.decl_SG_Sigma) AS max_decl_SG_Sigma, + COUNT(dp1.Object.radecl_SG_Cov) AS count_radecl_SG_Cov, + MIN(dp1.Object.radecl_SG_Cov) AS min_radecl_SG_Cov, + MAX(dp1.Object.radecl_SG_Cov) AS max_radecl_SG_Cov, + COUNT(dp1.Object.raRange) AS count_raRange, + MIN(dp1.Object.raRange) AS min_raRange, + MAX(dp1.Object.raRange) AS max_raRange, + COUNT(dp1.Object.declRange) AS count_declRange, + MIN(dp1.Object.declRange) AS min_declRange, + MAX(dp1.Object.declRange) AS max_declRange, + COUNT(dp1.Object.muRa_PS) AS count_muRa_PS, + MIN(dp1.Object.muRa_PS) AS min_muRa_PS, + MAX(dp1.Object.muRa_PS) AS max_muRa_PS, + COUNT(dp1.Object.muRa_PS_Sigma) AS count_muRa_PS_Sigma, + MIN(dp1.Object.muRa_PS_Sigma) AS min_muRa_PS_Sigma, + MAX(dp1.Object.muRa_PS_Sigma) AS max_muRa_PS_Sigma, + COUNT(dp1.Object.muDecl_PS) AS count_muDecl_PS, + MIN(dp1.Object.muDecl_PS) AS min_muDecl_PS, + MAX(dp1.Object.muDecl_PS) AS max_muDecl_PS, + COUNT(dp1.Object.muDecl_PS_Sigma) AS count_muDecl_PS_Sigma, + MIN(dp1.Object.muDecl_PS_Sigma) AS min_muDecl_PS_Sigma, + MAX(dp1.Object.muDecl_PS_Sigma) AS max_muDecl_PS_Sigma, + COUNT(dp1.Object.muRaDecl_PS_Cov) AS count_muRaDecl_PS_Cov, + MIN(dp1.Object.muRaDecl_PS_Cov) AS min_muRaDecl_PS_Cov, + MAX(dp1.Object.muRaDecl_PS_Cov) AS max_muRaDecl_PS_Cov, + COUNT(dp1.Object.parallax_PS) AS count_parallax_PS, + MIN(dp1.Object.parallax_PS) AS min_parallax_PS, + MAX(dp1.Object.parallax_PS) AS max_parallax_PS, + COUNT(dp1.Object.parallax_PS_Sigma) AS count_parallax_PS_Sigma, + MIN(dp1.Object.parallax_PS_Sigma) AS min_parallax_PS_Sigma, + MAX(dp1.Object.parallax_PS_Sigma) AS max_parallax_PS_Sigma, + COUNT(dp1.Object.canonicalFilterId) AS count_canonicalFilterId, + MIN(dp1.Object.canonicalFilterId) AS min_canonicalFilterId, + MAX(dp1.Object.canonicalFilterId) AS max_canonicalFilterId, + COUNT(dp1.Object.extendedness) AS count_extendedness, + MIN(dp1.Object.extendedness) AS min_extendedness, + MAX(dp1.Object.extendedness) AS max_extendedness, + COUNT(dp1.Object.varProb) AS count_varProb, + MIN(dp1.Object.varProb) AS min_varProb, + MAX(dp1.Object.varProb) AS max_varProb, + COUNT(dp1.Object.earliestObsTime) AS count_earliestObsTime, + MIN(dp1.Object.earliestObsTime) AS min_earliestObsTime, + MAX(dp1.Object.earliestObsTime) AS max_earliestObsTime, + COUNT(dp1.Object.latestObsTime) AS count_latestObsTime, + MIN(dp1.Object.latestObsTime) AS min_latestObsTime, + MAX(dp1.Object.latestObsTime) AS max_latestObsTime, + COUNT(dp1.Object.meanObsTime) AS count_meanObsTime, + MIN(dp1.Object.meanObsTime) AS min_meanObsTime, + MAX(dp1.Object.meanObsTime) AS max_meanObsTime, + COUNT(dp1.Object.flags) AS count_flags, + MIN(dp1.Object.flags) AS min_flags, + MAX(dp1.Object.flags) AS max_flags, + COUNT(dp1.Object.uNumObs) AS count_uNumObs, + MIN(dp1.Object.uNumObs) AS min_uNumObs, + MAX(dp1.Object.uNumObs) AS max_uNumObs, + COUNT(dp1.Object.uExtendedness) AS count_uExtendedness, + MIN(dp1.Object.uExtendedness) AS min_uExtendedness, + MAX(dp1.Object.uExtendedness) AS max_uExtendedness, + COUNT(dp1.Object.uVarProb) AS count_uVarProb, + MIN(dp1.Object.uVarProb) AS min_uVarProb, + MAX(dp1.Object.uVarProb) AS max_uVarProb, + COUNT(dp1.Object.uRaOffset_PS) AS count_uRaOffset_PS, + MIN(dp1.Object.uRaOffset_PS) AS min_uRaOffset_PS, + MAX(dp1.Object.uRaOffset_PS) AS max_uRaOffset_PS, + COUNT(dp1.Object.uRaOffset_PS_Sigma) AS count_uRaOffset_PS_Sigma, + MIN(dp1.Object.uRaOffset_PS_Sigma) AS min_uRaOffset_PS_Sigma, + MAX(dp1.Object.uRaOffset_PS_Sigma) AS max_uRaOffset_PS_Sigma, + COUNT(dp1.Object.uDeclOffset_PS) AS count_uDeclOffset_PS, + MIN(dp1.Object.uDeclOffset_PS) AS min_uDeclOffset_PS, + MAX(dp1.Object.uDeclOffset_PS) AS max_uDeclOffset_PS, + COUNT(dp1.Object.uDeclOffset_PS_Sigma) AS count_uDeclOffset_PS_Sigma, + MIN(dp1.Object.uDeclOffset_PS_Sigma) AS min_uDeclOffset_PS_Sigma, + MAX(dp1.Object.uDeclOffset_PS_Sigma) AS max_uDeclOffset_PS_Sigma, + COUNT(dp1.Object.uRaDeclOffset_PS_Cov) AS count_uRaDeclOffset_PS_Cov, + MIN(dp1.Object.uRaDeclOffset_PS_Cov) AS min_uRaDeclOffset_PS_Cov, + MAX(dp1.Object.uRaDeclOffset_PS_Cov) AS max_uRaDeclOffset_PS_Cov, + COUNT(dp1.Object.uRaOffset_SG) AS count_uRaOffset_SG, + MIN(dp1.Object.uRaOffset_SG) AS min_uRaOffset_SG, + MAX(dp1.Object.uRaOffset_SG) AS max_uRaOffset_SG, + COUNT(dp1.Object.uRaOffset_SG_Sigma) AS count_uRaOffset_SG_Sigma, + MIN(dp1.Object.uRaOffset_SG_Sigma) AS min_uRaOffset_SG_Sigma, + MAX(dp1.Object.uRaOffset_SG_Sigma) AS max_uRaOffset_SG_Sigma, + COUNT(dp1.Object.uDeclOffset_SG) AS count_uDeclOffset_SG, + MIN(dp1.Object.uDeclOffset_SG) AS min_uDeclOffset_SG, + MAX(dp1.Object.uDeclOffset_SG) AS max_uDeclOffset_SG, + COUNT(dp1.Object.uDeclOffset_SG_Sigma) AS count_uDeclOffset_SG_Sigma, + MIN(dp1.Object.uDeclOffset_SG_Sigma) AS min_uDeclOffset_SG_Sigma, + MAX(dp1.Object.uDeclOffset_SG_Sigma) AS max_uDeclOffset_SG_Sigma, + COUNT(dp1.Object.uRaDeclOffset_SG_Cov) AS count_uRaDeclOffset_SG_Cov, + MIN(dp1.Object.uRaDeclOffset_SG_Cov) AS min_uRaDeclOffset_SG_Cov, + MAX(dp1.Object.uRaDeclOffset_SG_Cov) AS max_uRaDeclOffset_SG_Cov, + COUNT(dp1.Object.uLnL_PS) AS count_uLnL_PS, + MIN(dp1.Object.uLnL_PS) AS min_uLnL_PS, + MAX(dp1.Object.uLnL_PS) AS max_uLnL_PS, + COUNT(dp1.Object.uLnL_SG) AS count_uLnL_SG, + MIN(dp1.Object.uLnL_SG) AS min_uLnL_SG, + MAX(dp1.Object.uLnL_SG) AS max_uLnL_SG, + COUNT(dp1.Object.uFlux_PS) AS count_uFlux_PS, + MIN(dp1.Object.uFlux_PS) AS min_uFlux_PS, + MAX(dp1.Object.uFlux_PS) AS max_uFlux_PS, + COUNT(dp1.Object.uFlux_PS_Sigma) AS count_uFlux_PS_Sigma, + MIN(dp1.Object.uFlux_PS_Sigma) AS min_uFlux_PS_Sigma, + MAX(dp1.Object.uFlux_PS_Sigma) AS max_uFlux_PS_Sigma, + COUNT(dp1.Object.uFlux_ESG) AS count_uFlux_ESG, + MIN(dp1.Object.uFlux_ESG) AS min_uFlux_ESG, + MAX(dp1.Object.uFlux_ESG) AS max_uFlux_ESG, + COUNT(dp1.Object.uFlux_ESG_Sigma) AS count_uFlux_ESG_Sigma, + MIN(dp1.Object.uFlux_ESG_Sigma) AS min_uFlux_ESG_Sigma, + MAX(dp1.Object.uFlux_ESG_Sigma) AS max_uFlux_ESG_Sigma, + COUNT(dp1.Object.uFlux_Gaussian) AS count_uFlux_Gaussian, + MIN(dp1.Object.uFlux_Gaussian) AS min_uFlux_Gaussian, + MAX(dp1.Object.uFlux_Gaussian) AS max_uFlux_Gaussian, + COUNT(dp1.Object.uFlux_Gaussian_Sigma) AS count_uFlux_Gaussian_Sigma, + MIN(dp1.Object.uFlux_Gaussian_Sigma) AS min_uFlux_Gaussian_Sigma, + MAX(dp1.Object.uFlux_Gaussian_Sigma) AS max_uFlux_Gaussian_Sigma, + COUNT(dp1.Object.uTimescale) AS count_uTimescale, + MIN(dp1.Object.uTimescale) AS min_uTimescale, + MAX(dp1.Object.uTimescale) AS max_uTimescale, + COUNT(dp1.Object.uEarliestObsTime) AS count_uEarliestObsTime, + MIN(dp1.Object.uEarliestObsTime) AS min_uEarliestObsTime, + MAX(dp1.Object.uEarliestObsTime) AS max_uEarliestObsTime, + COUNT(dp1.Object.uLatestObsTime) AS count_uLatestObsTime, + MIN(dp1.Object.uLatestObsTime) AS min_uLatestObsTime, + MAX(dp1.Object.uLatestObsTime) AS max_uLatestObsTime, + COUNT(dp1.Object.uSersicN_SG) AS count_uSersicN_SG, + MIN(dp1.Object.uSersicN_SG) AS min_uSersicN_SG, + MAX(dp1.Object.uSersicN_SG) AS max_uSersicN_SG, + COUNT(dp1.Object.uSersicN_SG_Sigma) AS count_uSersicN_SG_Sigma, + MIN(dp1.Object.uSersicN_SG_Sigma) AS min_uSersicN_SG_Sigma, + MAX(dp1.Object.uSersicN_SG_Sigma) AS max_uSersicN_SG_Sigma, + COUNT(dp1.Object.uE1_SG) AS count_uE1_SG, + MIN(dp1.Object.uE1_SG) AS min_uE1_SG, + MAX(dp1.Object.uE1_SG) AS max_uE1_SG, + COUNT(dp1.Object.uE1_SG_Sigma) AS count_uE1_SG_Sigma, + MIN(dp1.Object.uE1_SG_Sigma) AS min_uE1_SG_Sigma, + MAX(dp1.Object.uE1_SG_Sigma) AS max_uE1_SG_Sigma, + COUNT(dp1.Object.uE2_SG) AS count_uE2_SG, + MIN(dp1.Object.uE2_SG) AS min_uE2_SG, + MAX(dp1.Object.uE2_SG) AS max_uE2_SG, + COUNT(dp1.Object.uE2_SG_Sigma) AS count_uE2_SG_Sigma, + MIN(dp1.Object.uE2_SG_Sigma) AS min_uE2_SG_Sigma, + MAX(dp1.Object.uE2_SG_Sigma) AS max_uE2_SG_Sigma, + COUNT(dp1.Object.uRadius_SG) AS count_uRadius_SG, + MIN(dp1.Object.uRadius_SG) AS min_uRadius_SG, + MAX(dp1.Object.uRadius_SG) AS max_uRadius_SG, + COUNT(dp1.Object.uRadius_SG_Sigma) AS count_uRadius_SG_Sigma, + MIN(dp1.Object.uRadius_SG_Sigma) AS min_uRadius_SG_Sigma, + MAX(dp1.Object.uRadius_SG_Sigma) AS max_uRadius_SG_Sigma, + COUNT(dp1.Object.uFlags) AS count_uFlags, + MIN(dp1.Object.uFlags) AS min_uFlags, + MAX(dp1.Object.uFlags) AS max_uFlags, + COUNT(dp1.Object.gNumObs) AS count_gNumObs, + MIN(dp1.Object.gNumObs) AS min_gNumObs, + MAX(dp1.Object.gNumObs) AS max_gNumObs, + COUNT(dp1.Object.gExtendedness) AS count_gExtendedness, + MIN(dp1.Object.gExtendedness) AS min_gExtendedness, + MAX(dp1.Object.gExtendedness) AS max_gExtendedness, + COUNT(dp1.Object.gVarProb) AS count_gVarProb, + MIN(dp1.Object.gVarProb) AS min_gVarProb, + MAX(dp1.Object.gVarProb) AS max_gVarProb, + COUNT(dp1.Object.gRaOffset_PS) AS count_gRaOffset_PS, + MIN(dp1.Object.gRaOffset_PS) AS min_gRaOffset_PS, + MAX(dp1.Object.gRaOffset_PS) AS max_gRaOffset_PS, + COUNT(dp1.Object.gRaOffset_PS_Sigma) AS count_gRaOffset_PS_Sigma, + MIN(dp1.Object.gRaOffset_PS_Sigma) AS min_gRaOffset_PS_Sigma, + MAX(dp1.Object.gRaOffset_PS_Sigma) AS max_gRaOffset_PS_Sigma, + COUNT(dp1.Object.gDeclOffset_PS) AS count_gDeclOffset_PS, + MIN(dp1.Object.gDeclOffset_PS) AS min_gDeclOffset_PS, + MAX(dp1.Object.gDeclOffset_PS) AS max_gDeclOffset_PS, + COUNT(dp1.Object.gDeclOffset_PS_Sigma) AS count_gDeclOffset_PS_Sigma, + MIN(dp1.Object.gDeclOffset_PS_Sigma) AS min_gDeclOffset_PS_Sigma, + MAX(dp1.Object.gDeclOffset_PS_Sigma) AS max_gDeclOffset_PS_Sigma, + COUNT(dp1.Object.gRaDeclOffset_PS_Cov) AS count_gRaDeclOffset_PS_Cov, + MIN(dp1.Object.gRaDeclOffset_PS_Cov) AS min_gRaDeclOffset_PS_Cov, + MAX(dp1.Object.gRaDeclOffset_PS_Cov) AS max_gRaDeclOffset_PS_Cov, + COUNT(dp1.Object.gRaOffset_SG) AS count_gRaOffset_SG, + MIN(dp1.Object.gRaOffset_SG) AS min_gRaOffset_SG, + MAX(dp1.Object.gRaOffset_SG) AS max_gRaOffset_SG, + COUNT(dp1.Object.gRaOffset_SG_Sigma) AS count_gRaOffset_SG_Sigma, + MIN(dp1.Object.gRaOffset_SG_Sigma) AS min_gRaOffset_SG_Sigma, + MAX(dp1.Object.gRaOffset_SG_Sigma) AS max_gRaOffset_SG_Sigma, + COUNT(dp1.Object.gDeclOffset_SG) AS count_gDeclOffset_SG, + MIN(dp1.Object.gDeclOffset_SG) AS min_gDeclOffset_SG, + MAX(dp1.Object.gDeclOffset_SG) AS max_gDeclOffset_SG, + COUNT(dp1.Object.gDeclOffset_SG_Sigma) AS count_gDeclOffset_SG_Sigma, + MIN(dp1.Object.gDeclOffset_SG_Sigma) AS min_gDeclOffset_SG_Sigma, + MAX(dp1.Object.gDeclOffset_SG_Sigma) AS max_gDeclOffset_SG_Sigma, + COUNT(dp1.Object.gRaDeclOffset_SG_Cov) AS count_gRaDeclOffset_SG_Cov, + MIN(dp1.Object.gRaDeclOffset_SG_Cov) AS min_gRaDeclOffset_SG_Cov, + MAX(dp1.Object.gRaDeclOffset_SG_Cov) AS max_gRaDeclOffset_SG_Cov, + COUNT(dp1.Object.gLnL_PS) AS count_gLnL_PS, + MIN(dp1.Object.gLnL_PS) AS min_gLnL_PS, + MAX(dp1.Object.gLnL_PS) AS max_gLnL_PS, + COUNT(dp1.Object.gLnL_SG) AS count_gLnL_SG, + MIN(dp1.Object.gLnL_SG) AS min_gLnL_SG, + MAX(dp1.Object.gLnL_SG) AS max_gLnL_SG, + COUNT(dp1.Object.gFlux_PS) AS count_gFlux_PS, + MIN(dp1.Object.gFlux_PS) AS min_gFlux_PS, + MAX(dp1.Object.gFlux_PS) AS max_gFlux_PS, + COUNT(dp1.Object.gFlux_PS_Sigma) AS count_gFlux_PS_Sigma, + MIN(dp1.Object.gFlux_PS_Sigma) AS min_gFlux_PS_Sigma, + MAX(dp1.Object.gFlux_PS_Sigma) AS max_gFlux_PS_Sigma, + COUNT(dp1.Object.gFlux_ESG) AS count_gFlux_ESG, + MIN(dp1.Object.gFlux_ESG) AS min_gFlux_ESG, + MAX(dp1.Object.gFlux_ESG) AS max_gFlux_ESG, + COUNT(dp1.Object.gFlux_ESG_Sigma) AS count_gFlux_ESG_Sigma, + MIN(dp1.Object.gFlux_ESG_Sigma) AS min_gFlux_ESG_Sigma, + MAX(dp1.Object.gFlux_ESG_Sigma) AS max_gFlux_ESG_Sigma, + COUNT(dp1.Object.gFlux_Gaussian) AS count_gFlux_Gaussian, + MIN(dp1.Object.gFlux_Gaussian) AS min_gFlux_Gaussian, + MAX(dp1.Object.gFlux_Gaussian) AS max_gFlux_Gaussian, + COUNT(dp1.Object.gFlux_Gaussian_Sigma) AS count_gFlux_Gaussian_Sigma, + MIN(dp1.Object.gFlux_Gaussian_Sigma) AS min_gFlux_Gaussian_Sigma, + MAX(dp1.Object.gFlux_Gaussian_Sigma) AS max_gFlux_Gaussian_Sigma, + COUNT(dp1.Object.gTimescale) AS count_gTimescale, + MIN(dp1.Object.gTimescale) AS min_gTimescale, + MAX(dp1.Object.gTimescale) AS max_gTimescale, + COUNT(dp1.Object.gEarliestObsTime) AS count_gEarliestObsTime, + MIN(dp1.Object.gEarliestObsTime) AS min_gEarliestObsTime, + MAX(dp1.Object.gEarliestObsTime) AS max_gEarliestObsTime, + COUNT(dp1.Object.gLatestObsTime) AS count_gLatestObsTime, + MIN(dp1.Object.gLatestObsTime) AS min_gLatestObsTime, + MAX(dp1.Object.gLatestObsTime) AS max_gLatestObsTime, + COUNT(dp1.Object.gSersicN_SG) AS count_gSersicN_SG, + MIN(dp1.Object.gSersicN_SG) AS min_gSersicN_SG, + MAX(dp1.Object.gSersicN_SG) AS max_gSersicN_SG, + COUNT(dp1.Object.gSersicN_SG_Sigma) AS count_gSersicN_SG_Sigma, + MIN(dp1.Object.gSersicN_SG_Sigma) AS min_gSersicN_SG_Sigma, + MAX(dp1.Object.gSersicN_SG_Sigma) AS max_gSersicN_SG_Sigma, + COUNT(dp1.Object.gE1_SG) AS count_gE1_SG, + MIN(dp1.Object.gE1_SG) AS min_gE1_SG, + MAX(dp1.Object.gE1_SG) AS max_gE1_SG, + COUNT(dp1.Object.gE1_SG_Sigma) AS count_gE1_SG_Sigma, + MIN(dp1.Object.gE1_SG_Sigma) AS min_gE1_SG_Sigma, + MAX(dp1.Object.gE1_SG_Sigma) AS max_gE1_SG_Sigma, + COUNT(dp1.Object.gE2_SG) AS count_gE2_SG, + MIN(dp1.Object.gE2_SG) AS min_gE2_SG, + MAX(dp1.Object.gE2_SG) AS max_gE2_SG, + COUNT(dp1.Object.gE2_SG_Sigma) AS count_gE2_SG_Sigma, + MIN(dp1.Object.gE2_SG_Sigma) AS min_gE2_SG_Sigma, + MAX(dp1.Object.gE2_SG_Sigma) AS max_gE2_SG_Sigma, + COUNT(dp1.Object.gRadius_SG) AS count_gRadius_SG, + MIN(dp1.Object.gRadius_SG) AS min_gRadius_SG, + MAX(dp1.Object.gRadius_SG) AS max_gRadius_SG, + COUNT(dp1.Object.gRadius_SG_Sigma) AS count_gRadius_SG_Sigma, + MIN(dp1.Object.gRadius_SG_Sigma) AS min_gRadius_SG_Sigma, + MAX(dp1.Object.gRadius_SG_Sigma) AS max_gRadius_SG_Sigma, + COUNT(dp1.Object.gFlags) AS count_gFlags, + MIN(dp1.Object.gFlags) AS min_gFlags, + MAX(dp1.Object.gFlags) AS max_gFlags, + COUNT(dp1.Object.rNumObs) AS count_rNumObs, + MIN(dp1.Object.rNumObs) AS min_rNumObs, + MAX(dp1.Object.rNumObs) AS max_rNumObs, + COUNT(dp1.Object.rExtendedness) AS count_rExtendedness, + MIN(dp1.Object.rExtendedness) AS min_rExtendedness, + MAX(dp1.Object.rExtendedness) AS max_rExtendedness, + COUNT(dp1.Object.rVarProb) AS count_rVarProb, + MIN(dp1.Object.rVarProb) AS min_rVarProb, + MAX(dp1.Object.rVarProb) AS max_rVarProb, + COUNT(dp1.Object.rRaOffset_PS) AS count_rRaOffset_PS, + MIN(dp1.Object.rRaOffset_PS) AS min_rRaOffset_PS, + MAX(dp1.Object.rRaOffset_PS) AS max_rRaOffset_PS, + COUNT(dp1.Object.rRaOffset_PS_Sigma) AS count_rRaOffset_PS_Sigma, + MIN(dp1.Object.rRaOffset_PS_Sigma) AS min_rRaOffset_PS_Sigma, + MAX(dp1.Object.rRaOffset_PS_Sigma) AS max_rRaOffset_PS_Sigma, + COUNT(dp1.Object.rDeclOffset_PS) AS count_rDeclOffset_PS, + MIN(dp1.Object.rDeclOffset_PS) AS min_rDeclOffset_PS, + MAX(dp1.Object.rDeclOffset_PS) AS max_rDeclOffset_PS, + COUNT(dp1.Object.rDeclOffset_PS_Sigma) AS count_rDeclOffset_PS_Sigma, + MIN(dp1.Object.rDeclOffset_PS_Sigma) AS min_rDeclOffset_PS_Sigma, + MAX(dp1.Object.rDeclOffset_PS_Sigma) AS max_rDeclOffset_PS_Sigma, + COUNT(dp1.Object.rRaDeclOffset_PS_Cov) AS count_rRaDeclOffset_PS_Cov, + MIN(dp1.Object.rRaDeclOffset_PS_Cov) AS min_rRaDeclOffset_PS_Cov, + MAX(dp1.Object.rRaDeclOffset_PS_Cov) AS max_rRaDeclOffset_PS_Cov, + COUNT(dp1.Object.rRaOffset_SG) AS count_rRaOffset_SG, + MIN(dp1.Object.rRaOffset_SG) AS min_rRaOffset_SG, + MAX(dp1.Object.rRaOffset_SG) AS max_rRaOffset_SG, + COUNT(dp1.Object.rRaOffset_SG_Sigma) AS count_rRaOffset_SG_Sigma, + MIN(dp1.Object.rRaOffset_SG_Sigma) AS min_rRaOffset_SG_Sigma, + MAX(dp1.Object.rRaOffset_SG_Sigma) AS max_rRaOffset_SG_Sigma, + COUNT(dp1.Object.rDeclOffset_SG) AS count_rDeclOffset_SG, + MIN(dp1.Object.rDeclOffset_SG) AS min_rDeclOffset_SG, + MAX(dp1.Object.rDeclOffset_SG) AS max_rDeclOffset_SG, + COUNT(dp1.Object.rDeclOffset_SG_Sigma) AS count_rDeclOffset_SG_Sigma, + MIN(dp1.Object.rDeclOffset_SG_Sigma) AS min_rDeclOffset_SG_Sigma, + MAX(dp1.Object.rDeclOffset_SG_Sigma) AS max_rDeclOffset_SG_Sigma, + COUNT(dp1.Object.rRaDeclOffset_SG_Cov) AS count_rRaDeclOffset_SG_Cov, + MIN(dp1.Object.rRaDeclOffset_SG_Cov) AS min_rRaDeclOffset_SG_Cov, + MAX(dp1.Object.rRaDeclOffset_SG_Cov) AS max_rRaDeclOffset_SG_Cov, + COUNT(dp1.Object.rLnL_PS) AS count_rLnL_PS, + MIN(dp1.Object.rLnL_PS) AS min_rLnL_PS, + MAX(dp1.Object.rLnL_PS) AS max_rLnL_PS, + COUNT(dp1.Object.rLnL_SG) AS count_rLnL_SG, + MIN(dp1.Object.rLnL_SG) AS min_rLnL_SG, + MAX(dp1.Object.rLnL_SG) AS max_rLnL_SG, + COUNT(dp1.Object.rFlux_PS) AS count_rFlux_PS, + MIN(dp1.Object.rFlux_PS) AS min_rFlux_PS, + MAX(dp1.Object.rFlux_PS) AS max_rFlux_PS, + COUNT(dp1.Object.rFlux_PS_Sigma) AS count_rFlux_PS_Sigma, + MIN(dp1.Object.rFlux_PS_Sigma) AS min_rFlux_PS_Sigma, + MAX(dp1.Object.rFlux_PS_Sigma) AS max_rFlux_PS_Sigma, + COUNT(dp1.Object.rFlux_ESG) AS count_rFlux_ESG, + MIN(dp1.Object.rFlux_ESG) AS min_rFlux_ESG, + MAX(dp1.Object.rFlux_ESG) AS max_rFlux_ESG, + COUNT(dp1.Object.rFlux_ESG_Sigma) AS count_rFlux_ESG_Sigma, + MIN(dp1.Object.rFlux_ESG_Sigma) AS min_rFlux_ESG_Sigma, + MAX(dp1.Object.rFlux_ESG_Sigma) AS max_rFlux_ESG_Sigma, + COUNT(dp1.Object.rFlux_Gaussian) AS count_rFlux_Gaussian, + MIN(dp1.Object.rFlux_Gaussian) AS min_rFlux_Gaussian, + MAX(dp1.Object.rFlux_Gaussian) AS max_rFlux_Gaussian, + COUNT(dp1.Object.rFlux_Gaussian_Sigma) AS count_rFlux_Gaussian_Sigma, + MIN(dp1.Object.rFlux_Gaussian_Sigma) AS min_rFlux_Gaussian_Sigma, + MAX(dp1.Object.rFlux_Gaussian_Sigma) AS max_rFlux_Gaussian_Sigma, + COUNT(dp1.Object.rTimescale) AS count_rTimescale, + MIN(dp1.Object.rTimescale) AS min_rTimescale, + MAX(dp1.Object.rTimescale) AS max_rTimescale, + COUNT(dp1.Object.rEarliestObsTime) AS count_rEarliestObsTime, + MIN(dp1.Object.rEarliestObsTime) AS min_rEarliestObsTime, + MAX(dp1.Object.rEarliestObsTime) AS max_rEarliestObsTime, + COUNT(dp1.Object.rLatestObsTime) AS count_rLatestObsTime, + MIN(dp1.Object.rLatestObsTime) AS min_rLatestObsTime, + MAX(dp1.Object.rLatestObsTime) AS max_rLatestObsTime, + COUNT(dp1.Object.rSersicN_SG) AS count_rSersicN_SG, + MIN(dp1.Object.rSersicN_SG) AS min_rSersicN_SG, + MAX(dp1.Object.rSersicN_SG) AS max_rSersicN_SG, + COUNT(dp1.Object.rSersicN_SG_Sigma) AS count_rSersicN_SG_Sigma, + MIN(dp1.Object.rSersicN_SG_Sigma) AS min_rSersicN_SG_Sigma, + MAX(dp1.Object.rSersicN_SG_Sigma) AS max_rSersicN_SG_Sigma, + COUNT(dp1.Object.rE1_SG) AS count_rE1_SG, + MIN(dp1.Object.rE1_SG) AS min_rE1_SG, + MAX(dp1.Object.rE1_SG) AS max_rE1_SG, + COUNT(dp1.Object.rE1_SG_Sigma) AS count_rE1_SG_Sigma, + MIN(dp1.Object.rE1_SG_Sigma) AS min_rE1_SG_Sigma, + MAX(dp1.Object.rE1_SG_Sigma) AS max_rE1_SG_Sigma, + COUNT(dp1.Object.rE2_SG) AS count_rE2_SG, + MIN(dp1.Object.rE2_SG) AS min_rE2_SG, + MAX(dp1.Object.rE2_SG) AS max_rE2_SG, + COUNT(dp1.Object.rE2_SG_Sigma) AS count_rE2_SG_Sigma, + MIN(dp1.Object.rE2_SG_Sigma) AS min_rE2_SG_Sigma, + MAX(dp1.Object.rE2_SG_Sigma) AS max_rE2_SG_Sigma, + COUNT(dp1.Object.rRadius_SG) AS count_rRadius_SG, + MIN(dp1.Object.rRadius_SG) AS min_rRadius_SG, + MAX(dp1.Object.rRadius_SG) AS max_rRadius_SG, + COUNT(dp1.Object.rRadius_SG_Sigma) AS count_rRadius_SG_Sigma, + MIN(dp1.Object.rRadius_SG_Sigma) AS min_rRadius_SG_Sigma, + MAX(dp1.Object.rRadius_SG_Sigma) AS max_rRadius_SG_Sigma, + COUNT(dp1.Object.rFlags) AS count_rFlags, + MIN(dp1.Object.rFlags) AS min_rFlags, + MAX(dp1.Object.rFlags) AS max_rFlags, + COUNT(dp1.Object.iNumObs) AS count_iNumObs, + MIN(dp1.Object.iNumObs) AS min_iNumObs, + MAX(dp1.Object.iNumObs) AS max_iNumObs, + COUNT(dp1.Object.iExtendedness) AS count_iExtendedness, + MIN(dp1.Object.iExtendedness) AS min_iExtendedness, + MAX(dp1.Object.iExtendedness) AS max_iExtendedness, + COUNT(dp1.Object.iVarProb) AS count_iVarProb, + MIN(dp1.Object.iVarProb) AS min_iVarProb, + MAX(dp1.Object.iVarProb) AS max_iVarProb, + COUNT(dp1.Object.iRaOffset_PS) AS count_iRaOffset_PS, + MIN(dp1.Object.iRaOffset_PS) AS min_iRaOffset_PS, + MAX(dp1.Object.iRaOffset_PS) AS max_iRaOffset_PS, + COUNT(dp1.Object.iRaOffset_PS_Sigma) AS count_iRaOffset_PS_Sigma, + MIN(dp1.Object.iRaOffset_PS_Sigma) AS min_iRaOffset_PS_Sigma, + MAX(dp1.Object.iRaOffset_PS_Sigma) AS max_iRaOffset_PS_Sigma, + COUNT(dp1.Object.iDeclOffset_PS) AS count_iDeclOffset_PS, + MIN(dp1.Object.iDeclOffset_PS) AS min_iDeclOffset_PS, + MAX(dp1.Object.iDeclOffset_PS) AS max_iDeclOffset_PS, + COUNT(dp1.Object.iDeclOffset_PS_Sigma) AS count_iDeclOffset_PS_Sigma, + MIN(dp1.Object.iDeclOffset_PS_Sigma) AS min_iDeclOffset_PS_Sigma, + MAX(dp1.Object.iDeclOffset_PS_Sigma) AS max_iDeclOffset_PS_Sigma, + COUNT(dp1.Object.iRaDeclOffset_PS_Cov) AS count_iRaDeclOffset_PS_Cov, + MIN(dp1.Object.iRaDeclOffset_PS_Cov) AS min_iRaDeclOffset_PS_Cov, + MAX(dp1.Object.iRaDeclOffset_PS_Cov) AS max_iRaDeclOffset_PS_Cov, + COUNT(dp1.Object.iRaOffset_SG) AS count_iRaOffset_SG, + MIN(dp1.Object.iRaOffset_SG) AS min_iRaOffset_SG, + MAX(dp1.Object.iRaOffset_SG) AS max_iRaOffset_SG, + COUNT(dp1.Object.iRaOffset_SG_Sigma) AS count_iRaOffset_SG_Sigma, + MIN(dp1.Object.iRaOffset_SG_Sigma) AS min_iRaOffset_SG_Sigma, + MAX(dp1.Object.iRaOffset_SG_Sigma) AS max_iRaOffset_SG_Sigma, + COUNT(dp1.Object.iDeclOffset_SG) AS count_iDeclOffset_SG, + MIN(dp1.Object.iDeclOffset_SG) AS min_iDeclOffset_SG, + MAX(dp1.Object.iDeclOffset_SG) AS max_iDeclOffset_SG, + COUNT(dp1.Object.iDeclOffset_SG_Sigma) AS count_iDeclOffset_SG_Sigma, + MIN(dp1.Object.iDeclOffset_SG_Sigma) AS min_iDeclOffset_SG_Sigma, + MAX(dp1.Object.iDeclOffset_SG_Sigma) AS max_iDeclOffset_SG_Sigma, + COUNT(dp1.Object.iRaDeclOffset_SG_Cov) AS count_iRaDeclOffset_SG_Cov, + MIN(dp1.Object.iRaDeclOffset_SG_Cov) AS min_iRaDeclOffset_SG_Cov, + MAX(dp1.Object.iRaDeclOffset_SG_Cov) AS max_iRaDeclOffset_SG_Cov, + COUNT(dp1.Object.iLnL_PS) AS count_iLnL_PS, + MIN(dp1.Object.iLnL_PS) AS min_iLnL_PS, + MAX(dp1.Object.iLnL_PS) AS max_iLnL_PS, + COUNT(dp1.Object.iLnL_SG) AS count_iLnL_SG, + MIN(dp1.Object.iLnL_SG) AS min_iLnL_SG, + MAX(dp1.Object.iLnL_SG) AS max_iLnL_SG, + COUNT(dp1.Object.iFlux_PS) AS count_iFlux_PS, + MIN(dp1.Object.iFlux_PS) AS min_iFlux_PS, + MAX(dp1.Object.iFlux_PS) AS max_iFlux_PS, + COUNT(dp1.Object.iFlux_PS_Sigma) AS count_iFlux_PS_Sigma, + MIN(dp1.Object.iFlux_PS_Sigma) AS min_iFlux_PS_Sigma, + MAX(dp1.Object.iFlux_PS_Sigma) AS max_iFlux_PS_Sigma, + COUNT(dp1.Object.iFlux_ESG) AS count_iFlux_ESG, + MIN(dp1.Object.iFlux_ESG) AS min_iFlux_ESG, + MAX(dp1.Object.iFlux_ESG) AS max_iFlux_ESG, + COUNT(dp1.Object.iFlux_ESG_Sigma) AS count_iFlux_ESG_Sigma, + MIN(dp1.Object.iFlux_ESG_Sigma) AS min_iFlux_ESG_Sigma, + MAX(dp1.Object.iFlux_ESG_Sigma) AS max_iFlux_ESG_Sigma, + COUNT(dp1.Object.iFlux_Gaussian) AS count_iFlux_Gaussian, + MIN(dp1.Object.iFlux_Gaussian) AS min_iFlux_Gaussian, + MAX(dp1.Object.iFlux_Gaussian) AS max_iFlux_Gaussian, + COUNT(dp1.Object.iFlux_Gaussian_Sigma) AS count_iFlux_Gaussian_Sigma, + MIN(dp1.Object.iFlux_Gaussian_Sigma) AS min_iFlux_Gaussian_Sigma, + MAX(dp1.Object.iFlux_Gaussian_Sigma) AS max_iFlux_Gaussian_Sigma, + COUNT(dp1.Object.iTimescale) AS count_iTimescale, + MIN(dp1.Object.iTimescale) AS min_iTimescale, + MAX(dp1.Object.iTimescale) AS max_iTimescale, + COUNT(dp1.Object.iEarliestObsTime) AS count_iEarliestObsTime, + MIN(dp1.Object.iEarliestObsTime) AS min_iEarliestObsTime, + MAX(dp1.Object.iEarliestObsTime) AS max_iEarliestObsTime, + COUNT(dp1.Object.iLatestObsTime) AS count_iLatestObsTime, + MIN(dp1.Object.iLatestObsTime) AS min_iLatestObsTime, + MAX(dp1.Object.iLatestObsTime) AS max_iLatestObsTime, + COUNT(dp1.Object.iSersicN_SG) AS count_iSersicN_SG, + MIN(dp1.Object.iSersicN_SG) AS min_iSersicN_SG, + MAX(dp1.Object.iSersicN_SG) AS max_iSersicN_SG, + COUNT(dp1.Object.iSersicN_SG_Sigma) AS count_iSersicN_SG_Sigma, + MIN(dp1.Object.iSersicN_SG_Sigma) AS min_iSersicN_SG_Sigma, + MAX(dp1.Object.iSersicN_SG_Sigma) AS max_iSersicN_SG_Sigma, + COUNT(dp1.Object.iE1_SG) AS count_iE1_SG, + MIN(dp1.Object.iE1_SG) AS min_iE1_SG, + MAX(dp1.Object.iE1_SG) AS max_iE1_SG, + COUNT(dp1.Object.iE1_SG_Sigma) AS count_iE1_SG_Sigma, + MIN(dp1.Object.iE1_SG_Sigma) AS min_iE1_SG_Sigma, + MAX(dp1.Object.iE1_SG_Sigma) AS max_iE1_SG_Sigma, + COUNT(dp1.Object.iE2_SG) AS count_iE2_SG, + MIN(dp1.Object.iE2_SG) AS min_iE2_SG, + MAX(dp1.Object.iE2_SG) AS max_iE2_SG, + COUNT(dp1.Object.iE2_SG_Sigma) AS count_iE2_SG_Sigma, + MIN(dp1.Object.iE2_SG_Sigma) AS min_iE2_SG_Sigma, + MAX(dp1.Object.iE2_SG_Sigma) AS max_iE2_SG_Sigma, + COUNT(dp1.Object.iRadius_SG) AS count_iRadius_SG, + MIN(dp1.Object.iRadius_SG) AS min_iRadius_SG, + MAX(dp1.Object.iRadius_SG) AS max_iRadius_SG, + COUNT(dp1.Object.iRadius_SG_Sigma) AS count_iRadius_SG_Sigma, + MIN(dp1.Object.iRadius_SG_Sigma) AS min_iRadius_SG_Sigma, + MAX(dp1.Object.iRadius_SG_Sigma) AS max_iRadius_SG_Sigma, + COUNT(dp1.Object.iFlags) AS count_iFlags, + MIN(dp1.Object.iFlags) AS min_iFlags, + MAX(dp1.Object.iFlags) AS max_iFlags, + COUNT(dp1.Object.zNumObs) AS count_zNumObs, + MIN(dp1.Object.zNumObs) AS min_zNumObs, + MAX(dp1.Object.zNumObs) AS max_zNumObs, + COUNT(dp1.Object.zExtendedness) AS count_zExtendedness, + MIN(dp1.Object.zExtendedness) AS min_zExtendedness, + MAX(dp1.Object.zExtendedness) AS max_zExtendedness, + COUNT(dp1.Object.zVarProb) AS count_zVarProb, + MIN(dp1.Object.zVarProb) AS min_zVarProb, + MAX(dp1.Object.zVarProb) AS max_zVarProb, + COUNT(dp1.Object.zRaOffset_PS) AS count_zRaOffset_PS, + MIN(dp1.Object.zRaOffset_PS) AS min_zRaOffset_PS, + MAX(dp1.Object.zRaOffset_PS) AS max_zRaOffset_PS, + COUNT(dp1.Object.zRaOffset_PS_Sigma) AS count_zRaOffset_PS_Sigma, + MIN(dp1.Object.zRaOffset_PS_Sigma) AS min_zRaOffset_PS_Sigma, + MAX(dp1.Object.zRaOffset_PS_Sigma) AS max_zRaOffset_PS_Sigma, + COUNT(dp1.Object.zDeclOffset_PS) AS count_zDeclOffset_PS, + MIN(dp1.Object.zDeclOffset_PS) AS min_zDeclOffset_PS, + MAX(dp1.Object.zDeclOffset_PS) AS max_zDeclOffset_PS, + COUNT(dp1.Object.zDeclOffset_PS_Sigma) AS count_zDeclOffset_PS_Sigma, + MIN(dp1.Object.zDeclOffset_PS_Sigma) AS min_zDeclOffset_PS_Sigma, + MAX(dp1.Object.zDeclOffset_PS_Sigma) AS max_zDeclOffset_PS_Sigma, + COUNT(dp1.Object.zRaDeclOffset_PS_Cov) AS count_zRaDeclOffset_PS_Cov, + MIN(dp1.Object.zRaDeclOffset_PS_Cov) AS min_zRaDeclOffset_PS_Cov, + MAX(dp1.Object.zRaDeclOffset_PS_Cov) AS max_zRaDeclOffset_PS_Cov, + COUNT(dp1.Object.zRaOffset_SG) AS count_zRaOffset_SG, + MIN(dp1.Object.zRaOffset_SG) AS min_zRaOffset_SG, + MAX(dp1.Object.zRaOffset_SG) AS max_zRaOffset_SG, + COUNT(dp1.Object.zRaOffset_SG_Sigma) AS count_zRaOffset_SG_Sigma, + MIN(dp1.Object.zRaOffset_SG_Sigma) AS min_zRaOffset_SG_Sigma, + MAX(dp1.Object.zRaOffset_SG_Sigma) AS max_zRaOffset_SG_Sigma, + COUNT(dp1.Object.zDeclOffset_SG) AS count_zDeclOffset_SG, + MIN(dp1.Object.zDeclOffset_SG) AS min_zDeclOffset_SG, + MAX(dp1.Object.zDeclOffset_SG) AS max_zDeclOffset_SG, + COUNT(dp1.Object.zDeclOffset_SG_Sigma) AS count_zDeclOffset_SG_Sigma, + MIN(dp1.Object.zDeclOffset_SG_Sigma) AS min_zDeclOffset_SG_Sigma, + MAX(dp1.Object.zDeclOffset_SG_Sigma) AS max_zDeclOffset_SG_Sigma, + COUNT(dp1.Object.zRaDeclOffset_SG_Cov) AS count_zRaDeclOffset_SG_Cov, + MIN(dp1.Object.zRaDeclOffset_SG_Cov) AS min_zRaDeclOffset_SG_Cov, + MAX(dp1.Object.zRaDeclOffset_SG_Cov) AS max_zRaDeclOffset_SG_Cov, + COUNT(dp1.Object.zLnL_PS) AS count_zLnL_PS, + MIN(dp1.Object.zLnL_PS) AS min_zLnL_PS, + MAX(dp1.Object.zLnL_PS) AS max_zLnL_PS, + COUNT(dp1.Object.zLnL_SG) AS count_zLnL_SG, + MIN(dp1.Object.zLnL_SG) AS min_zLnL_SG, + MAX(dp1.Object.zLnL_SG) AS max_zLnL_SG, + COUNT(dp1.Object.zFlux_PS) AS count_zFlux_PS, + MIN(dp1.Object.zFlux_PS) AS min_zFlux_PS, + MAX(dp1.Object.zFlux_PS) AS max_zFlux_PS, + COUNT(dp1.Object.zFlux_PS_Sigma) AS count_zFlux_PS_Sigma, + MIN(dp1.Object.zFlux_PS_Sigma) AS min_zFlux_PS_Sigma, + MAX(dp1.Object.zFlux_PS_Sigma) AS max_zFlux_PS_Sigma, + COUNT(dp1.Object.zFlux_ESG) AS count_zFlux_ESG, + MIN(dp1.Object.zFlux_ESG) AS min_zFlux_ESG, + MAX(dp1.Object.zFlux_ESG) AS max_zFlux_ESG, + COUNT(dp1.Object.zFlux_ESG_Sigma) AS count_zFlux_ESG_Sigma, + MIN(dp1.Object.zFlux_ESG_Sigma) AS min_zFlux_ESG_Sigma, + MAX(dp1.Object.zFlux_ESG_Sigma) AS max_zFlux_ESG_Sigma, + COUNT(dp1.Object.zFlux_Gaussian) AS count_zFlux_Gaussian, + MIN(dp1.Object.zFlux_Gaussian) AS min_zFlux_Gaussian, + MAX(dp1.Object.zFlux_Gaussian) AS max_zFlux_Gaussian, + COUNT(dp1.Object.zFlux_Gaussian_Sigma) AS count_zFlux_Gaussian_Sigma, + MIN(dp1.Object.zFlux_Gaussian_Sigma) AS min_zFlux_Gaussian_Sigma, + MAX(dp1.Object.zFlux_Gaussian_Sigma) AS max_zFlux_Gaussian_Sigma, + COUNT(dp1.Object.zTimescale) AS count_zTimescale, + MIN(dp1.Object.zTimescale) AS min_zTimescale, + MAX(dp1.Object.zTimescale) AS max_zTimescale, + COUNT(dp1.Object.zEarliestObsTime) AS count_zEarliestObsTime, + MIN(dp1.Object.zEarliestObsTime) AS min_zEarliestObsTime, + MAX(dp1.Object.zEarliestObsTime) AS max_zEarliestObsTime, + COUNT(dp1.Object.zLatestObsTime) AS count_zLatestObsTime, + MIN(dp1.Object.zLatestObsTime) AS min_zLatestObsTime, + MAX(dp1.Object.zLatestObsTime) AS max_zLatestObsTime, + COUNT(dp1.Object.zSersicN_SG) AS count_zSersicN_SG, + MIN(dp1.Object.zSersicN_SG) AS min_zSersicN_SG, + MAX(dp1.Object.zSersicN_SG) AS max_zSersicN_SG, + COUNT(dp1.Object.zSersicN_SG_Sigma) AS count_zSersicN_SG_Sigma, + MIN(dp1.Object.zSersicN_SG_Sigma) AS min_zSersicN_SG_Sigma, + MAX(dp1.Object.zSersicN_SG_Sigma) AS max_zSersicN_SG_Sigma, + COUNT(dp1.Object.zE1_SG) AS count_zE1_SG, + MIN(dp1.Object.zE1_SG) AS min_zE1_SG, + MAX(dp1.Object.zE1_SG) AS max_zE1_SG, + COUNT(dp1.Object.zE1_SG_Sigma) AS count_zE1_SG_Sigma, + MIN(dp1.Object.zE1_SG_Sigma) AS min_zE1_SG_Sigma, + MAX(dp1.Object.zE1_SG_Sigma) AS max_zE1_SG_Sigma, + COUNT(dp1.Object.zE2_SG) AS count_zE2_SG, + MIN(dp1.Object.zE2_SG) AS min_zE2_SG, + MAX(dp1.Object.zE2_SG) AS max_zE2_SG, + COUNT(dp1.Object.zE2_SG_Sigma) AS count_zE2_SG_Sigma, + MIN(dp1.Object.zE2_SG_Sigma) AS min_zE2_SG_Sigma, + MAX(dp1.Object.zE2_SG_Sigma) AS max_zE2_SG_Sigma, + COUNT(dp1.Object.zRadius_SG) AS count_zRadius_SG, + MIN(dp1.Object.zRadius_SG) AS min_zRadius_SG, + MAX(dp1.Object.zRadius_SG) AS max_zRadius_SG, + COUNT(dp1.Object.zRadius_SG_Sigma) AS count_zRadius_SG_Sigma, + MIN(dp1.Object.zRadius_SG_Sigma) AS min_zRadius_SG_Sigma, + MAX(dp1.Object.zRadius_SG_Sigma) AS max_zRadius_SG_Sigma, + COUNT(dp1.Object.zFlags) AS count_zFlags, + MIN(dp1.Object.zFlags) AS min_zFlags, + MAX(dp1.Object.zFlags) AS max_zFlags, + COUNT(dp1.Object.yNumObs) AS count_yNumObs, + MIN(dp1.Object.yNumObs) AS min_yNumObs, + MAX(dp1.Object.yNumObs) AS max_yNumObs, + COUNT(dp1.Object.yExtendedness) AS count_yExtendedness, + MIN(dp1.Object.yExtendedness) AS min_yExtendedness, + MAX(dp1.Object.yExtendedness) AS max_yExtendedness, + COUNT(dp1.Object.yVarProb) AS count_yVarProb, + MIN(dp1.Object.yVarProb) AS min_yVarProb, + MAX(dp1.Object.yVarProb) AS max_yVarProb, + COUNT(dp1.Object.yRaOffset_PS) AS count_yRaOffset_PS, + MIN(dp1.Object.yRaOffset_PS) AS min_yRaOffset_PS, + MAX(dp1.Object.yRaOffset_PS) AS max_yRaOffset_PS, + COUNT(dp1.Object.yRaOffset_PS_Sigma) AS count_yRaOffset_PS_Sigma, + MIN(dp1.Object.yRaOffset_PS_Sigma) AS min_yRaOffset_PS_Sigma, + MAX(dp1.Object.yRaOffset_PS_Sigma) AS max_yRaOffset_PS_Sigma, + COUNT(dp1.Object.yDeclOffset_PS) AS count_yDeclOffset_PS, + MIN(dp1.Object.yDeclOffset_PS) AS min_yDeclOffset_PS, + MAX(dp1.Object.yDeclOffset_PS) AS max_yDeclOffset_PS, + COUNT(dp1.Object.yDeclOffset_PS_Sigma) AS count_yDeclOffset_PS_Sigma, + MIN(dp1.Object.yDeclOffset_PS_Sigma) AS min_yDeclOffset_PS_Sigma, + MAX(dp1.Object.yDeclOffset_PS_Sigma) AS max_yDeclOffset_PS_Sigma, + COUNT(dp1.Object.yRaDeclOffset_PS_Cov) AS count_yRaDeclOffset_PS_Cov, + MIN(dp1.Object.yRaDeclOffset_PS_Cov) AS min_yRaDeclOffset_PS_Cov, + MAX(dp1.Object.yRaDeclOffset_PS_Cov) AS max_yRaDeclOffset_PS_Cov, + COUNT(dp1.Object.yRaOffset_SG) AS count_yRaOffset_SG, + MIN(dp1.Object.yRaOffset_SG) AS min_yRaOffset_SG, + MAX(dp1.Object.yRaOffset_SG) AS max_yRaOffset_SG, + COUNT(dp1.Object.yRaOffset_SG_Sigma) AS count_yRaOffset_SG_Sigma, + MIN(dp1.Object.yRaOffset_SG_Sigma) AS min_yRaOffset_SG_Sigma, + MAX(dp1.Object.yRaOffset_SG_Sigma) AS max_yRaOffset_SG_Sigma, + COUNT(dp1.Object.yDeclOffset_SG) AS count_yDeclOffset_SG, + MIN(dp1.Object.yDeclOffset_SG) AS min_yDeclOffset_SG, + MAX(dp1.Object.yDeclOffset_SG) AS max_yDeclOffset_SG, + COUNT(dp1.Object.yDeclOffset_SG_Sigma) AS count_yDeclOffset_SG_Sigma, + MIN(dp1.Object.yDeclOffset_SG_Sigma) AS min_yDeclOffset_SG_Sigma, + MAX(dp1.Object.yDeclOffset_SG_Sigma) AS max_yDeclOffset_SG_Sigma, + COUNT(dp1.Object.yRaDeclOffset_SG_Cov) AS count_yRaDeclOffset_SG_Cov, + MIN(dp1.Object.yRaDeclOffset_SG_Cov) AS min_yRaDeclOffset_SG_Cov, + MAX(dp1.Object.yRaDeclOffset_SG_Cov) AS max_yRaDeclOffset_SG_Cov, + COUNT(dp1.Object.yLnL_PS) AS count_yLnL_PS, + MIN(dp1.Object.yLnL_PS) AS min_yLnL_PS, + MAX(dp1.Object.yLnL_PS) AS max_yLnL_PS, + COUNT(dp1.Object.yLnL_SG) AS count_yLnL_SG, + MIN(dp1.Object.yLnL_SG) AS min_yLnL_SG, + MAX(dp1.Object.yLnL_SG) AS max_yLnL_SG, + COUNT(dp1.Object.yFlux_PS) AS count_yFlux_PS, + MIN(dp1.Object.yFlux_PS) AS min_yFlux_PS, + MAX(dp1.Object.yFlux_PS) AS max_yFlux_PS, + COUNT(dp1.Object.yFlux_PS_Sigma) AS count_yFlux_PS_Sigma, + MIN(dp1.Object.yFlux_PS_Sigma) AS min_yFlux_PS_Sigma, + MAX(dp1.Object.yFlux_PS_Sigma) AS max_yFlux_PS_Sigma, + COUNT(dp1.Object.yFlux_ESG) AS count_yFlux_ESG, + MIN(dp1.Object.yFlux_ESG) AS min_yFlux_ESG, + MAX(dp1.Object.yFlux_ESG) AS max_yFlux_ESG, + COUNT(dp1.Object.yFlux_ESG_Sigma) AS count_yFlux_ESG_Sigma, + MIN(dp1.Object.yFlux_ESG_Sigma) AS min_yFlux_ESG_Sigma, + MAX(dp1.Object.yFlux_ESG_Sigma) AS max_yFlux_ESG_Sigma, + COUNT(dp1.Object.yFlux_Gaussian) AS count_yFlux_Gaussian, + MIN(dp1.Object.yFlux_Gaussian) AS min_yFlux_Gaussian, + MAX(dp1.Object.yFlux_Gaussian) AS max_yFlux_Gaussian, + COUNT(dp1.Object.yFlux_Gaussian_Sigma) AS count_yFlux_Gaussian_Sigma, + MIN(dp1.Object.yFlux_Gaussian_Sigma) AS min_yFlux_Gaussian_Sigma, + MAX(dp1.Object.yFlux_Gaussian_Sigma) AS max_yFlux_Gaussian_Sigma, + COUNT(dp1.Object.yTimescale) AS count_yTimescale, + MIN(dp1.Object.yTimescale) AS min_yTimescale, + MAX(dp1.Object.yTimescale) AS max_yTimescale, + COUNT(dp1.Object.yEarliestObsTime) AS count_yEarliestObsTime, + MIN(dp1.Object.yEarliestObsTime) AS min_yEarliestObsTime, + MAX(dp1.Object.yEarliestObsTime) AS max_yEarliestObsTime, + COUNT(dp1.Object.yLatestObsTime) AS count_yLatestObsTime, + MIN(dp1.Object.yLatestObsTime) AS min_yLatestObsTime, + MAX(dp1.Object.yLatestObsTime) AS max_yLatestObsTime, + COUNT(dp1.Object.ySersicN_SG) AS count_ySersicN_SG, + MIN(dp1.Object.ySersicN_SG) AS min_ySersicN_SG, + MAX(dp1.Object.ySersicN_SG) AS max_ySersicN_SG, + COUNT(dp1.Object.ySersicN_SG_Sigma) AS count_ySersicN_SG_Sigma, + MIN(dp1.Object.ySersicN_SG_Sigma) AS min_ySersicN_SG_Sigma, + MAX(dp1.Object.ySersicN_SG_Sigma) AS max_ySersicN_SG_Sigma, + COUNT(dp1.Object.yE1_SG) AS count_yE1_SG, + MIN(dp1.Object.yE1_SG) AS min_yE1_SG, + MAX(dp1.Object.yE1_SG) AS max_yE1_SG, + COUNT(dp1.Object.yE1_SG_Sigma) AS count_yE1_SG_Sigma, + MIN(dp1.Object.yE1_SG_Sigma) AS min_yE1_SG_Sigma, + MAX(dp1.Object.yE1_SG_Sigma) AS max_yE1_SG_Sigma, + COUNT(dp1.Object.yE2_SG) AS count_yE2_SG, + MIN(dp1.Object.yE2_SG) AS min_yE2_SG, + MAX(dp1.Object.yE2_SG) AS max_yE2_SG, + COUNT(dp1.Object.yE2_SG_Sigma) AS count_yE2_SG_Sigma, + MIN(dp1.Object.yE2_SG_Sigma) AS min_yE2_SG_Sigma, + MAX(dp1.Object.yE2_SG_Sigma) AS max_yE2_SG_Sigma, + COUNT(dp1.Object.yRadius_SG) AS count_yRadius_SG, + MIN(dp1.Object.yRadius_SG) AS min_yRadius_SG, + MAX(dp1.Object.yRadius_SG) AS max_yRadius_SG, + COUNT(dp1.Object.yRadius_SG_Sigma) AS count_yRadius_SG_Sigma, + MIN(dp1.Object.yRadius_SG_Sigma) AS min_yRadius_SG_Sigma, + MAX(dp1.Object.yRadius_SG_Sigma) AS max_yRadius_SG_Sigma, + COUNT(dp1.Object.yFlags) AS count_yFlags, + MIN(dp1.Object.yFlags) AS min_yFlags, + MAX(dp1.Object.yFlags) AS max_yFlags, + COUNT(dp1.Object.varBinaryField) AS count_varBinaryField, + MIN(dp1.Object.varBinaryField) AS min_varBinaryField, + MAX(dp1.Object.varBinaryField) AS max_varBinaryField, + COUNT(dp1.Object.chunkId) AS count_chunkId, + MIN(dp1.Object.chunkId) AS min_chunkId, + MAX(dp1.Object.chunkId) AS max_chunkId, + COUNT(dp1.Object.subChunkId) AS count_subChunkId, + MIN(dp1.Object.subChunkId) AS min_subChunkId, + MAX(dp1.Object.subChunkId) AS max_subChunkId +FROM dp1.Object +WHERE objectId > 0 + AND flags >= 0 + AND ra_PS BETWEEN 0 AND 360 + AND decl_PS BETWEEN -90 AND 90 +GROUP BY dp1.Object.canonicalFilterId, dp1.Object.extendedness +ORDER BY dp1.Object.canonicalFilterId, dp1.Object.extendedness diff --git a/src/ccontrol/testdata/parser-corpus/q07_object_table_predicate_stress.sql b/src/ccontrol/testdata/parser-corpus/q07_object_table_predicate_stress.sql new file mode 100644 index 0000000000..7424916f06 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q07_object_table_predicate_stress.sql @@ -0,0 +1,504 @@ +SELECT + dp1.Object.qserv_trans_id AS selected_qserv_trans_id, + dp1.Object.objectId AS selected_objectId, + dp1.Object.iauId AS selected_iauId, + dp1.Object.ra_PS AS selected_ra_PS, + dp1.Object.ra_PS_Sigma AS selected_ra_PS_Sigma, + dp1.Object.decl_PS AS selected_decl_PS, + dp1.Object.decl_PS_Sigma AS selected_decl_PS_Sigma, + dp1.Object.radecl_PS_Cov AS selected_radecl_PS_Cov, + dp1.Object.htmId20 AS selected_htmId20, + dp1.Object.ra_SG AS selected_ra_SG, + dp1.Object.ra_SG_Sigma AS selected_ra_SG_Sigma, + dp1.Object.decl_SG AS selected_decl_SG, + dp1.Object.decl_SG_Sigma AS selected_decl_SG_Sigma, + dp1.Object.radecl_SG_Cov AS selected_radecl_SG_Cov, + dp1.Object.raRange AS selected_raRange, + dp1.Object.declRange AS selected_declRange, + dp1.Object.muRa_PS AS selected_muRa_PS, + dp1.Object.muRa_PS_Sigma AS selected_muRa_PS_Sigma, + dp1.Object.muDecl_PS AS selected_muDecl_PS, + dp1.Object.muDecl_PS_Sigma AS selected_muDecl_PS_Sigma, + dp1.Object.muRaDecl_PS_Cov AS selected_muRaDecl_PS_Cov, + dp1.Object.parallax_PS AS selected_parallax_PS, + dp1.Object.parallax_PS_Sigma AS selected_parallax_PS_Sigma, + dp1.Object.canonicalFilterId AS selected_canonicalFilterId, + dp1.Object.extendedness AS selected_extendedness, + dp1.Object.varProb AS selected_varProb, + dp1.Object.earliestObsTime AS selected_earliestObsTime, + dp1.Object.latestObsTime AS selected_latestObsTime, + dp1.Object.meanObsTime AS selected_meanObsTime, + dp1.Object.flags AS selected_flags, + dp1.Object.uNumObs AS selected_uNumObs, + dp1.Object.uExtendedness AS selected_uExtendedness, + dp1.Object.uVarProb AS selected_uVarProb, + dp1.Object.uRaOffset_PS AS selected_uRaOffset_PS, + dp1.Object.uRaOffset_PS_Sigma AS selected_uRaOffset_PS_Sigma, + dp1.Object.uDeclOffset_PS AS selected_uDeclOffset_PS, + dp1.Object.uDeclOffset_PS_Sigma AS selected_uDeclOffset_PS_Sigma, + dp1.Object.uRaDeclOffset_PS_Cov AS selected_uRaDeclOffset_PS_Cov, + dp1.Object.uRaOffset_SG AS selected_uRaOffset_SG, + dp1.Object.uRaOffset_SG_Sigma AS selected_uRaOffset_SG_Sigma, + dp1.Object.uDeclOffset_SG AS selected_uDeclOffset_SG, + dp1.Object.uDeclOffset_SG_Sigma AS selected_uDeclOffset_SG_Sigma, + dp1.Object.uRaDeclOffset_SG_Cov AS selected_uRaDeclOffset_SG_Cov, + dp1.Object.uLnL_PS AS selected_uLnL_PS, + dp1.Object.uLnL_SG AS selected_uLnL_SG, + dp1.Object.uFlux_PS AS selected_uFlux_PS, + dp1.Object.uFlux_PS_Sigma AS selected_uFlux_PS_Sigma, + dp1.Object.uFlux_ESG AS selected_uFlux_ESG, + dp1.Object.uFlux_ESG_Sigma AS selected_uFlux_ESG_Sigma, + dp1.Object.uFlux_Gaussian AS selected_uFlux_Gaussian, + dp1.Object.uFlux_Gaussian_Sigma AS selected_uFlux_Gaussian_Sigma, + dp1.Object.uTimescale AS selected_uTimescale, + dp1.Object.uEarliestObsTime AS selected_uEarliestObsTime, + dp1.Object.uLatestObsTime AS selected_uLatestObsTime, + dp1.Object.uSersicN_SG AS selected_uSersicN_SG, + dp1.Object.uSersicN_SG_Sigma AS selected_uSersicN_SG_Sigma, + dp1.Object.uE1_SG AS selected_uE1_SG, + dp1.Object.uE1_SG_Sigma AS selected_uE1_SG_Sigma, + dp1.Object.uE2_SG AS selected_uE2_SG, + dp1.Object.uE2_SG_Sigma AS selected_uE2_SG_Sigma, + dp1.Object.uRadius_SG AS selected_uRadius_SG, + dp1.Object.uRadius_SG_Sigma AS selected_uRadius_SG_Sigma, + dp1.Object.uFlags AS selected_uFlags, + dp1.Object.gNumObs AS selected_gNumObs, + dp1.Object.gExtendedness AS selected_gExtendedness, + dp1.Object.gVarProb AS selected_gVarProb, + dp1.Object.gRaOffset_PS AS selected_gRaOffset_PS, + dp1.Object.gRaOffset_PS_Sigma AS selected_gRaOffset_PS_Sigma, + dp1.Object.gDeclOffset_PS AS selected_gDeclOffset_PS, + dp1.Object.gDeclOffset_PS_Sigma AS selected_gDeclOffset_PS_Sigma, + dp1.Object.gRaDeclOffset_PS_Cov AS selected_gRaDeclOffset_PS_Cov, + dp1.Object.gRaOffset_SG AS selected_gRaOffset_SG, + dp1.Object.gRaOffset_SG_Sigma AS selected_gRaOffset_SG_Sigma, + dp1.Object.gDeclOffset_SG AS selected_gDeclOffset_SG, + dp1.Object.gDeclOffset_SG_Sigma AS selected_gDeclOffset_SG_Sigma, + dp1.Object.gRaDeclOffset_SG_Cov AS selected_gRaDeclOffset_SG_Cov, + dp1.Object.gLnL_PS AS selected_gLnL_PS, + dp1.Object.gLnL_SG AS selected_gLnL_SG, + dp1.Object.gFlux_PS AS selected_gFlux_PS, + dp1.Object.gFlux_PS_Sigma AS selected_gFlux_PS_Sigma, + dp1.Object.gFlux_ESG AS selected_gFlux_ESG, + dp1.Object.gFlux_ESG_Sigma AS selected_gFlux_ESG_Sigma, + dp1.Object.gFlux_Gaussian AS selected_gFlux_Gaussian, + dp1.Object.gFlux_Gaussian_Sigma AS selected_gFlux_Gaussian_Sigma, + dp1.Object.gTimescale AS selected_gTimescale, + dp1.Object.gEarliestObsTime AS selected_gEarliestObsTime, + dp1.Object.gLatestObsTime AS selected_gLatestObsTime, + dp1.Object.gSersicN_SG AS selected_gSersicN_SG, + dp1.Object.gSersicN_SG_Sigma AS selected_gSersicN_SG_Sigma, + dp1.Object.gE1_SG AS selected_gE1_SG, + dp1.Object.gE1_SG_Sigma AS selected_gE1_SG_Sigma, + dp1.Object.gE2_SG AS selected_gE2_SG, + dp1.Object.gE2_SG_Sigma AS selected_gE2_SG_Sigma, + dp1.Object.gRadius_SG AS selected_gRadius_SG, + dp1.Object.gRadius_SG_Sigma AS selected_gRadius_SG_Sigma, + dp1.Object.gFlags AS selected_gFlags, + dp1.Object.rNumObs AS selected_rNumObs, + dp1.Object.rExtendedness AS selected_rExtendedness, + dp1.Object.rVarProb AS selected_rVarProb, + dp1.Object.rRaOffset_PS AS selected_rRaOffset_PS, + dp1.Object.rRaOffset_PS_Sigma AS selected_rRaOffset_PS_Sigma, + dp1.Object.rDeclOffset_PS AS selected_rDeclOffset_PS, + dp1.Object.rDeclOffset_PS_Sigma AS selected_rDeclOffset_PS_Sigma, + dp1.Object.rRaDeclOffset_PS_Cov AS selected_rRaDeclOffset_PS_Cov, + dp1.Object.rRaOffset_SG AS selected_rRaOffset_SG, + dp1.Object.rRaOffset_SG_Sigma AS selected_rRaOffset_SG_Sigma, + dp1.Object.rDeclOffset_SG AS selected_rDeclOffset_SG, + dp1.Object.rDeclOffset_SG_Sigma AS selected_rDeclOffset_SG_Sigma, + dp1.Object.rRaDeclOffset_SG_Cov AS selected_rRaDeclOffset_SG_Cov, + dp1.Object.rLnL_PS AS selected_rLnL_PS, + dp1.Object.rLnL_SG AS selected_rLnL_SG, + dp1.Object.rFlux_PS AS selected_rFlux_PS, + dp1.Object.rFlux_PS_Sigma AS selected_rFlux_PS_Sigma, + dp1.Object.rFlux_ESG AS selected_rFlux_ESG, + dp1.Object.rFlux_ESG_Sigma AS selected_rFlux_ESG_Sigma, + dp1.Object.rFlux_Gaussian AS selected_rFlux_Gaussian, + dp1.Object.rFlux_Gaussian_Sigma AS selected_rFlux_Gaussian_Sigma, + dp1.Object.rTimescale AS selected_rTimescale, + dp1.Object.rEarliestObsTime AS selected_rEarliestObsTime, + dp1.Object.rLatestObsTime AS selected_rLatestObsTime, + dp1.Object.rSersicN_SG AS selected_rSersicN_SG, + dp1.Object.rSersicN_SG_Sigma AS selected_rSersicN_SG_Sigma, + dp1.Object.rE1_SG AS selected_rE1_SG, + dp1.Object.rE1_SG_Sigma AS selected_rE1_SG_Sigma, + dp1.Object.rE2_SG AS selected_rE2_SG, + dp1.Object.rE2_SG_Sigma AS selected_rE2_SG_Sigma, + dp1.Object.rRadius_SG AS selected_rRadius_SG, + dp1.Object.rRadius_SG_Sigma AS selected_rRadius_SG_Sigma, + dp1.Object.rFlags AS selected_rFlags, + dp1.Object.iNumObs AS selected_iNumObs, + dp1.Object.iExtendedness AS selected_iExtendedness, + dp1.Object.iVarProb AS selected_iVarProb, + dp1.Object.iRaOffset_PS AS selected_iRaOffset_PS, + dp1.Object.iRaOffset_PS_Sigma AS selected_iRaOffset_PS_Sigma, + dp1.Object.iDeclOffset_PS AS selected_iDeclOffset_PS, + dp1.Object.iDeclOffset_PS_Sigma AS selected_iDeclOffset_PS_Sigma, + dp1.Object.iRaDeclOffset_PS_Cov AS selected_iRaDeclOffset_PS_Cov, + dp1.Object.iRaOffset_SG AS selected_iRaOffset_SG, + dp1.Object.iRaOffset_SG_Sigma AS selected_iRaOffset_SG_Sigma, + dp1.Object.iDeclOffset_SG AS selected_iDeclOffset_SG, + dp1.Object.iDeclOffset_SG_Sigma AS selected_iDeclOffset_SG_Sigma, + dp1.Object.iRaDeclOffset_SG_Cov AS selected_iRaDeclOffset_SG_Cov, + dp1.Object.iLnL_PS AS selected_iLnL_PS, + dp1.Object.iLnL_SG AS selected_iLnL_SG, + dp1.Object.iFlux_PS AS selected_iFlux_PS, + dp1.Object.iFlux_PS_Sigma AS selected_iFlux_PS_Sigma, + dp1.Object.iFlux_ESG AS selected_iFlux_ESG, + dp1.Object.iFlux_ESG_Sigma AS selected_iFlux_ESG_Sigma, + dp1.Object.iFlux_Gaussian AS selected_iFlux_Gaussian, + dp1.Object.iFlux_Gaussian_Sigma AS selected_iFlux_Gaussian_Sigma, + dp1.Object.iTimescale AS selected_iTimescale, + dp1.Object.iEarliestObsTime AS selected_iEarliestObsTime, + dp1.Object.iLatestObsTime AS selected_iLatestObsTime, + dp1.Object.iSersicN_SG AS selected_iSersicN_SG, + dp1.Object.iSersicN_SG_Sigma AS selected_iSersicN_SG_Sigma, + dp1.Object.iE1_SG AS selected_iE1_SG, + dp1.Object.iE1_SG_Sigma AS selected_iE1_SG_Sigma, + dp1.Object.iE2_SG AS selected_iE2_SG, + dp1.Object.iE2_SG_Sigma AS selected_iE2_SG_Sigma, + dp1.Object.iRadius_SG AS selected_iRadius_SG, + dp1.Object.iRadius_SG_Sigma AS selected_iRadius_SG_Sigma, + dp1.Object.iFlags AS selected_iFlags, + dp1.Object.zNumObs AS selected_zNumObs, + dp1.Object.zExtendedness AS selected_zExtendedness, + dp1.Object.zVarProb AS selected_zVarProb, + dp1.Object.zRaOffset_PS AS selected_zRaOffset_PS, + dp1.Object.zRaOffset_PS_Sigma AS selected_zRaOffset_PS_Sigma, + dp1.Object.zDeclOffset_PS AS selected_zDeclOffset_PS, + dp1.Object.zDeclOffset_PS_Sigma AS selected_zDeclOffset_PS_Sigma, + dp1.Object.zRaDeclOffset_PS_Cov AS selected_zRaDeclOffset_PS_Cov, + dp1.Object.zRaOffset_SG AS selected_zRaOffset_SG, + dp1.Object.zRaOffset_SG_Sigma AS selected_zRaOffset_SG_Sigma, + dp1.Object.zDeclOffset_SG AS selected_zDeclOffset_SG, + dp1.Object.zDeclOffset_SG_Sigma AS selected_zDeclOffset_SG_Sigma, + dp1.Object.zRaDeclOffset_SG_Cov AS selected_zRaDeclOffset_SG_Cov, + dp1.Object.zLnL_PS AS selected_zLnL_PS, + dp1.Object.zLnL_SG AS selected_zLnL_SG, + dp1.Object.zFlux_PS AS selected_zFlux_PS, + dp1.Object.zFlux_PS_Sigma AS selected_zFlux_PS_Sigma, + dp1.Object.zFlux_ESG AS selected_zFlux_ESG, + dp1.Object.zFlux_ESG_Sigma AS selected_zFlux_ESG_Sigma, + dp1.Object.zFlux_Gaussian AS selected_zFlux_Gaussian, + dp1.Object.zFlux_Gaussian_Sigma AS selected_zFlux_Gaussian_Sigma, + dp1.Object.zTimescale AS selected_zTimescale, + dp1.Object.zEarliestObsTime AS selected_zEarliestObsTime, + dp1.Object.zLatestObsTime AS selected_zLatestObsTime, + dp1.Object.zSersicN_SG AS selected_zSersicN_SG, + dp1.Object.zSersicN_SG_Sigma AS selected_zSersicN_SG_Sigma, + dp1.Object.zE1_SG AS selected_zE1_SG, + dp1.Object.zE1_SG_Sigma AS selected_zE1_SG_Sigma, + dp1.Object.zE2_SG AS selected_zE2_SG, + dp1.Object.zE2_SG_Sigma AS selected_zE2_SG_Sigma, + dp1.Object.zRadius_SG AS selected_zRadius_SG, + dp1.Object.zRadius_SG_Sigma AS selected_zRadius_SG_Sigma, + dp1.Object.zFlags AS selected_zFlags, + dp1.Object.yNumObs AS selected_yNumObs, + dp1.Object.yExtendedness AS selected_yExtendedness, + dp1.Object.yVarProb AS selected_yVarProb, + dp1.Object.yRaOffset_PS AS selected_yRaOffset_PS, + dp1.Object.yRaOffset_PS_Sigma AS selected_yRaOffset_PS_Sigma, + dp1.Object.yDeclOffset_PS AS selected_yDeclOffset_PS, + dp1.Object.yDeclOffset_PS_Sigma AS selected_yDeclOffset_PS_Sigma, + dp1.Object.yRaDeclOffset_PS_Cov AS selected_yRaDeclOffset_PS_Cov, + dp1.Object.yRaOffset_SG AS selected_yRaOffset_SG, + dp1.Object.yRaOffset_SG_Sigma AS selected_yRaOffset_SG_Sigma, + dp1.Object.yDeclOffset_SG AS selected_yDeclOffset_SG, + dp1.Object.yDeclOffset_SG_Sigma AS selected_yDeclOffset_SG_Sigma, + dp1.Object.yRaDeclOffset_SG_Cov AS selected_yRaDeclOffset_SG_Cov, + dp1.Object.yLnL_PS AS selected_yLnL_PS, + dp1.Object.yLnL_SG AS selected_yLnL_SG, + dp1.Object.yFlux_PS AS selected_yFlux_PS, + dp1.Object.yFlux_PS_Sigma AS selected_yFlux_PS_Sigma, + dp1.Object.yFlux_ESG AS selected_yFlux_ESG, + dp1.Object.yFlux_ESG_Sigma AS selected_yFlux_ESG_Sigma, + dp1.Object.yFlux_Gaussian AS selected_yFlux_Gaussian, + dp1.Object.yFlux_Gaussian_Sigma AS selected_yFlux_Gaussian_Sigma, + dp1.Object.yTimescale AS selected_yTimescale, + dp1.Object.yEarliestObsTime AS selected_yEarliestObsTime, + dp1.Object.yLatestObsTime AS selected_yLatestObsTime, + dp1.Object.ySersicN_SG AS selected_ySersicN_SG, + dp1.Object.ySersicN_SG_Sigma AS selected_ySersicN_SG_Sigma, + dp1.Object.yE1_SG AS selected_yE1_SG, + dp1.Object.yE1_SG_Sigma AS selected_yE1_SG_Sigma, + dp1.Object.yE2_SG AS selected_yE2_SG, + dp1.Object.yE2_SG_Sigma AS selected_yE2_SG_Sigma, + dp1.Object.yRadius_SG AS selected_yRadius_SG, + dp1.Object.yRadius_SG_Sigma AS selected_yRadius_SG_Sigma, + dp1.Object.yFlags AS selected_yFlags, + dp1.Object.varBinaryField AS selected_varBinaryField, + dp1.Object.chunkId AS selected_chunkId, + dp1.Object.subChunkId AS selected_subChunkId, + (dp1.Object.qserv_trans_id + 0) AS selected_expr_0_qserv_trans_id, + (dp1.Object.objectId + 1) AS selected_expr_1_objectId, + (dp1.Object.iauId + 2) AS selected_expr_2_iauId, + (dp1.Object.ra_PS + 3) AS selected_expr_3_ra_PS, + (dp1.Object.ra_PS_Sigma + 4) AS selected_expr_4_ra_PS_Sigma, + (dp1.Object.decl_PS + 5) AS selected_expr_5_decl_PS, + (dp1.Object.decl_PS_Sigma + 6) AS selected_expr_6_decl_PS_Sigma, + (dp1.Object.radecl_PS_Cov + 7) AS selected_expr_7_radecl_PS_Cov, + (dp1.Object.htmId20 + 8) AS selected_expr_8_htmId20, + (dp1.Object.ra_SG + 9) AS selected_expr_9_ra_SG, + (dp1.Object.ra_SG_Sigma + 10) AS selected_expr_10_ra_SG_Sigma, + (dp1.Object.decl_SG + 11) AS selected_expr_11_decl_SG, + (dp1.Object.decl_SG_Sigma + 12) AS selected_expr_12_decl_SG_Sigma, + (dp1.Object.radecl_SG_Cov + 13) AS selected_expr_13_radecl_SG_Cov, + (dp1.Object.raRange + 14) AS selected_expr_14_raRange, + (dp1.Object.declRange + 15) AS selected_expr_15_declRange, + (dp1.Object.muRa_PS + 16) AS selected_expr_16_muRa_PS, + (dp1.Object.muRa_PS_Sigma + 17) AS selected_expr_17_muRa_PS_Sigma, + (dp1.Object.muDecl_PS + 18) AS selected_expr_18_muDecl_PS, + (dp1.Object.muDecl_PS_Sigma + 19) AS selected_expr_19_muDecl_PS_Sigma, + (dp1.Object.muRaDecl_PS_Cov + 20) AS selected_expr_20_muRaDecl_PS_Cov, + (dp1.Object.parallax_PS + 21) AS selected_expr_21_parallax_PS, + (dp1.Object.parallax_PS_Sigma + 22) AS selected_expr_22_parallax_PS_Sigma, + (dp1.Object.canonicalFilterId + 23) AS selected_expr_23_canonicalFilterId, + (dp1.Object.extendedness + 24) AS selected_expr_24_extendedness, + (dp1.Object.varProb + 25) AS selected_expr_25_varProb, + (dp1.Object.earliestObsTime + 26) AS selected_expr_26_earliestObsTime, + (dp1.Object.latestObsTime + 27) AS selected_expr_27_latestObsTime, + (dp1.Object.meanObsTime + 28) AS selected_expr_28_meanObsTime, + (dp1.Object.flags + 29) AS selected_expr_29_flags, + (dp1.Object.uNumObs + 30) AS selected_expr_30_uNumObs, + (dp1.Object.uExtendedness + 31) AS selected_expr_31_uExtendedness, + (dp1.Object.uVarProb + 32) AS selected_expr_32_uVarProb, + (dp1.Object.uRaOffset_PS + 33) AS selected_expr_33_uRaOffset_PS, + (dp1.Object.uRaOffset_PS_Sigma + 34) AS selected_expr_34_uRaOffset_PS_Sigma, + (dp1.Object.uDeclOffset_PS + 35) AS selected_expr_35_uDeclOffset_PS, + (dp1.Object.uDeclOffset_PS_Sigma + 36) AS selected_expr_36_uDeclOffset_PS_Sigma, + (dp1.Object.uRaDeclOffset_PS_Cov + 37) AS selected_expr_37_uRaDeclOffset_PS_Cov, + (dp1.Object.uRaOffset_SG + 38) AS selected_expr_38_uRaOffset_SG, + (dp1.Object.uRaOffset_SG_Sigma + 39) AS selected_expr_39_uRaOffset_SG_Sigma, + (dp1.Object.uDeclOffset_SG + 40) AS selected_expr_40_uDeclOffset_SG, + (dp1.Object.uDeclOffset_SG_Sigma + 41) AS selected_expr_41_uDeclOffset_SG_Sigma, + (dp1.Object.uRaDeclOffset_SG_Cov + 42) AS selected_expr_42_uRaDeclOffset_SG_Cov, + (dp1.Object.uLnL_PS + 43) AS selected_expr_43_uLnL_PS, + (dp1.Object.uLnL_SG + 44) AS selected_expr_44_uLnL_SG, + (dp1.Object.uFlux_PS + 45) AS selected_expr_45_uFlux_PS, + (dp1.Object.uFlux_PS_Sigma + 46) AS selected_expr_46_uFlux_PS_Sigma, + (dp1.Object.uFlux_ESG + 47) AS selected_expr_47_uFlux_ESG, + (dp1.Object.uFlux_ESG_Sigma + 48) AS selected_expr_48_uFlux_ESG_Sigma, + (dp1.Object.uFlux_Gaussian + 49) AS selected_expr_49_uFlux_Gaussian, + (dp1.Object.uFlux_Gaussian_Sigma + 50) AS selected_expr_50_uFlux_Gaussian_Sigma, + (dp1.Object.uTimescale + 51) AS selected_expr_51_uTimescale, + (dp1.Object.uEarliestObsTime + 52) AS selected_expr_52_uEarliestObsTime, + (dp1.Object.uLatestObsTime + 53) AS selected_expr_53_uLatestObsTime, + (dp1.Object.uSersicN_SG + 54) AS selected_expr_54_uSersicN_SG, + (dp1.Object.uSersicN_SG_Sigma + 55) AS selected_expr_55_uSersicN_SG_Sigma, + (dp1.Object.uE1_SG + 56) AS selected_expr_56_uE1_SG, + (dp1.Object.uE1_SG_Sigma + 57) AS selected_expr_57_uE1_SG_Sigma, + (dp1.Object.uE2_SG + 58) AS selected_expr_58_uE2_SG, + (dp1.Object.uE2_SG_Sigma + 59) AS selected_expr_59_uE2_SG_Sigma, + (dp1.Object.uRadius_SG + 60) AS selected_expr_60_uRadius_SG, + (dp1.Object.uRadius_SG_Sigma + 61) AS selected_expr_61_uRadius_SG_Sigma, + (dp1.Object.uFlags + 62) AS selected_expr_62_uFlags, + (dp1.Object.gNumObs + 63) AS selected_expr_63_gNumObs, + (dp1.Object.gExtendedness + 64) AS selected_expr_64_gExtendedness, + (dp1.Object.gVarProb + 65) AS selected_expr_65_gVarProb, + (dp1.Object.gRaOffset_PS + 66) AS selected_expr_66_gRaOffset_PS, + (dp1.Object.gRaOffset_PS_Sigma + 67) AS selected_expr_67_gRaOffset_PS_Sigma, + (dp1.Object.gDeclOffset_PS + 68) AS selected_expr_68_gDeclOffset_PS, + (dp1.Object.gDeclOffset_PS_Sigma + 69) AS selected_expr_69_gDeclOffset_PS_Sigma, + (dp1.Object.gRaDeclOffset_PS_Cov + 70) AS selected_expr_70_gRaDeclOffset_PS_Cov, + (dp1.Object.gRaOffset_SG + 71) AS selected_expr_71_gRaOffset_SG, + (dp1.Object.gRaOffset_SG_Sigma + 72) AS selected_expr_72_gRaOffset_SG_Sigma, + (dp1.Object.gDeclOffset_SG + 73) AS selected_expr_73_gDeclOffset_SG, + (dp1.Object.gDeclOffset_SG_Sigma + 74) AS selected_expr_74_gDeclOffset_SG_Sigma, + (dp1.Object.gRaDeclOffset_SG_Cov + 75) AS selected_expr_75_gRaDeclOffset_SG_Cov, + (dp1.Object.gLnL_PS + 76) AS selected_expr_76_gLnL_PS, + (dp1.Object.gLnL_SG + 77) AS selected_expr_77_gLnL_SG, + (dp1.Object.gFlux_PS + 78) AS selected_expr_78_gFlux_PS, + (dp1.Object.gFlux_PS_Sigma + 79) AS selected_expr_79_gFlux_PS_Sigma, + (dp1.Object.gFlux_ESG + 80) AS selected_expr_80_gFlux_ESG, + (dp1.Object.gFlux_ESG_Sigma + 81) AS selected_expr_81_gFlux_ESG_Sigma, + (dp1.Object.gFlux_Gaussian + 82) AS selected_expr_82_gFlux_Gaussian, + (dp1.Object.gFlux_Gaussian_Sigma + 83) AS selected_expr_83_gFlux_Gaussian_Sigma, + (dp1.Object.gTimescale + 84) AS selected_expr_84_gTimescale, + (dp1.Object.gEarliestObsTime + 85) AS selected_expr_85_gEarliestObsTime, + (dp1.Object.gLatestObsTime + 86) AS selected_expr_86_gLatestObsTime, + (dp1.Object.gSersicN_SG + 87) AS selected_expr_87_gSersicN_SG, + (dp1.Object.gSersicN_SG_Sigma + 88) AS selected_expr_88_gSersicN_SG_Sigma, + (dp1.Object.gE1_SG + 89) AS selected_expr_89_gE1_SG, + (dp1.Object.gE1_SG_Sigma + 90) AS selected_expr_90_gE1_SG_Sigma, + (dp1.Object.gE2_SG + 91) AS selected_expr_91_gE2_SG, + (dp1.Object.gE2_SG_Sigma + 92) AS selected_expr_92_gE2_SG_Sigma, + (dp1.Object.gRadius_SG + 93) AS selected_expr_93_gRadius_SG, + (dp1.Object.gRadius_SG_Sigma + 94) AS selected_expr_94_gRadius_SG_Sigma, + (dp1.Object.gFlags + 95) AS selected_expr_95_gFlags, + (dp1.Object.rNumObs + 96) AS selected_expr_96_rNumObs, + (dp1.Object.rExtendedness + 97) AS selected_expr_97_rExtendedness, + (dp1.Object.rVarProb + 98) AS selected_expr_98_rVarProb, + (dp1.Object.rRaOffset_PS + 99) AS selected_expr_99_rRaOffset_PS, + (dp1.Object.rRaOffset_PS_Sigma + 100) AS selected_expr_100_rRaOffset_PS_Sigma, + (dp1.Object.rDeclOffset_PS + 101) AS selected_expr_101_rDeclOffset_PS, + (dp1.Object.rDeclOffset_PS_Sigma + 102) AS selected_expr_102_rDeclOffset_PS_Sigma, + (dp1.Object.rRaDeclOffset_PS_Cov + 103) AS selected_expr_103_rRaDeclOffset_PS_Cov, + (dp1.Object.rRaOffset_SG + 104) AS selected_expr_104_rRaOffset_SG, + (dp1.Object.rRaOffset_SG_Sigma + 105) AS selected_expr_105_rRaOffset_SG_Sigma, + (dp1.Object.rDeclOffset_SG + 106) AS selected_expr_106_rDeclOffset_SG, + (dp1.Object.rDeclOffset_SG_Sigma + 107) AS selected_expr_107_rDeclOffset_SG_Sigma, + (dp1.Object.rRaDeclOffset_SG_Cov + 108) AS selected_expr_108_rRaDeclOffset_SG_Cov, + (dp1.Object.rLnL_PS + 109) AS selected_expr_109_rLnL_PS, + (dp1.Object.rLnL_SG + 110) AS selected_expr_110_rLnL_SG, + (dp1.Object.rFlux_PS + 111) AS selected_expr_111_rFlux_PS, + (dp1.Object.rFlux_PS_Sigma + 112) AS selected_expr_112_rFlux_PS_Sigma, + (dp1.Object.rFlux_ESG + 113) AS selected_expr_113_rFlux_ESG, + (dp1.Object.rFlux_ESG_Sigma + 114) AS selected_expr_114_rFlux_ESG_Sigma, + (dp1.Object.rFlux_Gaussian + 115) AS selected_expr_115_rFlux_Gaussian, + (dp1.Object.rFlux_Gaussian_Sigma + 116) AS selected_expr_116_rFlux_Gaussian_Sigma, + (dp1.Object.rTimescale + 117) AS selected_expr_117_rTimescale, + (dp1.Object.rEarliestObsTime + 118) AS selected_expr_118_rEarliestObsTime, + (dp1.Object.rLatestObsTime + 119) AS selected_expr_119_rLatestObsTime, + (dp1.Object.rSersicN_SG + 120) AS selected_expr_120_rSersicN_SG, + (dp1.Object.rSersicN_SG_Sigma + 121) AS selected_expr_121_rSersicN_SG_Sigma, + (dp1.Object.rE1_SG + 122) AS selected_expr_122_rE1_SG, + (dp1.Object.rE1_SG_Sigma + 123) AS selected_expr_123_rE1_SG_Sigma, + (dp1.Object.rE2_SG + 124) AS selected_expr_124_rE2_SG, + (dp1.Object.rE2_SG_Sigma + 125) AS selected_expr_125_rE2_SG_Sigma, + (dp1.Object.rRadius_SG + 126) AS selected_expr_126_rRadius_SG, + (dp1.Object.rRadius_SG_Sigma + 127) AS selected_expr_127_rRadius_SG_Sigma, + (dp1.Object.rFlags + 128) AS selected_expr_128_rFlags, + (dp1.Object.iNumObs + 129) AS selected_expr_129_iNumObs, + (dp1.Object.iExtendedness + 130) AS selected_expr_130_iExtendedness, + (dp1.Object.iVarProb + 131) AS selected_expr_131_iVarProb, + (dp1.Object.iRaOffset_PS + 132) AS selected_expr_132_iRaOffset_PS, + (dp1.Object.iRaOffset_PS_Sigma + 133) AS selected_expr_133_iRaOffset_PS_Sigma, + (dp1.Object.iDeclOffset_PS + 134) AS selected_expr_134_iDeclOffset_PS, + (dp1.Object.iDeclOffset_PS_Sigma + 135) AS selected_expr_135_iDeclOffset_PS_Sigma, + (dp1.Object.iRaDeclOffset_PS_Cov + 136) AS selected_expr_136_iRaDeclOffset_PS_Cov, + (dp1.Object.iRaOffset_SG + 137) AS selected_expr_137_iRaOffset_SG, + (dp1.Object.iRaOffset_SG_Sigma + 138) AS selected_expr_138_iRaOffset_SG_Sigma, + (dp1.Object.iDeclOffset_SG + 139) AS selected_expr_139_iDeclOffset_SG, + (dp1.Object.iDeclOffset_SG_Sigma + 140) AS selected_expr_140_iDeclOffset_SG_Sigma, + (dp1.Object.iRaDeclOffset_SG_Cov + 141) AS selected_expr_141_iRaDeclOffset_SG_Cov, + (dp1.Object.iLnL_PS + 142) AS selected_expr_142_iLnL_PS, + (dp1.Object.iLnL_SG + 143) AS selected_expr_143_iLnL_SG, + (dp1.Object.iFlux_PS + 144) AS selected_expr_144_iFlux_PS, + (dp1.Object.iFlux_PS_Sigma + 145) AS selected_expr_145_iFlux_PS_Sigma, + (dp1.Object.iFlux_ESG + 146) AS selected_expr_146_iFlux_ESG, + (dp1.Object.iFlux_ESG_Sigma + 147) AS selected_expr_147_iFlux_ESG_Sigma, + (dp1.Object.iFlux_Gaussian + 148) AS selected_expr_148_iFlux_Gaussian, + (dp1.Object.iFlux_Gaussian_Sigma + 149) AS selected_expr_149_iFlux_Gaussian_Sigma, + (dp1.Object.iTimescale + 150) AS selected_expr_150_iTimescale, + (dp1.Object.iEarliestObsTime + 151) AS selected_expr_151_iEarliestObsTime, + (dp1.Object.iLatestObsTime + 152) AS selected_expr_152_iLatestObsTime, + (dp1.Object.iSersicN_SG + 153) AS selected_expr_153_iSersicN_SG, + (dp1.Object.iSersicN_SG_Sigma + 154) AS selected_expr_154_iSersicN_SG_Sigma, + (dp1.Object.iE1_SG + 155) AS selected_expr_155_iE1_SG, + (dp1.Object.iE1_SG_Sigma + 156) AS selected_expr_156_iE1_SG_Sigma, + (dp1.Object.iE2_SG + 157) AS selected_expr_157_iE2_SG, + (dp1.Object.iE2_SG_Sigma + 158) AS selected_expr_158_iE2_SG_Sigma, + (dp1.Object.iRadius_SG + 159) AS selected_expr_159_iRadius_SG, + (dp1.Object.iRadius_SG_Sigma + 160) AS selected_expr_160_iRadius_SG_Sigma, + (dp1.Object.iFlags + 161) AS selected_expr_161_iFlags, + (dp1.Object.zNumObs + 162) AS selected_expr_162_zNumObs, + (dp1.Object.zExtendedness + 163) AS selected_expr_163_zExtendedness, + (dp1.Object.zVarProb + 164) AS selected_expr_164_zVarProb, + (dp1.Object.zRaOffset_PS + 165) AS selected_expr_165_zRaOffset_PS, + (dp1.Object.zRaOffset_PS_Sigma + 166) AS selected_expr_166_zRaOffset_PS_Sigma, + (dp1.Object.zDeclOffset_PS + 167) AS selected_expr_167_zDeclOffset_PS, + (dp1.Object.zDeclOffset_PS_Sigma + 168) AS selected_expr_168_zDeclOffset_PS_Sigma, + (dp1.Object.zRaDeclOffset_PS_Cov + 169) AS selected_expr_169_zRaDeclOffset_PS_Cov, + (dp1.Object.zRaOffset_SG + 170) AS selected_expr_170_zRaOffset_SG, + (dp1.Object.zRaOffset_SG_Sigma + 171) AS selected_expr_171_zRaOffset_SG_Sigma, + (dp1.Object.zDeclOffset_SG + 172) AS selected_expr_172_zDeclOffset_SG, + (dp1.Object.zDeclOffset_SG_Sigma + 173) AS selected_expr_173_zDeclOffset_SG_Sigma, + (dp1.Object.zRaDeclOffset_SG_Cov + 174) AS selected_expr_174_zRaDeclOffset_SG_Cov, + (dp1.Object.zLnL_PS + 175) AS selected_expr_175_zLnL_PS, + (dp1.Object.zLnL_SG + 176) AS selected_expr_176_zLnL_SG, + (dp1.Object.zFlux_PS + 177) AS selected_expr_177_zFlux_PS, + (dp1.Object.zFlux_PS_Sigma + 178) AS selected_expr_178_zFlux_PS_Sigma, + (dp1.Object.zFlux_ESG + 179) AS selected_expr_179_zFlux_ESG +FROM dp1.Object +WHERE + (dp1.Object.qserv_trans_id > 0 AND dp1.Object.objectId < 1 AND dp1.Object.iauId >= 2 AND dp1.Object.ra_PS <= 3) + OR (dp1.Object.ra_PS_Sigma > 4 AND dp1.Object.decl_PS < 5 AND dp1.Object.decl_PS_Sigma >= 6 AND dp1.Object.radecl_PS_Cov <= 7) + OR (dp1.Object.htmId20 > 8 AND dp1.Object.ra_SG < 9 AND dp1.Object.ra_SG_Sigma >= 10 AND dp1.Object.decl_SG <= 11) + OR (dp1.Object.decl_SG_Sigma > 12 AND dp1.Object.radecl_SG_Cov < 13 AND dp1.Object.raRange >= 14 AND dp1.Object.declRange <= 15) + OR (dp1.Object.muRa_PS > 16 AND dp1.Object.muRa_PS_Sigma < 17 AND dp1.Object.muDecl_PS >= 18 AND dp1.Object.muDecl_PS_Sigma <= 19) + OR (dp1.Object.muRaDecl_PS_Cov > 20 AND dp1.Object.parallax_PS < 21 AND dp1.Object.parallax_PS_Sigma >= 22 AND dp1.Object.canonicalFilterId <= 23) + OR (dp1.Object.extendedness > 24 AND dp1.Object.varProb < 25 AND dp1.Object.earliestObsTime >= 26 AND dp1.Object.latestObsTime <= 27) + OR (dp1.Object.meanObsTime > 28 AND dp1.Object.flags < 29 AND dp1.Object.uNumObs >= 30 AND dp1.Object.uExtendedness <= 31) + OR (dp1.Object.uVarProb > 32 AND dp1.Object.uRaOffset_PS < 33 AND dp1.Object.uRaOffset_PS_Sigma >= 34 AND dp1.Object.uDeclOffset_PS <= 35) + OR (dp1.Object.uDeclOffset_PS_Sigma > 36 AND dp1.Object.uRaDeclOffset_PS_Cov < 37 AND dp1.Object.uRaOffset_SG >= 38 AND dp1.Object.uRaOffset_SG_Sigma <= 39) + OR (dp1.Object.uDeclOffset_SG > 40 AND dp1.Object.uDeclOffset_SG_Sigma < 41 AND dp1.Object.uRaDeclOffset_SG_Cov >= 42 AND dp1.Object.uLnL_PS <= 43) + OR (dp1.Object.uLnL_SG > 44 AND dp1.Object.uFlux_PS < 45 AND dp1.Object.uFlux_PS_Sigma >= 46 AND dp1.Object.uFlux_ESG <= 47) + OR (dp1.Object.uFlux_ESG_Sigma > 48 AND dp1.Object.uFlux_Gaussian < 49 AND dp1.Object.uFlux_Gaussian_Sigma >= 50 AND dp1.Object.uTimescale <= 51) + OR (dp1.Object.uEarliestObsTime > 52 AND dp1.Object.uLatestObsTime < 53 AND dp1.Object.uSersicN_SG >= 54 AND dp1.Object.uSersicN_SG_Sigma <= 55) + OR (dp1.Object.uE1_SG > 56 AND dp1.Object.uE1_SG_Sigma < 57 AND dp1.Object.uE2_SG >= 58 AND dp1.Object.uE2_SG_Sigma <= 59) + OR (dp1.Object.uRadius_SG > 60 AND dp1.Object.uRadius_SG_Sigma < 61 AND dp1.Object.uFlags >= 62 AND dp1.Object.gNumObs <= 63) + OR (dp1.Object.gExtendedness > 64 AND dp1.Object.gVarProb < 65 AND dp1.Object.gRaOffset_PS >= 66 AND dp1.Object.gRaOffset_PS_Sigma <= 67) + OR (dp1.Object.gDeclOffset_PS > 68 AND dp1.Object.gDeclOffset_PS_Sigma < 69 AND dp1.Object.gRaDeclOffset_PS_Cov >= 70 AND dp1.Object.gRaOffset_SG <= 71) + OR (dp1.Object.gRaOffset_SG_Sigma > 72 AND dp1.Object.gDeclOffset_SG < 73 AND dp1.Object.gDeclOffset_SG_Sigma >= 74 AND dp1.Object.gRaDeclOffset_SG_Cov <= 75) + OR (dp1.Object.gLnL_PS > 76 AND dp1.Object.gLnL_SG < 77 AND dp1.Object.gFlux_PS >= 78 AND dp1.Object.gFlux_PS_Sigma <= 79) + OR (dp1.Object.gFlux_ESG > 80 AND dp1.Object.gFlux_ESG_Sigma < 81 AND dp1.Object.gFlux_Gaussian >= 82 AND dp1.Object.gFlux_Gaussian_Sigma <= 83) + OR (dp1.Object.gTimescale > 84 AND dp1.Object.gEarliestObsTime < 85 AND dp1.Object.gLatestObsTime >= 86 AND dp1.Object.gSersicN_SG <= 87) + OR (dp1.Object.gSersicN_SG_Sigma > 88 AND dp1.Object.gE1_SG < 89 AND dp1.Object.gE1_SG_Sigma >= 90 AND dp1.Object.gE2_SG <= 91) + OR (dp1.Object.gE2_SG_Sigma > 92 AND dp1.Object.gRadius_SG < 93 AND dp1.Object.gRadius_SG_Sigma >= 94 AND dp1.Object.gFlags <= 95) + OR (dp1.Object.rNumObs > 96 AND dp1.Object.rExtendedness < 97 AND dp1.Object.rVarProb >= 98 AND dp1.Object.rRaOffset_PS <= 99) + OR (dp1.Object.rRaOffset_PS_Sigma > 0 AND dp1.Object.rDeclOffset_PS < 1 AND dp1.Object.rDeclOffset_PS_Sigma >= 2 AND dp1.Object.rRaDeclOffset_PS_Cov <= 3) + OR (dp1.Object.rRaOffset_SG > 4 AND dp1.Object.rRaOffset_SG_Sigma < 5 AND dp1.Object.rDeclOffset_SG >= 6 AND dp1.Object.rDeclOffset_SG_Sigma <= 7) + OR (dp1.Object.rRaDeclOffset_SG_Cov > 8 AND dp1.Object.rLnL_PS < 9 AND dp1.Object.rLnL_SG >= 10 AND dp1.Object.rFlux_PS <= 11) + OR (dp1.Object.rFlux_PS_Sigma > 12 AND dp1.Object.rFlux_ESG < 13 AND dp1.Object.rFlux_ESG_Sigma >= 14 AND dp1.Object.rFlux_Gaussian <= 15) + OR (dp1.Object.rFlux_Gaussian_Sigma > 16 AND dp1.Object.rTimescale < 17 AND dp1.Object.rEarliestObsTime >= 18 AND dp1.Object.rLatestObsTime <= 19) + OR (dp1.Object.rSersicN_SG > 20 AND dp1.Object.rSersicN_SG_Sigma < 21 AND dp1.Object.rE1_SG >= 22 AND dp1.Object.rE1_SG_Sigma <= 23) + OR (dp1.Object.rE2_SG > 24 AND dp1.Object.rE2_SG_Sigma < 25 AND dp1.Object.rRadius_SG >= 26 AND dp1.Object.rRadius_SG_Sigma <= 27) + OR (dp1.Object.rFlags > 28 AND dp1.Object.iNumObs < 29 AND dp1.Object.iExtendedness >= 30 AND dp1.Object.iVarProb <= 31) + OR (dp1.Object.iRaOffset_PS > 32 AND dp1.Object.iRaOffset_PS_Sigma < 33 AND dp1.Object.iDeclOffset_PS >= 34 AND dp1.Object.iDeclOffset_PS_Sigma <= 35) + OR (dp1.Object.iRaDeclOffset_PS_Cov > 36 AND dp1.Object.iRaOffset_SG < 37 AND dp1.Object.iRaOffset_SG_Sigma >= 38 AND dp1.Object.iDeclOffset_SG <= 39) + OR (dp1.Object.iDeclOffset_SG_Sigma > 40 AND dp1.Object.iRaDeclOffset_SG_Cov < 41 AND dp1.Object.iLnL_PS >= 42 AND dp1.Object.iLnL_SG <= 43) + OR (dp1.Object.iFlux_PS > 44 AND dp1.Object.iFlux_PS_Sigma < 45 AND dp1.Object.iFlux_ESG >= 46 AND dp1.Object.iFlux_ESG_Sigma <= 47) + OR (dp1.Object.iFlux_Gaussian > 48 AND dp1.Object.iFlux_Gaussian_Sigma < 49 AND dp1.Object.iTimescale >= 50 AND dp1.Object.iEarliestObsTime <= 51) + OR (dp1.Object.iLatestObsTime > 52 AND dp1.Object.iSersicN_SG < 53 AND dp1.Object.iSersicN_SG_Sigma >= 54 AND dp1.Object.iE1_SG <= 55) + OR (dp1.Object.iE1_SG_Sigma > 56 AND dp1.Object.iE2_SG < 57 AND dp1.Object.iE2_SG_Sigma >= 58 AND dp1.Object.iRadius_SG <= 59) + OR (dp1.Object.iRadius_SG_Sigma > 60 AND dp1.Object.iFlags < 61 AND dp1.Object.zNumObs >= 62 AND dp1.Object.zExtendedness <= 63) + OR (dp1.Object.zVarProb > 64 AND dp1.Object.zRaOffset_PS < 65 AND dp1.Object.zRaOffset_PS_Sigma >= 66 AND dp1.Object.zDeclOffset_PS <= 67) + OR (dp1.Object.zDeclOffset_PS_Sigma > 68 AND dp1.Object.zRaDeclOffset_PS_Cov < 69 AND dp1.Object.zRaOffset_SG >= 70 AND dp1.Object.zRaOffset_SG_Sigma <= 71) + OR (dp1.Object.zDeclOffset_SG > 72 AND dp1.Object.zDeclOffset_SG_Sigma < 73 AND dp1.Object.zRaDeclOffset_SG_Cov >= 74 AND dp1.Object.zLnL_PS <= 75) + OR (dp1.Object.zLnL_SG > 76 AND dp1.Object.zFlux_PS < 77 AND dp1.Object.zFlux_PS_Sigma >= 78 AND dp1.Object.zFlux_ESG <= 79) + OR (dp1.Object.zFlux_ESG_Sigma > 80 AND dp1.Object.zFlux_Gaussian < 81 AND dp1.Object.zFlux_Gaussian_Sigma >= 82 AND dp1.Object.zTimescale <= 83) + OR (dp1.Object.zEarliestObsTime > 84 AND dp1.Object.zLatestObsTime < 85 AND dp1.Object.zSersicN_SG >= 86 AND dp1.Object.zSersicN_SG_Sigma <= 87) + OR (dp1.Object.zE1_SG > 88 AND dp1.Object.zE1_SG_Sigma < 89 AND dp1.Object.zE2_SG >= 90 AND dp1.Object.zE2_SG_Sigma <= 91) + OR (dp1.Object.zRadius_SG > 92 AND dp1.Object.zRadius_SG_Sigma < 93 AND dp1.Object.zFlags >= 94 AND dp1.Object.yNumObs <= 95) + OR (dp1.Object.yExtendedness > 96 AND dp1.Object.yVarProb < 97 AND dp1.Object.yRaOffset_PS >= 98 AND dp1.Object.yRaOffset_PS_Sigma <= 99) + OR (dp1.Object.yDeclOffset_PS > 0 AND dp1.Object.yDeclOffset_PS_Sigma < 1 AND dp1.Object.yRaDeclOffset_PS_Cov >= 2 AND dp1.Object.yRaOffset_SG <= 3) + OR (dp1.Object.yRaOffset_SG_Sigma > 4 AND dp1.Object.yDeclOffset_SG < 5 AND dp1.Object.yDeclOffset_SG_Sigma >= 6 AND dp1.Object.yRaDeclOffset_SG_Cov <= 7) + OR (dp1.Object.yLnL_PS > 8 AND dp1.Object.yLnL_SG < 9 AND dp1.Object.yFlux_PS >= 10 AND dp1.Object.yFlux_PS_Sigma <= 11) + OR (dp1.Object.yFlux_ESG > 12 AND dp1.Object.yFlux_ESG_Sigma < 13 AND dp1.Object.yFlux_Gaussian >= 14 AND dp1.Object.yFlux_Gaussian_Sigma <= 15) + OR (dp1.Object.yTimescale > 16 AND dp1.Object.yEarliestObsTime < 17 AND dp1.Object.yLatestObsTime >= 18 AND dp1.Object.ySersicN_SG <= 19) + OR (dp1.Object.ySersicN_SG_Sigma > 20 AND dp1.Object.yE1_SG < 21 AND dp1.Object.yE1_SG_Sigma >= 22 AND dp1.Object.yE2_SG <= 23) + OR (dp1.Object.yE2_SG_Sigma > 24 AND dp1.Object.yRadius_SG < 25 AND dp1.Object.yRadius_SG_Sigma >= 26 AND dp1.Object.yFlags <= 27) + OR (dp1.Object.varBinaryField > 28 AND dp1.Object.chunkId < 29 AND dp1.Object.subChunkId >= 30 AND dp1.Object.qserv_trans_id <= 31) + OR (dp1.Object.objectId > 32 AND dp1.Object.iauId < 33 AND dp1.Object.ra_PS >= 34 AND dp1.Object.ra_PS_Sigma <= 35) + OR (dp1.Object.decl_PS > 36 AND dp1.Object.decl_PS_Sigma < 37 AND dp1.Object.radecl_PS_Cov >= 38 AND dp1.Object.htmId20 <= 39) + OR (dp1.Object.ra_SG > 40 AND dp1.Object.ra_SG_Sigma < 41 AND dp1.Object.decl_SG >= 42 AND dp1.Object.decl_SG_Sigma <= 43) + OR (dp1.Object.radecl_SG_Cov > 44 AND dp1.Object.raRange < 45 AND dp1.Object.declRange >= 46 AND dp1.Object.muRa_PS <= 47) + OR (dp1.Object.muRa_PS_Sigma > 48 AND dp1.Object.muDecl_PS < 49 AND dp1.Object.muDecl_PS_Sigma >= 50 AND dp1.Object.muRaDecl_PS_Cov <= 51) + OR (dp1.Object.parallax_PS > 52 AND dp1.Object.parallax_PS_Sigma < 53 AND dp1.Object.canonicalFilterId >= 54 AND dp1.Object.extendedness <= 55) + OR (dp1.Object.varProb > 56 AND dp1.Object.earliestObsTime < 57 AND dp1.Object.latestObsTime >= 58 AND dp1.Object.meanObsTime <= 59) + OR (dp1.Object.flags > 60 AND dp1.Object.uNumObs < 61 AND dp1.Object.uExtendedness >= 62 AND dp1.Object.uVarProb <= 63) + OR (dp1.Object.uRaOffset_PS > 64 AND dp1.Object.uRaOffset_PS_Sigma < 65 AND dp1.Object.uDeclOffset_PS >= 66 AND dp1.Object.uDeclOffset_PS_Sigma <= 67) + OR (dp1.Object.uRaDeclOffset_PS_Cov > 68 AND dp1.Object.uRaOffset_SG < 69 AND dp1.Object.uRaOffset_SG_Sigma >= 70 AND dp1.Object.uDeclOffset_SG <= 71) + OR (dp1.Object.uDeclOffset_SG_Sigma > 72 AND dp1.Object.uRaDeclOffset_SG_Cov < 73 AND dp1.Object.uLnL_PS >= 74 AND dp1.Object.uLnL_SG <= 75) + OR (dp1.Object.uFlux_PS > 76 AND dp1.Object.uFlux_PS_Sigma < 77 AND dp1.Object.uFlux_ESG >= 78 AND dp1.Object.uFlux_ESG_Sigma <= 79) + OR (dp1.Object.uFlux_Gaussian > 80 AND dp1.Object.uFlux_Gaussian_Sigma < 81 AND dp1.Object.uTimescale >= 82 AND dp1.Object.uEarliestObsTime <= 83) + OR (dp1.Object.uLatestObsTime > 84 AND dp1.Object.uSersicN_SG < 85 AND dp1.Object.uSersicN_SG_Sigma >= 86 AND dp1.Object.uE1_SG <= 87) + OR (dp1.Object.uE1_SG_Sigma > 88 AND dp1.Object.uE2_SG < 89 AND dp1.Object.uE2_SG_Sigma >= 90 AND dp1.Object.uRadius_SG <= 91) + OR (dp1.Object.uRadius_SG_Sigma > 92 AND dp1.Object.uFlags < 93 AND dp1.Object.gNumObs >= 94 AND dp1.Object.gExtendedness <= 95) + OR (dp1.Object.gVarProb > 96 AND dp1.Object.gRaOffset_PS < 97 AND dp1.Object.gRaOffset_PS_Sigma >= 98 AND dp1.Object.gDeclOffset_PS <= 99) + OR (dp1.Object.gDeclOffset_PS_Sigma > 0 AND dp1.Object.gRaDeclOffset_PS_Cov < 1 AND dp1.Object.gRaOffset_SG >= 2 AND dp1.Object.gRaOffset_SG_Sigma <= 3) + OR (dp1.Object.gDeclOffset_SG > 4 AND dp1.Object.gDeclOffset_SG_Sigma < 5 AND dp1.Object.gRaDeclOffset_SG_Cov >= 6 AND dp1.Object.gLnL_PS <= 7) + OR (dp1.Object.gLnL_SG > 8 AND dp1.Object.gFlux_PS < 9 AND dp1.Object.gFlux_PS_Sigma >= 10 AND dp1.Object.gFlux_ESG <= 11) + OR (dp1.Object.gFlux_ESG_Sigma > 12 AND dp1.Object.gFlux_Gaussian < 13 AND dp1.Object.gFlux_Gaussian_Sigma >= 14 AND dp1.Object.gTimescale <= 15) + OR (dp1.Object.gEarliestObsTime > 16 AND dp1.Object.gLatestObsTime < 17 AND dp1.Object.gSersicN_SG >= 18 AND dp1.Object.gSersicN_SG_Sigma <= 19) + OR (dp1.Object.gE1_SG > 20 AND dp1.Object.gE1_SG_Sigma < 21 AND dp1.Object.gE2_SG >= 22 AND dp1.Object.gE2_SG_Sigma <= 23) + OR (dp1.Object.gRadius_SG > 24 AND dp1.Object.gRadius_SG_Sigma < 25 AND dp1.Object.gFlags >= 26 AND dp1.Object.rNumObs <= 27) + OR (dp1.Object.rExtendedness > 28 AND dp1.Object.rVarProb < 29 AND dp1.Object.rRaOffset_PS >= 30 AND dp1.Object.rRaOffset_PS_Sigma <= 31) + OR (dp1.Object.rDeclOffset_PS > 32 AND dp1.Object.rDeclOffset_PS_Sigma < 33 AND dp1.Object.rRaDeclOffset_PS_Cov >= 34 AND dp1.Object.rRaOffset_SG <= 35) + OR (dp1.Object.rRaOffset_SG_Sigma > 36 AND dp1.Object.rDeclOffset_SG < 37 AND dp1.Object.rDeclOffset_SG_Sigma >= 38 AND dp1.Object.rRaDeclOffset_SG_Cov <= 39) + OR (dp1.Object.rLnL_PS > 40 AND dp1.Object.rLnL_SG < 41 AND dp1.Object.rFlux_PS >= 42 AND dp1.Object.rFlux_PS_Sigma <= 43) + OR (dp1.Object.rFlux_ESG > 44 AND dp1.Object.rFlux_ESG_Sigma < 45 AND dp1.Object.rFlux_Gaussian >= 46 AND dp1.Object.rFlux_Gaussian_Sigma <= 47) + OR (dp1.Object.rTimescale > 48 AND dp1.Object.rEarliestObsTime < 49 AND dp1.Object.rLatestObsTime >= 50 AND dp1.Object.rSersicN_SG <= 51) + OR (dp1.Object.rSersicN_SG_Sigma > 52 AND dp1.Object.rE1_SG < 53 AND dp1.Object.rE1_SG_Sigma >= 54 AND dp1.Object.rE2_SG <= 55) + OR (dp1.Object.rE2_SG_Sigma > 56 AND dp1.Object.rRadius_SG < 57 AND dp1.Object.rRadius_SG_Sigma >= 58 AND dp1.Object.rFlags <= 59) diff --git a/src/ccontrol/testdata/parser-corpus/q08_object_source_join_wide.sql b/src/ccontrol/testdata/parser-corpus/q08_object_source_join_wide.sql new file mode 100644 index 0000000000..cb98098b4c --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q08_object_source_join_wide.sql @@ -0,0 +1,610 @@ +SELECT + dp1.Object.qserv_trans_id AS left_qserv_trans_id, + dp1.Object.objectId AS left_objectId, + dp1.Object.iauId AS left_iauId, + dp1.Object.ra_PS AS left_ra_PS, + dp1.Object.ra_PS_Sigma AS left_ra_PS_Sigma, + dp1.Object.decl_PS AS left_decl_PS, + dp1.Object.decl_PS_Sigma AS left_decl_PS_Sigma, + dp1.Object.radecl_PS_Cov AS left_radecl_PS_Cov, + dp1.Object.htmId20 AS left_htmId20, + dp1.Object.ra_SG AS left_ra_SG, + dp1.Object.ra_SG_Sigma AS left_ra_SG_Sigma, + dp1.Object.decl_SG AS left_decl_SG, + dp1.Object.decl_SG_Sigma AS left_decl_SG_Sigma, + dp1.Object.radecl_SG_Cov AS left_radecl_SG_Cov, + dp1.Object.raRange AS left_raRange, + dp1.Object.declRange AS left_declRange, + dp1.Object.muRa_PS AS left_muRa_PS, + dp1.Object.muRa_PS_Sigma AS left_muRa_PS_Sigma, + dp1.Object.muDecl_PS AS left_muDecl_PS, + dp1.Object.muDecl_PS_Sigma AS left_muDecl_PS_Sigma, + dp1.Object.muRaDecl_PS_Cov AS left_muRaDecl_PS_Cov, + dp1.Object.parallax_PS AS left_parallax_PS, + dp1.Object.parallax_PS_Sigma AS left_parallax_PS_Sigma, + dp1.Object.canonicalFilterId AS left_canonicalFilterId, + dp1.Object.extendedness AS left_extendedness, + dp1.Object.varProb AS left_varProb, + dp1.Object.earliestObsTime AS left_earliestObsTime, + dp1.Object.latestObsTime AS left_latestObsTime, + dp1.Object.meanObsTime AS left_meanObsTime, + dp1.Object.flags AS left_flags, + dp1.Object.uNumObs AS left_uNumObs, + dp1.Object.uExtendedness AS left_uExtendedness, + dp1.Object.uVarProb AS left_uVarProb, + dp1.Object.uRaOffset_PS AS left_uRaOffset_PS, + dp1.Object.uRaOffset_PS_Sigma AS left_uRaOffset_PS_Sigma, + dp1.Object.uDeclOffset_PS AS left_uDeclOffset_PS, + dp1.Object.uDeclOffset_PS_Sigma AS left_uDeclOffset_PS_Sigma, + dp1.Object.uRaDeclOffset_PS_Cov AS left_uRaDeclOffset_PS_Cov, + dp1.Object.uRaOffset_SG AS left_uRaOffset_SG, + dp1.Object.uRaOffset_SG_Sigma AS left_uRaOffset_SG_Sigma, + dp1.Object.uDeclOffset_SG AS left_uDeclOffset_SG, + dp1.Object.uDeclOffset_SG_Sigma AS left_uDeclOffset_SG_Sigma, + dp1.Object.uRaDeclOffset_SG_Cov AS left_uRaDeclOffset_SG_Cov, + dp1.Object.uLnL_PS AS left_uLnL_PS, + dp1.Object.uLnL_SG AS left_uLnL_SG, + dp1.Object.uFlux_PS AS left_uFlux_PS, + dp1.Object.uFlux_PS_Sigma AS left_uFlux_PS_Sigma, + dp1.Object.uFlux_ESG AS left_uFlux_ESG, + dp1.Object.uFlux_ESG_Sigma AS left_uFlux_ESG_Sigma, + dp1.Object.uFlux_Gaussian AS left_uFlux_Gaussian, + dp1.Object.uFlux_Gaussian_Sigma AS left_uFlux_Gaussian_Sigma, + dp1.Object.uTimescale AS left_uTimescale, + dp1.Object.uEarliestObsTime AS left_uEarliestObsTime, + dp1.Object.uLatestObsTime AS left_uLatestObsTime, + dp1.Object.uSersicN_SG AS left_uSersicN_SG, + dp1.Object.uSersicN_SG_Sigma AS left_uSersicN_SG_Sigma, + dp1.Object.uE1_SG AS left_uE1_SG, + dp1.Object.uE1_SG_Sigma AS left_uE1_SG_Sigma, + dp1.Object.uE2_SG AS left_uE2_SG, + dp1.Object.uE2_SG_Sigma AS left_uE2_SG_Sigma, + dp1.Object.uRadius_SG AS left_uRadius_SG, + dp1.Object.uRadius_SG_Sigma AS left_uRadius_SG_Sigma, + dp1.Object.uFlags AS left_uFlags, + dp1.Object.gNumObs AS left_gNumObs, + dp1.Object.gExtendedness AS left_gExtendedness, + dp1.Object.gVarProb AS left_gVarProb, + dp1.Object.gRaOffset_PS AS left_gRaOffset_PS, + dp1.Object.gRaOffset_PS_Sigma AS left_gRaOffset_PS_Sigma, + dp1.Object.gDeclOffset_PS AS left_gDeclOffset_PS, + dp1.Object.gDeclOffset_PS_Sigma AS left_gDeclOffset_PS_Sigma, + dp1.Object.gRaDeclOffset_PS_Cov AS left_gRaDeclOffset_PS_Cov, + dp1.Object.gRaOffset_SG AS left_gRaOffset_SG, + dp1.Object.gRaOffset_SG_Sigma AS left_gRaOffset_SG_Sigma, + dp1.Object.gDeclOffset_SG AS left_gDeclOffset_SG, + dp1.Object.gDeclOffset_SG_Sigma AS left_gDeclOffset_SG_Sigma, + dp1.Object.gRaDeclOffset_SG_Cov AS left_gRaDeclOffset_SG_Cov, + dp1.Object.gLnL_PS AS left_gLnL_PS, + dp1.Object.gLnL_SG AS left_gLnL_SG, + dp1.Object.gFlux_PS AS left_gFlux_PS, + dp1.Object.gFlux_PS_Sigma AS left_gFlux_PS_Sigma, + dp1.Object.gFlux_ESG AS left_gFlux_ESG, + dp1.Object.gFlux_ESG_Sigma AS left_gFlux_ESG_Sigma, + dp1.Object.gFlux_Gaussian AS left_gFlux_Gaussian, + dp1.Object.gFlux_Gaussian_Sigma AS left_gFlux_Gaussian_Sigma, + dp1.Object.gTimescale AS left_gTimescale, + dp1.Object.gEarliestObsTime AS left_gEarliestObsTime, + dp1.Object.gLatestObsTime AS left_gLatestObsTime, + dp1.Object.gSersicN_SG AS left_gSersicN_SG, + dp1.Object.gSersicN_SG_Sigma AS left_gSersicN_SG_Sigma, + dp1.Object.gE1_SG AS left_gE1_SG, + dp1.Object.gE1_SG_Sigma AS left_gE1_SG_Sigma, + dp1.Object.gE2_SG AS left_gE2_SG, + dp1.Object.gE2_SG_Sigma AS left_gE2_SG_Sigma, + dp1.Object.gRadius_SG AS left_gRadius_SG, + dp1.Object.gRadius_SG_Sigma AS left_gRadius_SG_Sigma, + dp1.Object.gFlags AS left_gFlags, + dp1.Object.rNumObs AS left_rNumObs, + dp1.Object.rExtendedness AS left_rExtendedness, + dp1.Object.rVarProb AS left_rVarProb, + dp1.Object.rRaOffset_PS AS left_rRaOffset_PS, + dp1.Object.rRaOffset_PS_Sigma AS left_rRaOffset_PS_Sigma, + dp1.Object.rDeclOffset_PS AS left_rDeclOffset_PS, + dp1.Object.rDeclOffset_PS_Sigma AS left_rDeclOffset_PS_Sigma, + dp1.Object.rRaDeclOffset_PS_Cov AS left_rRaDeclOffset_PS_Cov, + dp1.Object.rRaOffset_SG AS left_rRaOffset_SG, + dp1.Object.rRaOffset_SG_Sigma AS left_rRaOffset_SG_Sigma, + dp1.Object.rDeclOffset_SG AS left_rDeclOffset_SG, + dp1.Object.rDeclOffset_SG_Sigma AS left_rDeclOffset_SG_Sigma, + dp1.Object.rRaDeclOffset_SG_Cov AS left_rRaDeclOffset_SG_Cov, + dp1.Object.rLnL_PS AS left_rLnL_PS, + dp1.Object.rLnL_SG AS left_rLnL_SG, + dp1.Object.rFlux_PS AS left_rFlux_PS, + dp1.Object.rFlux_PS_Sigma AS left_rFlux_PS_Sigma, + dp1.Object.rFlux_ESG AS left_rFlux_ESG, + dp1.Object.rFlux_ESG_Sigma AS left_rFlux_ESG_Sigma, + dp1.Object.rFlux_Gaussian AS left_rFlux_Gaussian, + dp1.Object.rFlux_Gaussian_Sigma AS left_rFlux_Gaussian_Sigma, + dp1.Object.rTimescale AS left_rTimescale, + dp1.Object.rEarliestObsTime AS left_rEarliestObsTime, + dp1.Object.rLatestObsTime AS left_rLatestObsTime, + dp1.Object.rSersicN_SG AS left_rSersicN_SG, + dp1.Object.rSersicN_SG_Sigma AS left_rSersicN_SG_Sigma, + dp1.Object.rE1_SG AS left_rE1_SG, + dp1.Object.rE1_SG_Sigma AS left_rE1_SG_Sigma, + dp1.Object.rE2_SG AS left_rE2_SG, + dp1.Object.rE2_SG_Sigma AS left_rE2_SG_Sigma, + dp1.Object.rRadius_SG AS left_rRadius_SG, + dp1.Object.rRadius_SG_Sigma AS left_rRadius_SG_Sigma, + dp1.Object.rFlags AS left_rFlags, + dp1.Object.iNumObs AS left_iNumObs, + dp1.Object.iExtendedness AS left_iExtendedness, + dp1.Object.iVarProb AS left_iVarProb, + dp1.Object.iRaOffset_PS AS left_iRaOffset_PS, + dp1.Object.iRaOffset_PS_Sigma AS left_iRaOffset_PS_Sigma, + dp1.Object.iDeclOffset_PS AS left_iDeclOffset_PS, + dp1.Object.iDeclOffset_PS_Sigma AS left_iDeclOffset_PS_Sigma, + dp1.Object.iRaDeclOffset_PS_Cov AS left_iRaDeclOffset_PS_Cov, + dp1.Object.iRaOffset_SG AS left_iRaOffset_SG, + dp1.Object.iRaOffset_SG_Sigma AS left_iRaOffset_SG_Sigma, + dp1.Object.iDeclOffset_SG AS left_iDeclOffset_SG, + dp1.Object.iDeclOffset_SG_Sigma AS left_iDeclOffset_SG_Sigma, + dp1.Object.iRaDeclOffset_SG_Cov AS left_iRaDeclOffset_SG_Cov, + dp1.Object.iLnL_PS AS left_iLnL_PS, + dp1.Object.iLnL_SG AS left_iLnL_SG, + dp1.Object.iFlux_PS AS left_iFlux_PS, + dp1.Object.iFlux_PS_Sigma AS left_iFlux_PS_Sigma, + dp1.Object.iFlux_ESG AS left_iFlux_ESG, + dp1.Object.iFlux_ESG_Sigma AS left_iFlux_ESG_Sigma, + dp1.Object.iFlux_Gaussian AS left_iFlux_Gaussian, + dp1.Object.iFlux_Gaussian_Sigma AS left_iFlux_Gaussian_Sigma, + dp1.Object.iTimescale AS left_iTimescale, + dp1.Object.iEarliestObsTime AS left_iEarliestObsTime, + dp1.Object.iLatestObsTime AS left_iLatestObsTime, + dp1.Object.iSersicN_SG AS left_iSersicN_SG, + dp1.Object.iSersicN_SG_Sigma AS left_iSersicN_SG_Sigma, + dp1.Object.iE1_SG AS left_iE1_SG, + dp1.Object.iE1_SG_Sigma AS left_iE1_SG_Sigma, + dp1.Object.iE2_SG AS left_iE2_SG, + dp1.Object.iE2_SG_Sigma AS left_iE2_SG_Sigma, + dp1.Object.iRadius_SG AS left_iRadius_SG, + dp1.Object.iRadius_SG_Sigma AS left_iRadius_SG_Sigma, + dp1.Object.iFlags AS left_iFlags, + dp1.Object.zNumObs AS left_zNumObs, + dp1.Object.zExtendedness AS left_zExtendedness, + dp1.Object.zVarProb AS left_zVarProb, + dp1.Object.zRaOffset_PS AS left_zRaOffset_PS, + dp1.Object.zRaOffset_PS_Sigma AS left_zRaOffset_PS_Sigma, + dp1.Object.zDeclOffset_PS AS left_zDeclOffset_PS, + dp1.Object.zDeclOffset_PS_Sigma AS left_zDeclOffset_PS_Sigma, + dp1.Object.zRaDeclOffset_PS_Cov AS left_zRaDeclOffset_PS_Cov, + dp1.Object.zRaOffset_SG AS left_zRaOffset_SG, + dp1.Object.zRaOffset_SG_Sigma AS left_zRaOffset_SG_Sigma, + dp1.Object.zDeclOffset_SG AS left_zDeclOffset_SG, + dp1.Object.zDeclOffset_SG_Sigma AS left_zDeclOffset_SG_Sigma, + dp1.Object.zRaDeclOffset_SG_Cov AS left_zRaDeclOffset_SG_Cov, + dp1.Object.zLnL_PS AS left_zLnL_PS, + dp1.Object.zLnL_SG AS left_zLnL_SG, + dp1.Object.zFlux_PS AS left_zFlux_PS, + dp1.Object.zFlux_PS_Sigma AS left_zFlux_PS_Sigma, + dp1.Object.zFlux_ESG AS left_zFlux_ESG, + dp1.Object.zFlux_ESG_Sigma AS left_zFlux_ESG_Sigma, + dp1.Object.zFlux_Gaussian AS left_zFlux_Gaussian, + dp1.Object.zFlux_Gaussian_Sigma AS left_zFlux_Gaussian_Sigma, + dp1.Object.zTimescale AS left_zTimescale, + dp1.Object.zEarliestObsTime AS left_zEarliestObsTime, + dp1.Object.zLatestObsTime AS left_zLatestObsTime, + dp1.Object.zSersicN_SG AS left_zSersicN_SG, + dp1.Object.zSersicN_SG_Sigma AS left_zSersicN_SG_Sigma, + dp1.Object.zE1_SG AS left_zE1_SG, + dp1.Object.zE1_SG_Sigma AS left_zE1_SG_Sigma, + dp1.Object.zE2_SG AS left_zE2_SG, + dp1.Object.zE2_SG_Sigma AS left_zE2_SG_Sigma, + dp1.Object.zRadius_SG AS left_zRadius_SG, + dp1.Object.zRadius_SG_Sigma AS left_zRadius_SG_Sigma, + dp1.Object.zFlags AS left_zFlags, + dp1.Object.yNumObs AS left_yNumObs, + dp1.Object.yExtendedness AS left_yExtendedness, + dp1.Object.yVarProb AS left_yVarProb, + dp1.Object.yRaOffset_PS AS left_yRaOffset_PS, + dp1.Object.yRaOffset_PS_Sigma AS left_yRaOffset_PS_Sigma, + dp1.Object.yDeclOffset_PS AS left_yDeclOffset_PS, + dp1.Object.yDeclOffset_PS_Sigma AS left_yDeclOffset_PS_Sigma, + dp1.Object.yRaDeclOffset_PS_Cov AS left_yRaDeclOffset_PS_Cov, + dp1.Object.yRaOffset_SG AS left_yRaOffset_SG, + dp1.Object.yRaOffset_SG_Sigma AS left_yRaOffset_SG_Sigma, + dp1.Object.yDeclOffset_SG AS left_yDeclOffset_SG, + dp1.Object.yDeclOffset_SG_Sigma AS left_yDeclOffset_SG_Sigma, + dp1.Object.yRaDeclOffset_SG_Cov AS left_yRaDeclOffset_SG_Cov, + dp1.Object.yLnL_PS AS left_yLnL_PS, + dp1.Object.yLnL_SG AS left_yLnL_SG, + dp1.Object.yFlux_PS AS left_yFlux_PS, + dp1.Object.yFlux_PS_Sigma AS left_yFlux_PS_Sigma, + dp1.Object.yFlux_ESG AS left_yFlux_ESG, + dp1.Object.yFlux_ESG_Sigma AS left_yFlux_ESG_Sigma, + dp1.Object.yFlux_Gaussian AS left_yFlux_Gaussian, + dp1.Object.yFlux_Gaussian_Sigma AS left_yFlux_Gaussian_Sigma, + dp1.Object.yTimescale AS left_yTimescale, + dp1.Object.yEarliestObsTime AS left_yEarliestObsTime, + dp1.Object.yLatestObsTime AS left_yLatestObsTime, + dp1.Object.ySersicN_SG AS left_ySersicN_SG, + dp1.Object.ySersicN_SG_Sigma AS left_ySersicN_SG_Sigma, + dp1.Object.yE1_SG AS left_yE1_SG, + dp1.Object.yE1_SG_Sigma AS left_yE1_SG_Sigma, + dp1.Object.yE2_SG AS left_yE2_SG, + dp1.Object.yE2_SG_Sigma AS left_yE2_SG_Sigma, + dp1.Object.yRadius_SG AS left_yRadius_SG, + dp1.Object.yRadius_SG_Sigma AS left_yRadius_SG_Sigma, + dp1.Object.yFlags AS left_yFlags, + dp1.Object.varBinaryField AS left_varBinaryField, + dp1.Object.chunkId AS left_chunkId, + dp1.Object.subChunkId AS left_subChunkId, + dp1.Source.qserv_trans_id AS right_qserv_trans_id, + dp1.Source.objectId AS right_objectId, + dp1.Source.iauId AS right_iauId, + dp1.Source.ra_PS AS right_ra_PS, + dp1.Source.ra_PS_Sigma AS right_ra_PS_Sigma, + dp1.Source.decl_PS AS right_decl_PS, + dp1.Source.decl_PS_Sigma AS right_decl_PS_Sigma, + dp1.Source.radecl_PS_Cov AS right_radecl_PS_Cov, + dp1.Source.htmId20 AS right_htmId20, + dp1.Source.ra_SG AS right_ra_SG, + dp1.Source.ra_SG_Sigma AS right_ra_SG_Sigma, + dp1.Source.decl_SG AS right_decl_SG, + dp1.Source.decl_SG_Sigma AS right_decl_SG_Sigma, + dp1.Source.radecl_SG_Cov AS right_radecl_SG_Cov, + dp1.Source.raRange AS right_raRange, + dp1.Source.declRange AS right_declRange, + dp1.Source.muRa_PS AS right_muRa_PS, + dp1.Source.muRa_PS_Sigma AS right_muRa_PS_Sigma, + dp1.Source.muDecl_PS AS right_muDecl_PS, + dp1.Source.muDecl_PS_Sigma AS right_muDecl_PS_Sigma, + dp1.Source.muRaDecl_PS_Cov AS right_muRaDecl_PS_Cov, + dp1.Source.parallax_PS AS right_parallax_PS, + dp1.Source.parallax_PS_Sigma AS right_parallax_PS_Sigma, + dp1.Source.canonicalFilterId AS right_canonicalFilterId, + dp1.Source.extendedness AS right_extendedness, + dp1.Source.varProb AS right_varProb, + dp1.Source.earliestObsTime AS right_earliestObsTime, + dp1.Source.latestObsTime AS right_latestObsTime, + dp1.Source.meanObsTime AS right_meanObsTime, + dp1.Source.flags AS right_flags, + dp1.Source.uNumObs AS right_uNumObs, + dp1.Source.uExtendedness AS right_uExtendedness, + dp1.Source.uVarProb AS right_uVarProb, + dp1.Source.uRaOffset_PS AS right_uRaOffset_PS, + dp1.Source.uRaOffset_PS_Sigma AS right_uRaOffset_PS_Sigma, + dp1.Source.uDeclOffset_PS AS right_uDeclOffset_PS, + dp1.Source.uDeclOffset_PS_Sigma AS right_uDeclOffset_PS_Sigma, + dp1.Source.uRaDeclOffset_PS_Cov AS right_uRaDeclOffset_PS_Cov, + dp1.Source.uRaOffset_SG AS right_uRaOffset_SG, + dp1.Source.uRaOffset_SG_Sigma AS right_uRaOffset_SG_Sigma, + dp1.Source.uDeclOffset_SG AS right_uDeclOffset_SG, + dp1.Source.uDeclOffset_SG_Sigma AS right_uDeclOffset_SG_Sigma, + dp1.Source.uRaDeclOffset_SG_Cov AS right_uRaDeclOffset_SG_Cov, + dp1.Source.uLnL_PS AS right_uLnL_PS, + dp1.Source.uLnL_SG AS right_uLnL_SG, + dp1.Source.uFlux_PS AS right_uFlux_PS, + dp1.Source.uFlux_PS_Sigma AS right_uFlux_PS_Sigma, + dp1.Source.uFlux_ESG AS right_uFlux_ESG, + dp1.Source.uFlux_ESG_Sigma AS right_uFlux_ESG_Sigma, + dp1.Source.uFlux_Gaussian AS right_uFlux_Gaussian, + dp1.Source.uFlux_Gaussian_Sigma AS right_uFlux_Gaussian_Sigma, + dp1.Source.uTimescale AS right_uTimescale, + dp1.Source.uEarliestObsTime AS right_uEarliestObsTime, + dp1.Source.uLatestObsTime AS right_uLatestObsTime, + dp1.Source.uSersicN_SG AS right_uSersicN_SG, + dp1.Source.uSersicN_SG_Sigma AS right_uSersicN_SG_Sigma, + dp1.Source.uE1_SG AS right_uE1_SG, + dp1.Source.uE1_SG_Sigma AS right_uE1_SG_Sigma, + dp1.Source.uE2_SG AS right_uE2_SG, + dp1.Source.uE2_SG_Sigma AS right_uE2_SG_Sigma, + dp1.Source.uRadius_SG AS right_uRadius_SG, + dp1.Source.uRadius_SG_Sigma AS right_uRadius_SG_Sigma, + dp1.Source.uFlags AS right_uFlags, + dp1.Source.gNumObs AS right_gNumObs, + dp1.Source.gExtendedness AS right_gExtendedness, + dp1.Source.gVarProb AS right_gVarProb, + dp1.Source.gRaOffset_PS AS right_gRaOffset_PS, + dp1.Source.gRaOffset_PS_Sigma AS right_gRaOffset_PS_Sigma, + dp1.Source.gDeclOffset_PS AS right_gDeclOffset_PS, + dp1.Source.gDeclOffset_PS_Sigma AS right_gDeclOffset_PS_Sigma, + dp1.Source.gRaDeclOffset_PS_Cov AS right_gRaDeclOffset_PS_Cov, + dp1.Source.gRaOffset_SG AS right_gRaOffset_SG, + dp1.Source.gRaOffset_SG_Sigma AS right_gRaOffset_SG_Sigma, + dp1.Source.gDeclOffset_SG AS right_gDeclOffset_SG, + dp1.Source.gDeclOffset_SG_Sigma AS right_gDeclOffset_SG_Sigma, + dp1.Source.gRaDeclOffset_SG_Cov AS right_gRaDeclOffset_SG_Cov, + dp1.Source.gLnL_PS AS right_gLnL_PS, + dp1.Source.gLnL_SG AS right_gLnL_SG, + dp1.Source.gFlux_PS AS right_gFlux_PS, + dp1.Source.gFlux_PS_Sigma AS right_gFlux_PS_Sigma, + dp1.Source.gFlux_ESG AS right_gFlux_ESG, + dp1.Source.gFlux_ESG_Sigma AS right_gFlux_ESG_Sigma, + dp1.Source.gFlux_Gaussian AS right_gFlux_Gaussian, + dp1.Source.gFlux_Gaussian_Sigma AS right_gFlux_Gaussian_Sigma, + dp1.Source.gTimescale AS right_gTimescale, + dp1.Source.gEarliestObsTime AS right_gEarliestObsTime, + dp1.Source.gLatestObsTime AS right_gLatestObsTime, + dp1.Source.gSersicN_SG AS right_gSersicN_SG, + dp1.Source.gSersicN_SG_Sigma AS right_gSersicN_SG_Sigma, + dp1.Source.gE1_SG AS right_gE1_SG, + dp1.Source.gE1_SG_Sigma AS right_gE1_SG_Sigma, + dp1.Source.gE2_SG AS right_gE2_SG, + dp1.Source.gE2_SG_Sigma AS right_gE2_SG_Sigma, + dp1.Source.gRadius_SG AS right_gRadius_SG, + dp1.Source.gRadius_SG_Sigma AS right_gRadius_SG_Sigma, + dp1.Source.gFlags AS right_gFlags, + dp1.Source.rNumObs AS right_rNumObs, + dp1.Source.rExtendedness AS right_rExtendedness, + dp1.Source.rVarProb AS right_rVarProb, + dp1.Source.rRaOffset_PS AS right_rRaOffset_PS, + dp1.Source.rRaOffset_PS_Sigma AS right_rRaOffset_PS_Sigma, + dp1.Source.rDeclOffset_PS AS right_rDeclOffset_PS, + dp1.Source.rDeclOffset_PS_Sigma AS right_rDeclOffset_PS_Sigma, + dp1.Source.rRaDeclOffset_PS_Cov AS right_rRaDeclOffset_PS_Cov, + dp1.Source.rRaOffset_SG AS right_rRaOffset_SG, + dp1.Source.rRaOffset_SG_Sigma AS right_rRaOffset_SG_Sigma, + dp1.Source.rDeclOffset_SG AS right_rDeclOffset_SG, + dp1.Source.rDeclOffset_SG_Sigma AS right_rDeclOffset_SG_Sigma, + dp1.Source.rRaDeclOffset_SG_Cov AS right_rRaDeclOffset_SG_Cov, + dp1.Source.rLnL_PS AS right_rLnL_PS, + dp1.Source.rLnL_SG AS right_rLnL_SG, + dp1.Source.rFlux_PS AS right_rFlux_PS, + dp1.Source.rFlux_PS_Sigma AS right_rFlux_PS_Sigma, + dp1.Source.rFlux_ESG AS right_rFlux_ESG, + dp1.Source.rFlux_ESG_Sigma AS right_rFlux_ESG_Sigma, + dp1.Source.rFlux_Gaussian AS right_rFlux_Gaussian, + dp1.Source.rFlux_Gaussian_Sigma AS right_rFlux_Gaussian_Sigma, + dp1.Source.rTimescale AS right_rTimescale, + dp1.Source.rEarliestObsTime AS right_rEarliestObsTime, + dp1.Source.rLatestObsTime AS right_rLatestObsTime, + dp1.Source.rSersicN_SG AS right_rSersicN_SG, + dp1.Source.rSersicN_SG_Sigma AS right_rSersicN_SG_Sigma, + dp1.Source.rE1_SG AS right_rE1_SG, + dp1.Source.rE1_SG_Sigma AS right_rE1_SG_Sigma, + dp1.Source.rE2_SG AS right_rE2_SG, + dp1.Source.rE2_SG_Sigma AS right_rE2_SG_Sigma, + dp1.Source.rRadius_SG AS right_rRadius_SG, + dp1.Source.rRadius_SG_Sigma AS right_rRadius_SG_Sigma, + dp1.Source.rFlags AS right_rFlags, + dp1.Source.iNumObs AS right_iNumObs, + dp1.Source.iExtendedness AS right_iExtendedness, + dp1.Source.iVarProb AS right_iVarProb, + dp1.Source.iRaOffset_PS AS right_iRaOffset_PS, + dp1.Source.iRaOffset_PS_Sigma AS right_iRaOffset_PS_Sigma, + dp1.Source.iDeclOffset_PS AS right_iDeclOffset_PS, + dp1.Source.iDeclOffset_PS_Sigma AS right_iDeclOffset_PS_Sigma, + dp1.Source.iRaDeclOffset_PS_Cov AS right_iRaDeclOffset_PS_Cov, + dp1.Source.iRaOffset_SG AS right_iRaOffset_SG, + dp1.Source.iRaOffset_SG_Sigma AS right_iRaOffset_SG_Sigma, + dp1.Source.iDeclOffset_SG AS right_iDeclOffset_SG, + dp1.Source.iDeclOffset_SG_Sigma AS right_iDeclOffset_SG_Sigma, + dp1.Source.iRaDeclOffset_SG_Cov AS right_iRaDeclOffset_SG_Cov, + dp1.Source.iLnL_PS AS right_iLnL_PS, + dp1.Source.iLnL_SG AS right_iLnL_SG, + dp1.Source.iFlux_PS AS right_iFlux_PS, + dp1.Source.iFlux_PS_Sigma AS right_iFlux_PS_Sigma, + dp1.Source.iFlux_ESG AS right_iFlux_ESG, + dp1.Source.iFlux_ESG_Sigma AS right_iFlux_ESG_Sigma, + dp1.Source.iFlux_Gaussian AS right_iFlux_Gaussian, + dp1.Source.iFlux_Gaussian_Sigma AS right_iFlux_Gaussian_Sigma, + dp1.Source.iTimescale AS right_iTimescale, + dp1.Source.iEarliestObsTime AS right_iEarliestObsTime, + dp1.Source.iLatestObsTime AS right_iLatestObsTime, + dp1.Source.iSersicN_SG AS right_iSersicN_SG, + dp1.Source.iSersicN_SG_Sigma AS right_iSersicN_SG_Sigma, + dp1.Source.iE1_SG AS right_iE1_SG, + dp1.Source.iE1_SG_Sigma AS right_iE1_SG_Sigma, + dp1.Source.iE2_SG AS right_iE2_SG, + dp1.Source.iE2_SG_Sigma AS right_iE2_SG_Sigma, + dp1.Source.iRadius_SG AS right_iRadius_SG, + dp1.Source.iRadius_SG_Sigma AS right_iRadius_SG_Sigma, + dp1.Source.iFlags AS right_iFlags, + dp1.Source.zNumObs AS right_zNumObs, + dp1.Source.zExtendedness AS right_zExtendedness, + dp1.Source.zVarProb AS right_zVarProb, + dp1.Source.zRaOffset_PS AS right_zRaOffset_PS, + dp1.Source.zRaOffset_PS_Sigma AS right_zRaOffset_PS_Sigma, + dp1.Source.zDeclOffset_PS AS right_zDeclOffset_PS, + dp1.Source.zDeclOffset_PS_Sigma AS right_zDeclOffset_PS_Sigma, + dp1.Source.zRaDeclOffset_PS_Cov AS right_zRaDeclOffset_PS_Cov, + dp1.Source.zRaOffset_SG AS right_zRaOffset_SG, + dp1.Source.zRaOffset_SG_Sigma AS right_zRaOffset_SG_Sigma, + dp1.Source.zDeclOffset_SG AS right_zDeclOffset_SG, + dp1.Source.zDeclOffset_SG_Sigma AS right_zDeclOffset_SG_Sigma, + dp1.Source.zRaDeclOffset_SG_Cov AS right_zRaDeclOffset_SG_Cov, + dp1.Source.zLnL_PS AS right_zLnL_PS, + dp1.Source.zLnL_SG AS right_zLnL_SG, + dp1.Source.zFlux_PS AS right_zFlux_PS, + dp1.Source.zFlux_PS_Sigma AS right_zFlux_PS_Sigma, + dp1.Source.zFlux_ESG AS right_zFlux_ESG, + dp1.Source.zFlux_ESG_Sigma AS right_zFlux_ESG_Sigma, + dp1.Source.zFlux_Gaussian AS right_zFlux_Gaussian, + dp1.Source.zFlux_Gaussian_Sigma AS right_zFlux_Gaussian_Sigma, + dp1.Source.zTimescale AS right_zTimescale, + dp1.Source.zEarliestObsTime AS right_zEarliestObsTime, + dp1.Source.zLatestObsTime AS right_zLatestObsTime, + dp1.Source.zSersicN_SG AS right_zSersicN_SG, + dp1.Source.zSersicN_SG_Sigma AS right_zSersicN_SG_Sigma, + dp1.Source.zE1_SG AS right_zE1_SG, + dp1.Source.zE1_SG_Sigma AS right_zE1_SG_Sigma, + dp1.Source.zE2_SG AS right_zE2_SG, + dp1.Source.zE2_SG_Sigma AS right_zE2_SG_Sigma, + dp1.Source.zRadius_SG AS right_zRadius_SG, + dp1.Source.zRadius_SG_Sigma AS right_zRadius_SG_Sigma, + dp1.Source.zFlags AS right_zFlags, + dp1.Source.yNumObs AS right_yNumObs, + dp1.Source.yExtendedness AS right_yExtendedness, + dp1.Source.yVarProb AS right_yVarProb, + dp1.Source.yRaOffset_PS AS right_yRaOffset_PS, + dp1.Source.yRaOffset_PS_Sigma AS right_yRaOffset_PS_Sigma, + dp1.Source.yDeclOffset_PS AS right_yDeclOffset_PS, + dp1.Source.yDeclOffset_PS_Sigma AS right_yDeclOffset_PS_Sigma, + dp1.Source.yRaDeclOffset_PS_Cov AS right_yRaDeclOffset_PS_Cov, + dp1.Source.yRaOffset_SG AS right_yRaOffset_SG, + dp1.Source.yRaOffset_SG_Sigma AS right_yRaOffset_SG_Sigma, + dp1.Source.yDeclOffset_SG AS right_yDeclOffset_SG, + dp1.Source.yDeclOffset_SG_Sigma AS right_yDeclOffset_SG_Sigma, + dp1.Source.yRaDeclOffset_SG_Cov AS right_yRaDeclOffset_SG_Cov, + dp1.Source.yLnL_PS AS right_yLnL_PS, + dp1.Source.yLnL_SG AS right_yLnL_SG, + dp1.Source.yFlux_PS AS right_yFlux_PS, + dp1.Source.yFlux_PS_Sigma AS right_yFlux_PS_Sigma, + dp1.Source.yFlux_ESG AS right_yFlux_ESG, + dp1.Source.yFlux_ESG_Sigma AS right_yFlux_ESG_Sigma, + dp1.Source.yFlux_Gaussian AS right_yFlux_Gaussian, + dp1.Source.yFlux_Gaussian_Sigma AS right_yFlux_Gaussian_Sigma, + dp1.Source.yTimescale AS right_yTimescale, + dp1.Source.yEarliestObsTime AS right_yEarliestObsTime, + dp1.Source.yLatestObsTime AS right_yLatestObsTime, + dp1.Source.ySersicN_SG AS right_ySersicN_SG, + dp1.Source.ySersicN_SG_Sigma AS right_ySersicN_SG_Sigma, + dp1.Source.yE1_SG AS right_yE1_SG, + dp1.Source.yE1_SG_Sigma AS right_yE1_SG_Sigma, + dp1.Source.yE2_SG AS right_yE2_SG, + dp1.Source.yE2_SG_Sigma AS right_yE2_SG_Sigma, + dp1.Source.yRadius_SG AS right_yRadius_SG, + dp1.Source.yRadius_SG_Sigma AS right_yRadius_SG_Sigma, + dp1.Source.yFlags AS right_yFlags, + dp1.Source.varBinaryField AS right_varBinaryField, + dp1.Source.chunkId AS right_chunkId, + dp1.Source.subChunkId AS right_subChunkId, + (dp1.Object.qserv_trans_id - dp1.Source.qserv_trans_id) AS diff_0_qserv_trans_id, + (dp1.Object.objectId - dp1.Source.objectId) AS diff_1_objectId, + (dp1.Object.iauId - dp1.Source.iauId) AS diff_2_iauId, + (dp1.Object.ra_PS - dp1.Source.ra_PS) AS diff_3_ra_PS, + (dp1.Object.ra_PS_Sigma - dp1.Source.ra_PS_Sigma) AS diff_4_ra_PS_Sigma, + (dp1.Object.decl_PS - dp1.Source.decl_PS) AS diff_5_decl_PS, + (dp1.Object.decl_PS_Sigma - dp1.Source.decl_PS_Sigma) AS diff_6_decl_PS_Sigma, + (dp1.Object.radecl_PS_Cov - dp1.Source.radecl_PS_Cov) AS diff_7_radecl_PS_Cov, + (dp1.Object.htmId20 - dp1.Source.htmId20) AS diff_8_htmId20, + (dp1.Object.ra_SG - dp1.Source.ra_SG) AS diff_9_ra_SG, + (dp1.Object.ra_SG_Sigma - dp1.Source.ra_SG_Sigma) AS diff_10_ra_SG_Sigma, + (dp1.Object.decl_SG - dp1.Source.decl_SG) AS diff_11_decl_SG, + (dp1.Object.decl_SG_Sigma - dp1.Source.decl_SG_Sigma) AS diff_12_decl_SG_Sigma, + (dp1.Object.radecl_SG_Cov - dp1.Source.radecl_SG_Cov) AS diff_13_radecl_SG_Cov, + (dp1.Object.raRange - dp1.Source.raRange) AS diff_14_raRange, + (dp1.Object.declRange - dp1.Source.declRange) AS diff_15_declRange, + (dp1.Object.muRa_PS - dp1.Source.muRa_PS) AS diff_16_muRa_PS, + (dp1.Object.muRa_PS_Sigma - dp1.Source.muRa_PS_Sigma) AS diff_17_muRa_PS_Sigma, + (dp1.Object.muDecl_PS - dp1.Source.muDecl_PS) AS diff_18_muDecl_PS, + (dp1.Object.muDecl_PS_Sigma - dp1.Source.muDecl_PS_Sigma) AS diff_19_muDecl_PS_Sigma, + (dp1.Object.muRaDecl_PS_Cov - dp1.Source.muRaDecl_PS_Cov) AS diff_20_muRaDecl_PS_Cov, + (dp1.Object.parallax_PS - dp1.Source.parallax_PS) AS diff_21_parallax_PS, + (dp1.Object.parallax_PS_Sigma - dp1.Source.parallax_PS_Sigma) AS diff_22_parallax_PS_Sigma, + (dp1.Object.canonicalFilterId - dp1.Source.canonicalFilterId) AS diff_23_canonicalFilterId, + (dp1.Object.extendedness - dp1.Source.extendedness) AS diff_24_extendedness, + (dp1.Object.varProb - dp1.Source.varProb) AS diff_25_varProb, + (dp1.Object.earliestObsTime - dp1.Source.earliestObsTime) AS diff_26_earliestObsTime, + (dp1.Object.latestObsTime - dp1.Source.latestObsTime) AS diff_27_latestObsTime, + (dp1.Object.meanObsTime - dp1.Source.meanObsTime) AS diff_28_meanObsTime, + (dp1.Object.flags - dp1.Source.flags) AS diff_29_flags, + (dp1.Object.uNumObs - dp1.Source.uNumObs) AS diff_30_uNumObs, + (dp1.Object.uExtendedness - dp1.Source.uExtendedness) AS diff_31_uExtendedness, + (dp1.Object.uVarProb - dp1.Source.uVarProb) AS diff_32_uVarProb, + (dp1.Object.uRaOffset_PS - dp1.Source.uRaOffset_PS) AS diff_33_uRaOffset_PS, + (dp1.Object.uRaOffset_PS_Sigma - dp1.Source.uRaOffset_PS_Sigma) AS diff_34_uRaOffset_PS_Sigma, + (dp1.Object.uDeclOffset_PS - dp1.Source.uDeclOffset_PS) AS diff_35_uDeclOffset_PS, + (dp1.Object.uDeclOffset_PS_Sigma - dp1.Source.uDeclOffset_PS_Sigma) AS diff_36_uDeclOffset_PS_Sigma, + (dp1.Object.uRaDeclOffset_PS_Cov - dp1.Source.uRaDeclOffset_PS_Cov) AS diff_37_uRaDeclOffset_PS_Cov, + (dp1.Object.uRaOffset_SG - dp1.Source.uRaOffset_SG) AS diff_38_uRaOffset_SG, + (dp1.Object.uRaOffset_SG_Sigma - dp1.Source.uRaOffset_SG_Sigma) AS diff_39_uRaOffset_SG_Sigma, + (dp1.Object.uDeclOffset_SG - dp1.Source.uDeclOffset_SG) AS diff_40_uDeclOffset_SG, + (dp1.Object.uDeclOffset_SG_Sigma - dp1.Source.uDeclOffset_SG_Sigma) AS diff_41_uDeclOffset_SG_Sigma, + (dp1.Object.uRaDeclOffset_SG_Cov - dp1.Source.uRaDeclOffset_SG_Cov) AS diff_42_uRaDeclOffset_SG_Cov, + (dp1.Object.uLnL_PS - dp1.Source.uLnL_PS) AS diff_43_uLnL_PS, + (dp1.Object.uLnL_SG - dp1.Source.uLnL_SG) AS diff_44_uLnL_SG, + (dp1.Object.uFlux_PS - dp1.Source.uFlux_PS) AS diff_45_uFlux_PS, + (dp1.Object.uFlux_PS_Sigma - dp1.Source.uFlux_PS_Sigma) AS diff_46_uFlux_PS_Sigma, + (dp1.Object.uFlux_ESG - dp1.Source.uFlux_ESG) AS diff_47_uFlux_ESG, + (dp1.Object.uFlux_ESG_Sigma - dp1.Source.uFlux_ESG_Sigma) AS diff_48_uFlux_ESG_Sigma, + (dp1.Object.uFlux_Gaussian - dp1.Source.uFlux_Gaussian) AS diff_49_uFlux_Gaussian, + (dp1.Object.uFlux_Gaussian_Sigma - dp1.Source.uFlux_Gaussian_Sigma) AS diff_50_uFlux_Gaussian_Sigma, + (dp1.Object.uTimescale - dp1.Source.uTimescale) AS diff_51_uTimescale, + (dp1.Object.uEarliestObsTime - dp1.Source.uEarliestObsTime) AS diff_52_uEarliestObsTime, + (dp1.Object.uLatestObsTime - dp1.Source.uLatestObsTime) AS diff_53_uLatestObsTime, + (dp1.Object.uSersicN_SG - dp1.Source.uSersicN_SG) AS diff_54_uSersicN_SG, + (dp1.Object.uSersicN_SG_Sigma - dp1.Source.uSersicN_SG_Sigma) AS diff_55_uSersicN_SG_Sigma, + (dp1.Object.uE1_SG - dp1.Source.uE1_SG) AS diff_56_uE1_SG, + (dp1.Object.uE1_SG_Sigma - dp1.Source.uE1_SG_Sigma) AS diff_57_uE1_SG_Sigma, + (dp1.Object.uE2_SG - dp1.Source.uE2_SG) AS diff_58_uE2_SG, + (dp1.Object.uE2_SG_Sigma - dp1.Source.uE2_SG_Sigma) AS diff_59_uE2_SG_Sigma, + (dp1.Object.uRadius_SG - dp1.Source.uRadius_SG) AS diff_60_uRadius_SG, + (dp1.Object.uRadius_SG_Sigma - dp1.Source.uRadius_SG_Sigma) AS diff_61_uRadius_SG_Sigma, + (dp1.Object.uFlags - dp1.Source.uFlags) AS diff_62_uFlags, + (dp1.Object.gNumObs - dp1.Source.gNumObs) AS diff_63_gNumObs, + (dp1.Object.gExtendedness - dp1.Source.gExtendedness) AS diff_64_gExtendedness, + (dp1.Object.gVarProb - dp1.Source.gVarProb) AS diff_65_gVarProb, + (dp1.Object.gRaOffset_PS - dp1.Source.gRaOffset_PS) AS diff_66_gRaOffset_PS, + (dp1.Object.gRaOffset_PS_Sigma - dp1.Source.gRaOffset_PS_Sigma) AS diff_67_gRaOffset_PS_Sigma, + (dp1.Object.gDeclOffset_PS - dp1.Source.gDeclOffset_PS) AS diff_68_gDeclOffset_PS, + (dp1.Object.gDeclOffset_PS_Sigma - dp1.Source.gDeclOffset_PS_Sigma) AS diff_69_gDeclOffset_PS_Sigma, + (dp1.Object.gRaDeclOffset_PS_Cov - dp1.Source.gRaDeclOffset_PS_Cov) AS diff_70_gRaDeclOffset_PS_Cov, + (dp1.Object.gRaOffset_SG - dp1.Source.gRaOffset_SG) AS diff_71_gRaOffset_SG, + (dp1.Object.gRaOffset_SG_Sigma - dp1.Source.gRaOffset_SG_Sigma) AS diff_72_gRaOffset_SG_Sigma, + (dp1.Object.gDeclOffset_SG - dp1.Source.gDeclOffset_SG) AS diff_73_gDeclOffset_SG, + (dp1.Object.gDeclOffset_SG_Sigma - dp1.Source.gDeclOffset_SG_Sigma) AS diff_74_gDeclOffset_SG_Sigma, + (dp1.Object.gRaDeclOffset_SG_Cov - dp1.Source.gRaDeclOffset_SG_Cov) AS diff_75_gRaDeclOffset_SG_Cov, + (dp1.Object.gLnL_PS - dp1.Source.gLnL_PS) AS diff_76_gLnL_PS, + (dp1.Object.gLnL_SG - dp1.Source.gLnL_SG) AS diff_77_gLnL_SG, + (dp1.Object.gFlux_PS - dp1.Source.gFlux_PS) AS diff_78_gFlux_PS, + (dp1.Object.gFlux_PS_Sigma - dp1.Source.gFlux_PS_Sigma) AS diff_79_gFlux_PS_Sigma, + (dp1.Object.gFlux_ESG - dp1.Source.gFlux_ESG) AS diff_80_gFlux_ESG, + (dp1.Object.gFlux_ESG_Sigma - dp1.Source.gFlux_ESG_Sigma) AS diff_81_gFlux_ESG_Sigma, + (dp1.Object.gFlux_Gaussian - dp1.Source.gFlux_Gaussian) AS diff_82_gFlux_Gaussian, + (dp1.Object.gFlux_Gaussian_Sigma - dp1.Source.gFlux_Gaussian_Sigma) AS diff_83_gFlux_Gaussian_Sigma, + (dp1.Object.gTimescale - dp1.Source.gTimescale) AS diff_84_gTimescale, + (dp1.Object.gEarliestObsTime - dp1.Source.gEarliestObsTime) AS diff_85_gEarliestObsTime, + (dp1.Object.gLatestObsTime - dp1.Source.gLatestObsTime) AS diff_86_gLatestObsTime, + (dp1.Object.gSersicN_SG - dp1.Source.gSersicN_SG) AS diff_87_gSersicN_SG, + (dp1.Object.gSersicN_SG_Sigma - dp1.Source.gSersicN_SG_Sigma) AS diff_88_gSersicN_SG_Sigma, + (dp1.Object.gE1_SG - dp1.Source.gE1_SG) AS diff_89_gE1_SG, + (dp1.Object.gE1_SG_Sigma - dp1.Source.gE1_SG_Sigma) AS diff_90_gE1_SG_Sigma, + (dp1.Object.gE2_SG - dp1.Source.gE2_SG) AS diff_91_gE2_SG, + (dp1.Object.gE2_SG_Sigma - dp1.Source.gE2_SG_Sigma) AS diff_92_gE2_SG_Sigma, + (dp1.Object.gRadius_SG - dp1.Source.gRadius_SG) AS diff_93_gRadius_SG, + (dp1.Object.gRadius_SG_Sigma - dp1.Source.gRadius_SG_Sigma) AS diff_94_gRadius_SG_Sigma, + (dp1.Object.gFlags - dp1.Source.gFlags) AS diff_95_gFlags, + (dp1.Object.rNumObs - dp1.Source.rNumObs) AS diff_96_rNumObs, + (dp1.Object.rExtendedness - dp1.Source.rExtendedness) AS diff_97_rExtendedness, + (dp1.Object.rVarProb - dp1.Source.rVarProb) AS diff_98_rVarProb, + (dp1.Object.rRaOffset_PS - dp1.Source.rRaOffset_PS) AS diff_99_rRaOffset_PS, + (dp1.Object.rRaOffset_PS_Sigma - dp1.Source.rRaOffset_PS_Sigma) AS diff_100_rRaOffset_PS_Sigma, + (dp1.Object.rDeclOffset_PS - dp1.Source.rDeclOffset_PS) AS diff_101_rDeclOffset_PS, + (dp1.Object.rDeclOffset_PS_Sigma - dp1.Source.rDeclOffset_PS_Sigma) AS diff_102_rDeclOffset_PS_Sigma, + (dp1.Object.rRaDeclOffset_PS_Cov - dp1.Source.rRaDeclOffset_PS_Cov) AS diff_103_rRaDeclOffset_PS_Cov, + (dp1.Object.rRaOffset_SG - dp1.Source.rRaOffset_SG) AS diff_104_rRaOffset_SG, + (dp1.Object.rRaOffset_SG_Sigma - dp1.Source.rRaOffset_SG_Sigma) AS diff_105_rRaOffset_SG_Sigma, + (dp1.Object.rDeclOffset_SG - dp1.Source.rDeclOffset_SG) AS diff_106_rDeclOffset_SG, + (dp1.Object.rDeclOffset_SG_Sigma - dp1.Source.rDeclOffset_SG_Sigma) AS diff_107_rDeclOffset_SG_Sigma, + (dp1.Object.rRaDeclOffset_SG_Cov - dp1.Source.rRaDeclOffset_SG_Cov) AS diff_108_rRaDeclOffset_SG_Cov, + (dp1.Object.rLnL_PS - dp1.Source.rLnL_PS) AS diff_109_rLnL_PS, + (dp1.Object.rLnL_SG - dp1.Source.rLnL_SG) AS diff_110_rLnL_SG, + (dp1.Object.rFlux_PS - dp1.Source.rFlux_PS) AS diff_111_rFlux_PS, + (dp1.Object.rFlux_PS_Sigma - dp1.Source.rFlux_PS_Sigma) AS diff_112_rFlux_PS_Sigma, + (dp1.Object.rFlux_ESG - dp1.Source.rFlux_ESG) AS diff_113_rFlux_ESG, + (dp1.Object.rFlux_ESG_Sigma - dp1.Source.rFlux_ESG_Sigma) AS diff_114_rFlux_ESG_Sigma, + (dp1.Object.rFlux_Gaussian - dp1.Source.rFlux_Gaussian) AS diff_115_rFlux_Gaussian, + (dp1.Object.rFlux_Gaussian_Sigma - dp1.Source.rFlux_Gaussian_Sigma) AS diff_116_rFlux_Gaussian_Sigma, + (dp1.Object.rTimescale - dp1.Source.rTimescale) AS diff_117_rTimescale, + (dp1.Object.rEarliestObsTime - dp1.Source.rEarliestObsTime) AS diff_118_rEarliestObsTime, + (dp1.Object.rLatestObsTime - dp1.Source.rLatestObsTime) AS diff_119_rLatestObsTime, + (dp1.Object.rSersicN_SG - dp1.Source.rSersicN_SG) AS diff_120_rSersicN_SG, + (dp1.Object.rSersicN_SG_Sigma - dp1.Source.rSersicN_SG_Sigma) AS diff_121_rSersicN_SG_Sigma, + (dp1.Object.rE1_SG - dp1.Source.rE1_SG) AS diff_122_rE1_SG, + (dp1.Object.rE1_SG_Sigma - dp1.Source.rE1_SG_Sigma) AS diff_123_rE1_SG_Sigma, + (dp1.Object.rE2_SG - dp1.Source.rE2_SG) AS diff_124_rE2_SG, + (dp1.Object.rE2_SG_Sigma - dp1.Source.rE2_SG_Sigma) AS diff_125_rE2_SG_Sigma, + (dp1.Object.rRadius_SG - dp1.Source.rRadius_SG) AS diff_126_rRadius_SG, + (dp1.Object.rRadius_SG_Sigma - dp1.Source.rRadius_SG_Sigma) AS diff_127_rRadius_SG_Sigma, + (dp1.Object.rFlags - dp1.Source.rFlags) AS diff_128_rFlags, + (dp1.Object.iNumObs - dp1.Source.iNumObs) AS diff_129_iNumObs, + (dp1.Object.iExtendedness - dp1.Source.iExtendedness) AS diff_130_iExtendedness, + (dp1.Object.iVarProb - dp1.Source.iVarProb) AS diff_131_iVarProb, + (dp1.Object.iRaOffset_PS - dp1.Source.iRaOffset_PS) AS diff_132_iRaOffset_PS, + (dp1.Object.iRaOffset_PS_Sigma - dp1.Source.iRaOffset_PS_Sigma) AS diff_133_iRaOffset_PS_Sigma, + (dp1.Object.iDeclOffset_PS - dp1.Source.iDeclOffset_PS) AS diff_134_iDeclOffset_PS, + (dp1.Object.iDeclOffset_PS_Sigma - dp1.Source.iDeclOffset_PS_Sigma) AS diff_135_iDeclOffset_PS_Sigma, + (dp1.Object.iRaDeclOffset_PS_Cov - dp1.Source.iRaDeclOffset_PS_Cov) AS diff_136_iRaDeclOffset_PS_Cov, + (dp1.Object.iRaOffset_SG - dp1.Source.iRaOffset_SG) AS diff_137_iRaOffset_SG, + (dp1.Object.iRaOffset_SG_Sigma - dp1.Source.iRaOffset_SG_Sigma) AS diff_138_iRaOffset_SG_Sigma, + (dp1.Object.iDeclOffset_SG - dp1.Source.iDeclOffset_SG) AS diff_139_iDeclOffset_SG +FROM dp1.Object +JOIN dp1.Source ON dp1.Object.objectId = dp1.Source.objectId +WHERE dp1.Object.objectId BETWEEN 10 AND 200000 + AND dp1.Source.flags >= 0 + AND dp1.Object.ra_PS BETWEEN 0 AND 360 + AND dp1.Source.ra_PS BETWEEN 0 AND 360 +ORDER BY dp1.Object.objectId diff --git a/src/ccontrol/testdata/parser-corpus/q09_q3_expression_dense.sql b/src/ccontrol/testdata/parser-corpus/q09_q3_expression_dense.sql new file mode 100644 index 0000000000..25df28246f --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q09_q3_expression_dense.sql @@ -0,0 +1,265 @@ +SELECT + ((dp1.Object.coord_dec - dp1.Object.deblend_isolatedParent) * 1) AS delta_0_coord_dec, + ((dp1.Object.coord_decErr - dp1.Object.deblend_iterations) * 2) AS delta_1_coord_decErr, + ((dp1.Object.coord_ra - dp1.Object.deblend_logL) * 3) AS delta_2_coord_ra, + ((dp1.Object.coord_ra_dec_Cov - dp1.Object.deblend_masked) * 4) AS delta_3_coord_ra_dec_Cov, + ((dp1.Object.coord_raErr - dp1.Object.deblend_nChild) * 5) AS delta_4_coord_raErr, + ((dp1.Object.deblend_failed - dp1.Object.deblend_nPeaks) * 6) AS delta_5_deblend_failed, + ((dp1.Object.deblend_incompleteData - dp1.Object.deblend_parentTooBig) * 7) AS delta_6_deblend_incompleteData, + ((dp1.Object.deblend_isolatedParent - dp1.Object.deblend_peak_center_x) * 8) AS delta_7_deblend_isolatedParent, + ((dp1.Object.deblend_iterations - dp1.Object.deblend_peak_center_y) * 9) AS delta_8_deblend_iterations, + ((dp1.Object.deblend_logL - dp1.Object.deblend_skipped) * 1) AS delta_9_deblend_logL, + ((dp1.Object.deblend_masked - dp1.Object.deblend_tooManyPeaks) * 2) AS delta_10_deblend_masked, + ((dp1.Object.deblend_nChild - dp1.Object.detect_fromBlend) * 3) AS delta_11_deblend_nChild, + ((dp1.Object.deblend_nPeaks - dp1.Object.detect_isDeblendedModelSource) * 4) AS delta_12_deblend_nPeaks, + ((dp1.Object.deblend_parentTooBig - dp1.Object.detect_isIsolated) * 5) AS delta_13_deblend_parentTooBig, + ((dp1.Object.deblend_peak_center_x - dp1.Object.ebv) * 6) AS delta_14_deblend_peak_center_x, + ((dp1.Object.deblend_peak_center_y - dp1.Object.footprintArea) * 7) AS delta_15_deblend_peak_center_y, + ((dp1.Object.deblend_skipped - dp1.Object.g_ap03Flux) * 8) AS delta_16_deblend_skipped, + ((dp1.Object.deblend_tooManyPeaks - dp1.Object.g_ap03Flux_flag) * 9) AS delta_17_deblend_tooManyPeaks, + ((dp1.Object.detect_fromBlend - dp1.Object.g_ap03FluxErr) * 1) AS delta_18_detect_fromBlend, + ((dp1.Object.detect_isDeblendedModelSource - dp1.Object.g_ap06Flux) * 2) AS delta_19_detect_isDeblendedModelSource, + ((dp1.Object.detect_isIsolated - dp1.Object.g_ap06Flux_flag) * 3) AS delta_20_detect_isIsolated, + ((dp1.Object.ebv - dp1.Object.g_ap06FluxErr) * 4) AS delta_21_ebv, + ((dp1.Object.footprintArea - dp1.Object.g_ap09Flux) * 5) AS delta_22_footprintArea, + ((dp1.Object.g_ap03Flux - dp1.Object.g_ap09Flux_flag) * 6) AS delta_23_g_ap03Flux, + ((dp1.Object.g_ap03Flux_flag - dp1.Object.g_ap09FluxErr) * 7) AS delta_24_g_ap03Flux_flag, + ((dp1.Object.g_ap03FluxErr - dp1.Object.g_ap12Flux) * 8) AS delta_25_g_ap03FluxErr, + ((dp1.Object.g_ap06Flux - dp1.Object.g_ap12Flux_flag) * 9) AS delta_26_g_ap06Flux, + ((dp1.Object.g_ap06Flux_flag - dp1.Object.g_ap12FluxErr) * 1) AS delta_27_g_ap06Flux_flag, + ((dp1.Object.g_ap06FluxErr - dp1.Object.g_ap17Flux) * 2) AS delta_28_g_ap06FluxErr, + ((dp1.Object.g_ap09Flux - dp1.Object.g_ap17Flux_flag) * 3) AS delta_29_g_ap09Flux, + ((dp1.Object.g_ap09Flux_flag - dp1.Object.g_ap17FluxErr) * 4) AS delta_30_g_ap09Flux_flag, + ((dp1.Object.g_ap09FluxErr - dp1.Object.g_ap25Flux) * 5) AS delta_31_g_ap09FluxErr, + ((dp1.Object.g_ap12Flux - dp1.Object.g_ap25Flux_flag) * 6) AS delta_32_g_ap12Flux, + ((dp1.Object.g_ap12Flux_flag - dp1.Object.g_ap25FluxErr) * 7) AS delta_33_g_ap12Flux_flag, + ((dp1.Object.g_ap12FluxErr - dp1.Object.g_ap35Flux) * 8) AS delta_34_g_ap12FluxErr, + ((dp1.Object.g_ap17Flux - dp1.Object.g_ap35Flux_flag) * 9) AS delta_35_g_ap17Flux, + ((dp1.Object.g_ap17Flux_flag - dp1.Object.g_ap35FluxErr) * 1) AS delta_36_g_ap17Flux_flag, + ((dp1.Object.g_ap17FluxErr - dp1.Object.g_ap50Flux) * 2) AS delta_37_g_ap17FluxErr, + ((dp1.Object.g_ap25Flux - dp1.Object.g_ap50Flux_flag) * 3) AS delta_38_g_ap25Flux, + ((dp1.Object.g_ap25Flux_flag - dp1.Object.g_ap50FluxErr) * 4) AS delta_39_g_ap25Flux_flag, + ((dp1.Object.g_ap25FluxErr - dp1.Object.g_ap70Flux) * 5) AS delta_40_g_ap25FluxErr, + ((dp1.Object.g_ap35Flux - dp1.Object.g_ap70Flux_flag) * 6) AS delta_41_g_ap35Flux, + ((dp1.Object.g_ap35Flux_flag - dp1.Object.g_ap70FluxErr) * 7) AS delta_42_g_ap35Flux_flag, + ((dp1.Object.g_ap35FluxErr - dp1.Object.g_apFlux_flag) * 8) AS delta_43_g_ap35FluxErr, + ((dp1.Object.g_ap50Flux - dp1.Object.g_apFlux_flag_apertureTruncated) * 9) AS delta_44_g_ap50Flux, + ((dp1.Object.g_ap50Flux_flag - dp1.Object.g_apFlux_flag_sincCoeffsTruncated) * 1) AS delta_45_g_ap50Flux_flag, + ((dp1.Object.g_ap50FluxErr - dp1.Object.g_bdChi2) * 2) AS delta_46_g_ap50FluxErr, + ((dp1.Object.g_ap70Flux - dp1.Object.g_bdE1) * 3) AS delta_47_g_ap70Flux, + ((dp1.Object.g_ap70Flux_flag - dp1.Object.g_bdE2) * 4) AS delta_48_g_ap70Flux_flag, + ((dp1.Object.g_ap70FluxErr - dp1.Object.g_bdFluxB) * 5) AS delta_49_g_ap70FluxErr, + ((dp1.Object.g_apFlux_flag - dp1.Object.g_bdFluxBErr) * 6) AS delta_50_g_apFlux_flag, + ((dp1.Object.g_apFlux_flag_apertureTruncated - dp1.Object.g_bdFluxD) * 7) AS delta_51_g_apFlux_flag_apertureTruncated, + ((dp1.Object.g_apFlux_flag_sincCoeffsTruncated - dp1.Object.g_bdFluxDErr) * 8) AS delta_52_g_apFlux_flag_sincCoeffsTruncated, + ((dp1.Object.g_bdChi2 - dp1.Object.g_bdReB) * 9) AS delta_53_g_bdChi2, + ((dp1.Object.g_bdE1 - dp1.Object.g_bdReD) * 1) AS delta_54_g_bdE1, + ((dp1.Object.g_bdE2 - dp1.Object.g_blendedness) * 2) AS delta_55_g_bdE2, + ((dp1.Object.g_bdFluxB - dp1.Object.g_blendedness_flag) * 3) AS delta_56_g_bdFluxB, + ((dp1.Object.g_bdFluxBErr - dp1.Object.g_calib_astrometry_used) * 4) AS delta_57_g_bdFluxBErr, + ((dp1.Object.g_bdFluxD - dp1.Object.g_calib_photometry_reserved) * 5) AS delta_58_g_bdFluxD, + ((dp1.Object.g_bdFluxDErr - dp1.Object.g_calib_photometry_used) * 6) AS delta_59_g_bdFluxDErr, + ((dp1.Object.g_bdReB - dp1.Object.g_calib_psf_candidate) * 7) AS delta_60_g_bdReB, + ((dp1.Object.g_bdReD - dp1.Object.g_calib_psf_reserved) * 8) AS delta_61_g_bdReD, + ((dp1.Object.g_blendedness - dp1.Object.g_calib_psf_used) * 9) AS delta_62_g_blendedness, + ((dp1.Object.g_blendedness_flag - dp1.Object.g_calibFlux) * 1) AS delta_63_g_blendedness_flag, + ((dp1.Object.g_calib_astrometry_used - dp1.Object.g_calibFlux_flag) * 2) AS delta_64_g_calib_astrometry_used, + ((dp1.Object.g_calib_photometry_reserved - dp1.Object.g_calibFlux_flag_apertureTruncated) * 3) AS delta_65_g_calib_photometry_reserved, + ((dp1.Object.g_calib_photometry_used - dp1.Object.g_calibFlux_flag_sincCoeffsTruncated) * 4) AS delta_66_g_calib_photometry_used, + ((dp1.Object.g_calib_psf_candidate - dp1.Object.g_calibFluxErr) * 5) AS delta_67_g_calib_psf_candidate, + ((dp1.Object.g_calib_psf_reserved - dp1.Object.g_centroid_flag) * 6) AS delta_68_g_calib_psf_reserved, + ((dp1.Object.g_calib_psf_used - dp1.Object.g_centroid_x) * 7) AS delta_69_g_calib_psf_used, + ((dp1.Object.g_calibFlux - dp1.Object.g_centroid_xErr) * 8) AS delta_70_g_calibFlux, + ((dp1.Object.g_calibFlux_flag - dp1.Object.g_centroid_y) * 9) AS delta_71_g_calibFlux_flag, + ((dp1.Object.g_calibFlux_flag_apertureTruncated - dp1.Object.g_centroid_yErr) * 1) AS delta_72_g_calibFlux_flag_apertureTruncated, + ((dp1.Object.g_calibFlux_flag_sincCoeffsTruncated - dp1.Object.g_cModel_flag) * 2) AS delta_73_g_calibFlux_flag_sincCoeffsTruncated, + ((dp1.Object.g_calibFluxErr - dp1.Object.g_cModel_flag_apCorr) * 3) AS delta_74_g_calibFluxErr, + ((dp1.Object.g_centroid_flag - dp1.Object.g_cModelFlux) * 4) AS delta_75_g_centroid_flag, + ((dp1.Object.g_centroid_x - dp1.Object.g_cModelFlux_inner) * 5) AS delta_76_g_centroid_x, + ((dp1.Object.g_centroid_xErr - dp1.Object.g_cModelFluxErr) * 6) AS delta_77_g_centroid_xErr, + ((dp1.Object.g_centroid_y - dp1.Object.g_cModelMag) * 7) AS delta_78_g_centroid_y, + ((dp1.Object.g_centroid_yErr - dp1.Object.g_cModelMagErr) * 8) AS delta_79_g_centroid_yErr, + ((dp1.Object.g_cModel_flag - dp1.Object.g_deblend_blendedness) * 9) AS delta_80_g_cModel_flag, + ((dp1.Object.g_cModel_flag_apCorr - dp1.Object.g_deblend_dataCoverage) * 1) AS delta_81_g_cModel_flag_apCorr, + ((dp1.Object.g_cModelFlux - dp1.Object.g_deblend_fluxOverlap) * 2) AS delta_82_g_cModelFlux, + ((dp1.Object.g_cModelFlux_inner - dp1.Object.g_deblend_fluxOverlapFraction) * 3) AS delta_83_g_cModelFlux_inner, + ((dp1.Object.g_cModelFluxErr - dp1.Object.g_deblend_zeroFlux) * 4) AS delta_84_g_cModelFluxErr, + ((dp1.Object.g_cModelMag - dp1.Object.g_dec) * 5) AS delta_85_g_cModelMag, + ((dp1.Object.g_cModelMagErr - dp1.Object.g_decErr) * 6) AS delta_86_g_cModelMagErr, + ((dp1.Object.g_deblend_blendedness - dp1.Object.g_epoch) * 7) AS delta_87_g_deblend_blendedness, + ((dp1.Object.g_deblend_dataCoverage - dp1.Object.g_extendedness) * 8) AS delta_88_g_deblend_dataCoverage, + ((dp1.Object.g_deblend_fluxOverlap - dp1.Object.g_extendedness_flag) * 9) AS delta_89_g_deblend_fluxOverlap, + ((dp1.Object.g_deblend_fluxOverlapFraction - dp1.Object.g_free_cModelFlux) * 1) AS delta_90_g_deblend_fluxOverlapFraction, + ((dp1.Object.g_deblend_zeroFlux - dp1.Object.g_free_cModelFlux_flag) * 2) AS delta_91_g_deblend_zeroFlux, + ((dp1.Object.g_dec - dp1.Object.g_free_cModelFlux_inner) * 3) AS delta_92_g_dec, + ((dp1.Object.g_decErr - dp1.Object.g_free_cModelFluxErr) * 4) AS delta_93_g_decErr, + ((dp1.Object.g_epoch - dp1.Object.g_free_psfFlux) * 5) AS delta_94_g_epoch, + ((dp1.Object.g_extendedness - dp1.Object.g_free_psfFlux_flag) * 6) AS delta_95_g_extendedness, + ((dp1.Object.g_extendedness_flag - dp1.Object.g_free_psfFluxErr) * 7) AS delta_96_g_extendedness_flag, + ((dp1.Object.g_free_cModelFlux - dp1.Object.g_gaap0p7Flux) * 8) AS delta_97_g_free_cModelFlux, + ((dp1.Object.g_free_cModelFlux_flag - dp1.Object.g_gaap0p7Flux_flag_bigPsf) * 9) AS delta_98_g_free_cModelFlux_flag, + ((dp1.Object.g_free_cModelFlux_inner - dp1.Object.g_gaap0p7FluxErr) * 1) AS delta_99_g_free_cModelFlux_inner, + ((dp1.Object.g_free_cModelFluxErr - dp1.Object.g_gaap1p0Flux) * 2) AS delta_100_g_free_cModelFluxErr, + ((dp1.Object.g_free_psfFlux - dp1.Object.g_gaap1p0Flux_flag_bigPsf) * 3) AS delta_101_g_free_psfFlux, + ((dp1.Object.g_free_psfFlux_flag - dp1.Object.g_gaap1p0FluxErr) * 4) AS delta_102_g_free_psfFlux_flag, + ((dp1.Object.g_free_psfFluxErr - dp1.Object.g_gaap1p5Flux) * 5) AS delta_103_g_free_psfFluxErr, + ((dp1.Object.g_gaap0p7Flux - dp1.Object.g_gaap1p5Flux_flag_bigPsf) * 6) AS delta_104_g_gaap0p7Flux, + ((dp1.Object.g_gaap0p7Flux_flag_bigPsf - dp1.Object.g_gaap1p5FluxErr) * 7) AS delta_105_g_gaap0p7Flux_flag_bigPsf, + ((dp1.Object.g_gaap0p7FluxErr - dp1.Object.g_gaap2p5Flux) * 8) AS delta_106_g_gaap0p7FluxErr, + ((dp1.Object.g_gaap1p0Flux - dp1.Object.g_gaap2p5Flux_flag_bigPsf) * 9) AS delta_107_g_gaap1p0Flux, + ((dp1.Object.g_gaap1p0Flux_flag_bigPsf - dp1.Object.g_gaap2p5FluxErr) * 1) AS delta_108_g_gaap1p0Flux_flag_bigPsf, + ((dp1.Object.g_gaap1p0FluxErr - dp1.Object.g_gaap3p0Flux) * 2) AS delta_109_g_gaap1p0FluxErr, + ((dp1.Object.g_gaap1p5Flux - dp1.Object.g_gaap3p0Flux_flag_bigPsf) * 3) AS delta_110_g_gaap1p5Flux, + ((dp1.Object.g_gaap1p5Flux_flag_bigPsf - dp1.Object.g_gaap3p0FluxErr) * 4) AS delta_111_g_gaap1p5Flux_flag_bigPsf, + ((dp1.Object.g_gaap1p5FluxErr - dp1.Object.g_gaapFlux_flag) * 5) AS delta_112_g_gaap1p5FluxErr, + ((dp1.Object.g_gaap2p5Flux - dp1.Object.g_gaapFlux_flag_edge) * 6) AS delta_113_g_gaap2p5Flux, + ((dp1.Object.g_gaap2p5Flux_flag_bigPsf - dp1.Object.g_gaapFlux_flag_gaussianization) * 7) AS delta_114_g_gaap2p5Flux_flag_bigPsf, + ((dp1.Object.g_gaap2p5FluxErr - dp1.Object.g_gaapOptimalFlux) * 8) AS delta_115_g_gaap2p5FluxErr, + ((dp1.Object.g_gaap3p0Flux - dp1.Object.g_gaapOptimalFlux_flag_bigPsf) * 9) AS delta_116_g_gaap3p0Flux, + ((dp1.Object.g_gaap3p0Flux_flag_bigPsf - dp1.Object.g_gaapOptimalFluxErr) * 1) AS delta_117_g_gaap3p0Flux_flag_bigPsf, + ((dp1.Object.g_gaap3p0FluxErr - dp1.Object.g_gaapPsfFlux) * 2) AS delta_118_g_gaap3p0FluxErr, + ((dp1.Object.g_gaapFlux_flag - dp1.Object.g_gaapPsfFluxErr) * 3) AS delta_119_g_gaapFlux_flag, + ((dp1.Object.g_gaapFlux_flag_edge - dp1.Object.g_hsm_moments_03) * 4) AS delta_120_g_gaapFlux_flag_edge, + ((dp1.Object.g_gaapFlux_flag_gaussianization - dp1.Object.g_hsm_moments_04) * 5) AS delta_121_g_gaapFlux_flag_gaussianization, + ((dp1.Object.g_gaapOptimalFlux - dp1.Object.g_hsm_moments_12) * 6) AS delta_122_g_gaapOptimalFlux, + ((dp1.Object.g_gaapOptimalFlux_flag_bigPsf - dp1.Object.g_hsm_moments_13) * 7) AS delta_123_g_gaapOptimalFlux_flag_bigPsf, + ((dp1.Object.g_gaapOptimalFluxErr - dp1.Object.g_hsm_moments_21) * 8) AS delta_124_g_gaapOptimalFluxErr, + ((dp1.Object.g_gaapPsfFlux - dp1.Object.g_hsm_moments_22) * 9) AS delta_125_g_gaapPsfFlux, + ((dp1.Object.g_gaapPsfFluxErr - dp1.Object.g_hsm_moments_30) * 1) AS delta_126_g_gaapPsfFluxErr, + ((dp1.Object.g_hsm_moments_03 - dp1.Object.g_hsm_moments_31) * 2) AS delta_127_g_hsm_moments_03, + ((dp1.Object.g_hsm_moments_04 - dp1.Object.g_hsm_moments_40) * 3) AS delta_128_g_hsm_moments_04, + ((dp1.Object.g_hsm_moments_12 - dp1.Object.g_hsm_moments_flag) * 4) AS delta_129_g_hsm_moments_12, + ((dp1.Object.g_hsm_moments_13 - dp1.Object.g_hsm_momentsPsf_03) * 5) AS delta_130_g_hsm_moments_13, + ((dp1.Object.g_hsm_moments_21 - dp1.Object.g_hsm_momentsPsf_04) * 6) AS delta_131_g_hsm_moments_21, + ((dp1.Object.g_hsm_moments_22 - dp1.Object.g_hsm_momentsPsf_12) * 7) AS delta_132_g_hsm_moments_22, + ((dp1.Object.g_hsm_moments_30 - dp1.Object.g_hsm_momentsPsf_13) * 8) AS delta_133_g_hsm_moments_30, + ((dp1.Object.g_hsm_moments_31 - dp1.Object.g_hsm_momentsPsf_21) * 9) AS delta_134_g_hsm_moments_31, + ((dp1.Object.g_hsm_moments_40 - dp1.Object.g_hsm_momentsPsf_22) * 1) AS delta_135_g_hsm_moments_40, + ((dp1.Object.g_hsm_moments_flag - dp1.Object.g_hsm_momentsPsf_30) * 2) AS delta_136_g_hsm_moments_flag, + ((dp1.Object.g_hsm_momentsPsf_03 - dp1.Object.g_hsm_momentsPsf_31) * 3) AS delta_137_g_hsm_momentsPsf_03, + ((dp1.Object.g_hsm_momentsPsf_04 - dp1.Object.g_hsm_momentsPsf_40) * 4) AS delta_138_g_hsm_momentsPsf_04, + ((dp1.Object.g_hsm_momentsPsf_12 - dp1.Object.g_hsm_momentsPsf_flag) * 5) AS delta_139_g_hsm_momentsPsf_12, + ((dp1.Object.g_hsm_momentsPsf_13 - dp1.Object.g_hsmShapeRegauss_e1) * 6) AS delta_140_g_hsm_momentsPsf_13, + ((dp1.Object.g_hsm_momentsPsf_21 - dp1.Object.g_hsmShapeRegauss_e2) * 7) AS delta_141_g_hsm_momentsPsf_21, + ((dp1.Object.g_hsm_momentsPsf_22 - dp1.Object.g_hsmShapeRegauss_flag) * 8) AS delta_142_g_hsm_momentsPsf_22, + ((dp1.Object.g_hsm_momentsPsf_30 - dp1.Object.g_hsmShapeRegauss_sigma) * 9) AS delta_143_g_hsm_momentsPsf_30, + ((dp1.Object.g_hsm_momentsPsf_31 - dp1.Object.g_i_flag) * 1) AS delta_144_g_hsm_momentsPsf_31, + ((dp1.Object.g_hsm_momentsPsf_40 - dp1.Object.g_iDebiasedPSF_flag) * 2) AS delta_145_g_hsm_momentsPsf_40, + ((dp1.Object.g_hsm_momentsPsf_flag - dp1.Object.g_inputCount) * 3) AS delta_146_g_hsm_momentsPsf_flag, + ((dp1.Object.g_hsmShapeRegauss_e1 - dp1.Object.g_inputCount_flag) * 4) AS delta_147_g_hsmShapeRegauss_e1, + ((dp1.Object.g_hsmShapeRegauss_e2 - dp1.Object.g_inputCount_flag_noInputs) * 5) AS delta_148_g_hsmShapeRegauss_e2, + ((dp1.Object.g_hsmShapeRegauss_flag - dp1.Object.g_invalidPsfFlag) * 6) AS delta_149_g_hsmShapeRegauss_flag, + ((dp1.Object.g_hsmShapeRegauss_sigma - dp1.Object.g_iPSF_flag) * 7) AS delta_150_g_hsmShapeRegauss_sigma, + ((dp1.Object.g_i_flag - dp1.Object.g_iRound_flag) * 8) AS delta_151_g_i_flag, + ((dp1.Object.g_iDebiasedPSF_flag - dp1.Object.g_ixx) * 9) AS delta_152_g_iDebiasedPSF_flag, + ((dp1.Object.g_inputCount - dp1.Object.g_ixxDebiasedPSF) * 1) AS delta_153_g_inputCount, + ((dp1.Object.g_inputCount_flag - dp1.Object.g_ixxPSF) * 2) AS delta_154_g_inputCount_flag, + ((dp1.Object.g_inputCount_flag_noInputs - dp1.Object.g_ixxRound) * 3) AS delta_155_g_inputCount_flag_noInputs, + ((dp1.Object.g_invalidPsfFlag - dp1.Object.g_ixy) * 4) AS delta_156_g_invalidPsfFlag, + ((dp1.Object.g_iPSF_flag - dp1.Object.g_ixyDebiasedPSF) * 5) AS delta_157_g_iPSF_flag, + ((dp1.Object.g_iRound_flag - dp1.Object.g_ixyPSF) * 6) AS delta_158_g_iRound_flag, + ((dp1.Object.g_ixx - dp1.Object.g_ixyRound) * 7) AS delta_159_g_ixx, + ((dp1.Object.g_ixxDebiasedPSF - dp1.Object.g_iyy) * 8) AS delta_160_g_ixxDebiasedPSF, + ((dp1.Object.g_ixxPSF - dp1.Object.g_iyyDebiasedPSF) * 9) AS delta_161_g_ixxPSF, + ((dp1.Object.g_ixxRound - dp1.Object.g_iyyPSF) * 1) AS delta_162_g_ixxRound, + ((dp1.Object.g_ixy - dp1.Object.g_iyyRound) * 2) AS delta_163_g_ixy, + ((dp1.Object.g_ixyDebiasedPSF - dp1.Object.g_kronFlux) * 3) AS delta_164_g_ixyDebiasedPSF, + ((dp1.Object.g_ixyPSF - dp1.Object.g_kronFlux_flag) * 4) AS delta_165_g_ixyPSF, + ((dp1.Object.g_ixyRound - dp1.Object.g_kronFlux_flag_bad_radius) * 5) AS delta_166_g_ixyRound, + ((dp1.Object.g_iyy - dp1.Object.g_kronFlux_flag_bad_shape) * 6) AS delta_167_g_iyy, + ((dp1.Object.g_iyyDebiasedPSF - dp1.Object.g_kronFlux_flag_bad_shape_no_psf) * 7) AS delta_168_g_iyyDebiasedPSF, + ((dp1.Object.g_iyyPSF - dp1.Object.g_kronFlux_flag_edge) * 8) AS delta_169_g_iyyPSF, + ((dp1.Object.g_iyyRound - dp1.Object.g_kronFlux_flag_no_fallback_radius) * 9) AS delta_170_g_iyyRound, + ((dp1.Object.g_kronFlux - dp1.Object.g_kronFlux_flag_no_minimum_radius) * 1) AS delta_171_g_kronFlux, + ((dp1.Object.g_kronFlux_flag - dp1.Object.g_kronFlux_flag_small_radius) * 2) AS delta_172_g_kronFlux_flag, + ((dp1.Object.g_kronFlux_flag_bad_radius - dp1.Object.g_kronFlux_flag_used_minimum_radius) * 3) AS delta_173_g_kronFlux_flag_bad_radius, + ((dp1.Object.g_kronFlux_flag_bad_shape - dp1.Object.g_kronFlux_flag_used_psf_radius) * 4) AS delta_174_g_kronFlux_flag_bad_shape, + ((dp1.Object.g_kronFlux_flag_bad_shape_no_psf - dp1.Object.g_kronFluxErr) * 5) AS delta_175_g_kronFlux_flag_bad_shape_no_psf, + ((dp1.Object.g_kronFlux_flag_edge - dp1.Object.g_kronRad) * 6) AS delta_176_g_kronFlux_flag_edge, + ((dp1.Object.g_kronFlux_flag_no_fallback_radius - dp1.Object.g_pixelFlags_bad) * 7) AS delta_177_g_kronFlux_flag_no_fallback_radius, + ((dp1.Object.g_kronFlux_flag_no_minimum_radius - dp1.Object.g_pixelFlags_clipped) * 8) AS delta_178_g_kronFlux_flag_no_minimum_radius, + ((dp1.Object.g_kronFlux_flag_small_radius - dp1.Object.g_pixelFlags_clippedCenter) * 9) AS delta_179_g_kronFlux_flag_small_radius, + ((dp1.Object.g_kronFlux_flag_used_minimum_radius - dp1.Object.g_pixelFlags_cr) * 1) AS delta_180_g_kronFlux_flag_used_minimum_radius, + ((dp1.Object.g_kronFlux_flag_used_psf_radius - dp1.Object.g_pixelFlags_crCenter) * 2) AS delta_181_g_kronFlux_flag_used_psf_radius, + ((dp1.Object.g_kronFluxErr - dp1.Object.g_pixelFlags_edge) * 3) AS delta_182_g_kronFluxErr, + ((dp1.Object.g_kronRad - dp1.Object.g_pixelFlags_inexact_psf) * 4) AS delta_183_g_kronRad, + ((dp1.Object.g_pixelFlags_bad - dp1.Object.g_pixelFlags_inexact_psfCenter) * 5) AS delta_184_g_pixelFlags_bad, + ((dp1.Object.g_pixelFlags_clipped - dp1.Object.g_pixelFlags_interpolated) * 6) AS delta_185_g_pixelFlags_clipped, + ((dp1.Object.g_pixelFlags_clippedCenter - dp1.Object.g_pixelFlags_interpolatedCenter) * 7) AS delta_186_g_pixelFlags_clippedCenter, + ((dp1.Object.g_pixelFlags_cr - dp1.Object.g_pixelFlags_nodata) * 8) AS delta_187_g_pixelFlags_cr, + ((dp1.Object.g_pixelFlags_crCenter - dp1.Object.g_pixelFlags_offimage) * 9) AS delta_188_g_pixelFlags_crCenter, + ((dp1.Object.g_pixelFlags_edge - dp1.Object.g_pixelFlags_saturated) * 1) AS delta_189_g_pixelFlags_edge, + ((dp1.Object.g_pixelFlags_inexact_psf - dp1.Object.g_pixelFlags_saturatedCenter) * 2) AS delta_190_g_pixelFlags_inexact_psf, + ((dp1.Object.g_pixelFlags_inexact_psfCenter - dp1.Object.g_pixelFlags_sensor_edge) * 3) AS delta_191_g_pixelFlags_inexact_psfCenter, + ((dp1.Object.g_pixelFlags_interpolated - dp1.Object.g_pixelFlags_sensor_edgeCenter) * 4) AS delta_192_g_pixelFlags_interpolated, + ((dp1.Object.g_pixelFlags_interpolatedCenter - dp1.Object.g_pixelFlags_suspect) * 5) AS delta_193_g_pixelFlags_interpolatedCenter, + ((dp1.Object.g_pixelFlags_nodata - dp1.Object.g_pixelFlags_suspectCenter) * 6) AS delta_194_g_pixelFlags_nodata, + ((dp1.Object.g_pixelFlags_offimage - dp1.Object.g_psfFlux) * 7) AS delta_195_g_pixelFlags_offimage, + ((dp1.Object.g_pixelFlags_saturated - dp1.Object.g_psfFlux_area) * 8) AS delta_196_g_pixelFlags_saturated, + ((dp1.Object.g_pixelFlags_saturatedCenter - dp1.Object.g_psfFlux_flag) * 9) AS delta_197_g_pixelFlags_saturatedCenter, + ((dp1.Object.g_pixelFlags_sensor_edge - dp1.Object.g_psfFlux_flag_apCorr) * 1) AS delta_198_g_pixelFlags_sensor_edge, + ((dp1.Object.g_pixelFlags_sensor_edgeCenter - dp1.Object.g_psfFlux_flag_edge) * 2) AS delta_199_g_pixelFlags_sensor_edgeCenter, + ((dp1.Object.g_pixelFlags_suspect - dp1.Object.g_psfFlux_flag_noGoodPixels) * 3) AS delta_200_g_pixelFlags_suspect, + ((dp1.Object.g_pixelFlags_suspectCenter - dp1.Object.g_psfFluxErr) * 4) AS delta_201_g_pixelFlags_suspectCenter, + ((dp1.Object.g_psfFlux - dp1.Object.g_psfMag) * 5) AS delta_202_g_psfFlux, + ((dp1.Object.g_psfFlux_area - dp1.Object.g_psfMagErr) * 6) AS delta_203_g_psfFlux_area, + ((dp1.Object.g_psfFlux_flag - dp1.Object.g_psfModel_TwoGaussian_chisq_reduced) * 7) AS delta_204_g_psfFlux_flag, + ((dp1.Object.g_psfFlux_flag_apCorr - dp1.Object.g_psfModel_TwoGaussian_gauss1_fluxfrac) * 8) AS delta_205_g_psfFlux_flag_apCorr, + ((dp1.Object.g_psfFlux_flag_edge - dp1.Object.g_psfModel_TwoGaussian_gauss1_rho) * 9) AS delta_206_g_psfFlux_flag_edge, + ((dp1.Object.g_psfFlux_flag_noGoodPixels - dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_x) * 1) AS delta_207_g_psfFlux_flag_noGoodPixels, + ((dp1.Object.g_psfFluxErr - dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_y) * 2) AS delta_208_g_psfFluxErr, + ((dp1.Object.g_psfMag - dp1.Object.g_psfModel_TwoGaussian_gauss2_rho) * 3) AS delta_209_g_psfMag, + ((dp1.Object.g_psfMagErr - dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_x) * 4) AS delta_210_g_psfMagErr, + ((dp1.Object.g_psfModel_TwoGaussian_chisq_reduced - dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_y) * 5) AS delta_211_g_psfModel_TwoGaussian_chisq_reduced, + ((dp1.Object.g_psfModel_TwoGaussian_gauss1_fluxfrac - dp1.Object.g_psfModel_TwoGaussian_n_iter) * 6) AS delta_212_g_psfModel_TwoGaussian_gauss1_fluxfrac, + ((dp1.Object.g_psfModel_TwoGaussian_gauss1_rho - dp1.Object.g_psfModel_TwoGaussian_no_inputs_flag) * 7) AS delta_213_g_psfModel_TwoGaussian_gauss1_rho, + ((dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_x - dp1.Object.g_psfModel_TwoGaussian_unknown_flag) * 8) AS delta_214_g_psfModel_TwoGaussian_gauss1_sigma_x, + ((dp1.Object.g_psfModel_TwoGaussian_gauss1_sigma_y - dp1.Object.g_ra) * 9) AS delta_215_g_psfModel_TwoGaussian_gauss1_sigma_y, + ((dp1.Object.g_psfModel_TwoGaussian_gauss2_rho - dp1.Object.g_ra_dec_Cov) * 1) AS delta_216_g_psfModel_TwoGaussian_gauss2_rho, + ((dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_x - dp1.Object.g_raErr) * 2) AS delta_217_g_psfModel_TwoGaussian_gauss2_sigma_x, + ((dp1.Object.g_psfModel_TwoGaussian_gauss2_sigma_y - dp1.Object.g_sersicFlux) * 3) AS delta_218_g_psfModel_TwoGaussian_gauss2_sigma_y, + ((dp1.Object.g_psfModel_TwoGaussian_n_iter - dp1.Object.g_sersicFluxErr) * 4) AS delta_219_g_psfModel_TwoGaussian_n_iter, + ((dp1.Object.g_psfModel_TwoGaussian_no_inputs_flag - dp1.Object.g_sizeExtendedness) * 5) AS delta_220_g_psfModel_TwoGaussian_no_inputs_flag, + ((dp1.Object.g_psfModel_TwoGaussian_unknown_flag - dp1.Object.g_sizeExtendedness_flag) * 6) AS delta_221_g_psfModel_TwoGaussian_unknown_flag, + ((dp1.Object.g_ra - dp1.Object.i_ap03Flux) * 7) AS delta_222_g_ra, + ((dp1.Object.g_ra_dec_Cov - dp1.Object.i_ap03Flux_flag) * 8) AS delta_223_g_ra_dec_Cov, + ((dp1.Object.g_raErr - dp1.Object.i_ap03FluxErr) * 9) AS delta_224_g_raErr, + ((dp1.Object.g_sersicFlux - dp1.Object.i_ap06Flux) * 1) AS delta_225_g_sersicFlux, + ((dp1.Object.g_sersicFluxErr - dp1.Object.i_ap06Flux_flag) * 2) AS delta_226_g_sersicFluxErr, + ((dp1.Object.g_sizeExtendedness - dp1.Object.i_ap06FluxErr) * 3) AS delta_227_g_sizeExtendedness, + ((dp1.Object.g_sizeExtendedness_flag - dp1.Object.i_ap09Flux) * 4) AS delta_228_g_sizeExtendedness_flag, + ((dp1.Object.i_ap03Flux - dp1.Object.i_ap09Flux_flag) * 5) AS delta_229_i_ap03Flux, + ((dp1.Object.i_ap03Flux_flag - dp1.Object.i_ap09FluxErr) * 6) AS delta_230_i_ap03Flux_flag, + ((dp1.Object.i_ap03FluxErr - dp1.Object.i_ap12Flux) * 7) AS delta_231_i_ap03FluxErr, + ((dp1.Object.i_ap06Flux - dp1.Object.i_ap12Flux_flag) * 8) AS delta_232_i_ap06Flux, + ((dp1.Object.i_ap06Flux_flag - dp1.Object.i_ap12FluxErr) * 9) AS delta_233_i_ap06Flux_flag, + ((dp1.Object.i_ap06FluxErr - dp1.Object.i_ap17Flux) * 1) AS delta_234_i_ap06FluxErr, + ((dp1.Object.i_ap09Flux - dp1.Object.i_ap17Flux_flag) * 2) AS delta_235_i_ap09Flux, + ((dp1.Object.i_ap09Flux_flag - dp1.Object.i_ap17FluxErr) * 3) AS delta_236_i_ap09Flux_flag, + ((dp1.Object.i_ap09FluxErr - dp1.Object.i_ap25Flux) * 4) AS delta_237_i_ap09FluxErr, + ((dp1.Object.i_ap12Flux - dp1.Object.i_ap25Flux_flag) * 5) AS delta_238_i_ap12Flux, + ((dp1.Object.i_ap12Flux_flag - dp1.Object.i_ap25FluxErr) * 6) AS delta_239_i_ap12Flux_flag, + ((dp1.Object.i_ap12FluxErr - dp1.Object.i_ap35Flux) * 7) AS delta_240_i_ap12FluxErr, + ((dp1.Object.i_ap17Flux - dp1.Object.i_ap35Flux_flag) * 8) AS delta_241_i_ap17Flux, + ((dp1.Object.i_ap17Flux_flag - dp1.Object.i_ap35FluxErr) * 9) AS delta_242_i_ap17Flux_flag, + ((dp1.Object.i_ap17FluxErr - dp1.Object.i_ap50Flux) * 1) AS delta_243_i_ap17FluxErr, + ((dp1.Object.i_ap25Flux - dp1.Object.i_ap50Flux_flag) * 2) AS delta_244_i_ap25Flux, + ((dp1.Object.i_ap25Flux_flag - dp1.Object.i_ap50FluxErr) * 3) AS delta_245_i_ap25Flux_flag, + ((dp1.Object.i_ap25FluxErr - dp1.Object.i_ap70Flux) * 4) AS delta_246_i_ap25FluxErr, + ((dp1.Object.i_ap35Flux - dp1.Object.i_ap70Flux_flag) * 5) AS delta_247_i_ap35Flux, + ((dp1.Object.i_ap35Flux_flag - dp1.Object.i_ap70FluxErr) * 6) AS delta_248_i_ap35Flux_flag, + ((dp1.Object.i_ap35FluxErr - dp1.Object.i_apFlux_flag) * 7) AS delta_249_i_ap35FluxErr, + ((dp1.Object.i_ap50Flux - dp1.Object.i_apFlux_flag_apertureTruncated) * 8) AS delta_250_i_ap50Flux, + ((dp1.Object.i_ap50Flux_flag - dp1.Object.i_apFlux_flag_sincCoeffsTruncated) * 9) AS delta_251_i_ap50Flux_flag, + ((dp1.Object.i_ap50FluxErr - dp1.Object.i_bdChi2) * 1) AS delta_252_i_ap50FluxErr, + ((dp1.Object.i_ap70Flux - dp1.Object.i_bdE1) * 2) AS delta_253_i_ap70Flux, + ((dp1.Object.i_ap70Flux_flag - dp1.Object.i_bdE2) * 3) AS delta_254_i_ap70Flux_flag, + ((dp1.Object.i_ap70FluxErr - dp1.Object.i_bdFluxB) * 4) AS delta_255_i_ap70FluxErr, + ((dp1.Object.i_apFlux_flag - dp1.Object.i_bdFluxBErr) * 5) AS delta_256_i_apFlux_flag, + ((dp1.Object.i_apFlux_flag_apertureTruncated - dp1.Object.i_bdFluxD) * 6) AS delta_257_i_apFlux_flag_apertureTruncated, + ((dp1.Object.i_apFlux_flag_sincCoeffsTruncated - dp1.Object.i_bdFluxDErr) * 7) AS delta_258_i_apFlux_flag_sincCoeffsTruncated, + ((dp1.Object.i_bdChi2 - dp1.Object.i_bdReB) * 8) AS delta_259_i_bdChi2 +FROM dp1.Object +WHERE objectId IN (0, 1, 2, 3, 5, 8, 13, 21) + AND coord_ra_dec_Cov >= 0 + AND g_raErr <= 1000 diff --git a/src/ccontrol/testdata/parser-corpus/q10_having_limit.sql b/src/ccontrol/testdata/parser-corpus/q10_having_limit.sql new file mode 100644 index 0000000000..98f067bee2 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q10_having_limit.sql @@ -0,0 +1,17 @@ +SELECT + Source.objectId, + COUNT(*) AS n_sources, + MAX(Source.raFlux) - MIN(Source.raFlux) AS ra_flux_span, + MAX(Source.declFlux) - MIN(Source.declFlux) AS decl_flux_span, + MAX(Source.taiMidPoint) - MIN(Source.taiMidPoint) AS time_span, + MIN(Source.ra) AS min_ra, + MAX(Source.ra) AS max_ra, + MIN(Source.decl) AS min_decl, + MAX(Source.decl) AS max_decl +FROM Source +WHERE Source.objectId BETWEEN 100000 AND 999999 + AND Source.raFlux > 0 + AND Source.declFlux > 0 +GROUP BY Source.objectId +ORDER BY Source.objectId +LIMIT 100 diff --git a/src/ccontrol/testdata/parser-corpus/q11_join_using_time_window.sql b/src/ccontrol/testdata/parser-corpus/q11_join_using_time_window.sql new file mode 100644 index 0000000000..9f04d5f2b7 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q11_join_using_time_window.sql @@ -0,0 +1,22 @@ +SELECT + s.objectId, + s.ra, + s.decl, + s.taiMidPoint, + s.raFlux, + s.declFlux, + o.ra_PS, + o.decl_PS, + o.latestObsTime, + o.earliestObsTime, + o.latestObsTime - o.earliestObsTime AS object_time_span, + s.taiMidPoint - o.earliestObsTime AS source_offset_start, + o.latestObsTime - s.taiMidPoint AS source_offset_end +FROM Object o +JOIN Source s USING (objectId) +WHERE o.objectId BETWEEN 100000 AND 999999 + AND o.latestObsTime BETWEEN s.taiMidPoint - 300 AND s.taiMidPoint + 300 + AND s.ra BETWEEN o.ra_PS - 0.01 AND o.ra_PS + 0.01 + AND s.decl BETWEEN o.decl_PS - 0.01 AND o.decl_PS + 0.01 +ORDER BY s.objectId, s.taiMidPoint +LIMIT 250 diff --git a/src/ccontrol/testdata/parser-corpus/q12_spatial_operator_mix.sql b/src/ccontrol/testdata/parser-corpus/q12_spatial_operator_mix.sql new file mode 100644 index 0000000000..d6f203cf31 --- /dev/null +++ b/src/ccontrol/testdata/parser-corpus/q12_spatial_operator_mix.sql @@ -0,0 +1,19 @@ +SELECT + Object.objectId, + Object.ra_PS, + Object.decl_PS, + Object.ra_PS % 3 AS ra_bucket, + Object.decl_PS % 5 AS decl_bucket, + Object.ra_PS + Object.decl_PS AS coord_sum, + Object.ra_PS - Object.decl_PS AS coord_delta, + Object.ra_PS * Object.decl_PS AS coord_product +FROM Object +WHERE scisql_s2PtInBox(Object.ra_PS, Object.decl_PS, 1, 3, 2, 4) + AND Object.ra_PS % 3 > 1.5 + AND Object.decl_PS % 5 < 4.5 + AND Object.objectId IN (1, 3, 5, 7, 9, 11, 13) + AND (Object.ra_PS < 120 OR Object.ra_PS > 140) + AND Object.decl_PS >= 0 + AND Object.decl_PS <= 30 +ORDER BY Object.ra_PS, Object.decl_PS +LIMIT 500 diff --git a/src/qproc/QuerySession.cc b/src/qproc/QuerySession.cc index da02e650c9..84f9580fb6 100644 --- a/src/qproc/QuerySession.cc +++ b/src/qproc/QuerySession.cc @@ -112,16 +112,14 @@ namespace lsst::qserv::qproc { //////////////////////////////////////////////////////////////////////// std::shared_ptr QuerySession::parseQuery(std::string const& statement) { - ccontrol::ParseRunner::Ptr parser; try { - parser = std::make_shared(statement); + return ccontrol::ParseRunner::makeSelectStmt(statement); } catch (parser::ParseException const& e) { LOGS(_log, LOG_LVL_DEBUG, "parse exception: " << e.what()); _original = statement; _error = std::string("ParseException:") + e.what(); return nullptr; } - return parser->getSelectStmt(); } // Analyze SQL query issued by user diff --git a/src/qproc/testQueryAnaAggregation.cc b/src/qproc/testQueryAnaAggregation.cc index a2b3f3ee78..35a70cd85b 100644 --- a/src/qproc/testQueryAnaAggregation.cc +++ b/src/qproc/testQueryAnaAggregation.cc @@ -44,6 +44,7 @@ // Qserv headers #include "mysql/MySqlConfig.h" +#include "tests/ParserExpected.h" #include "qproc/QuerySession.h" #include "query/QueryContext.h" #include "query/SelectStmt.h" @@ -72,7 +73,7 @@ BOOST_AUTO_TEST_CASE(Aggregate) { "COUNT(`LSST.Object`.`bMagF2`) AS `QS2_COUNT`," "SUM(`LSST.Object`.`bMagF2`) AS `QS3_SUM` " "FROM `LSST`.`Object_100` AS `LSST.Object` " - "WHERE `LSST.Object`.`bMagF`>20.0 " + "WHERE `LSST.Object`.`bMagF`>" PARSER_EXPECTED("20", "20.0") " " "GROUP BY `chunkId`"; qsTest.sqlConfig = SqlConfig(SqlConfig::MockDbTableColumns( {{"LSST", {{"Object", {"pm_declErr", "chunkId", "bMagF2", "bMagF"}}}}})); @@ -99,7 +100,7 @@ BOOST_AUTO_TEST_CASE(Avg) { "COUNT(`LSST.Object`.`bMagF2`) AS `QS1_COUNT`," "SUM(`LSST.Object`.`bMagF2`) AS `QS2_SUM` " "FROM `LSST`.`Object_100` AS `LSST.Object` " - "WHERE `LSST.Object`.`bMagF`>20.0"; + "WHERE `LSST.Object`.`bMagF`>" PARSER_EXPECTED("20", "20.0"); qsTest.sqlConfig = SqlConfig( SqlConfig::MockDbTableColumns({{"LSST", {{"Object", {"chunkId", "bMagF2", "bMagF"}}}}})); std::shared_ptr qs = queryAnaHelper.buildQuerySession(qsTest, stmt); diff --git a/src/qproc/testQueryAnaGeneral.cc b/src/qproc/testQueryAnaGeneral.cc index 5cd6711350..0a01b1dbc6 100644 --- a/src/qproc/testQueryAnaGeneral.cc +++ b/src/qproc/testQueryAnaGeneral.cc @@ -62,6 +62,7 @@ #include "query/SecIdxRestrictor.h" #include "query/SelectStmt.h" #include "sql/SqlConfig.h" +#include "tests/ParserExpected.h" #include "tests/QueryAnaFixture.h" using lsst::qserv::StringPair; @@ -87,7 +88,7 @@ char const* const NOT_EVALUABLE_MSG = "AnalysisError:Query involves " "partitioned table joins that Qserv does not know how to evaluate " "using only partition-local data"; -} +} // namespace //////////////////////////////////////////////////////////////////////// // CppParser basic tests //////////////////////////////////////////////////////////////////////// @@ -96,7 +97,8 @@ BOOST_FIXTURE_TEST_SUITE(CppParser, QueryAnaFixture) BOOST_AUTO_TEST_CASE(TrivialSub) { std::string stmt = "SELECT * FROM Object WHERE someField > 5.0;"; std::string expected = - "SELECT * FROM `LSST`.`Object_100` AS `LSST.Object` WHERE `LSST.Object`.`someField`>5.0"; + "SELECT * FROM `LSST`.`Object_100` AS `LSST.Object` WHERE " + "`LSST.Object`.`someField`>" PARSER_EXPECTED("5", "5.0"); BOOST_CHECK(qsTest.css); qsTest.sqlConfig = SqlConfig(SqlConfig::MockDbTableColumns({{"LSST", {{"Object", {"someField"}}}}})); std::shared_ptr qs = queryAnaHelper.buildQuerySession(qsTest, stmt); @@ -258,7 +260,7 @@ BOOST_AUTO_TEST_CASE(Triple) { std::string expected = "SELECT * FROM `Subchunks_LSST_100`.`Object_100_%S\007S%` AS " "`o1`,`Subchunks_LSST_100`.`Object_100_%S\007S%` AS `o2`,`LSST`.`Source_100` AS `LSST.Source` " - "WHERE `o1`.`id`!=`o2`.`id` AND " + "WHERE `o1`.`id`" PARSER_EXPECTED("<>", "!=") "`o2`.`id` AND " "0.024>scisql_angSep(`o1`.`ra_Test`,`o1`.`decl_Test`,`o2`.`ra_Test`,`o2`.`decl_Test`) AND " "`LSST.Source`.`objectIdSourceTest`=`o2`.`objectIdObjTest`"; @@ -309,7 +311,11 @@ std::ostream& operator<<(std::ostream& os, ScisqlRestrictorTestCaseData const& i return os; } +#ifdef QSERV_USE_HYRISE_SQL_PARSER +std::vector const polyArgs = {"1", "3", "1.5", "2", "2", "4"}; +#else std::vector const polyArgs = {"1.0", "3.0", "1.5", "2.0", "2.0", "4.0"}; +#endif static const std::vector SCISQL_RESTRICTOR_TEST_CASE_DATA = { ScisqlRestrictorTestCaseData("select * from LSST.Object o, Source s " @@ -341,9 +347,13 @@ static const std::vector SCISQL_RESTRICTOR_TEST_CA "select * from LSST.Object o, Source s " "WHERE scisql_s2PtInCPoly(ra_Test, decl_Test, 1.0, 3.0, 1.5, 2.0, 2.0, 4.0) = 1 " "AND o.objectIdObjTest = s.objectIdSourceTest;", - "SELECT * FROM `LSST`.`Object_100` AS `o`,`LSST`.`Source_100` AS `s` " - "WHERE scisql_s2PtInCPoly(`o`.`ra_Test`,`o`.`decl_Test`,1.0,3.0,1.5,2.0,2.0,4.0)=1 " - "AND `o`.`objectIdObjTest`=`s`.`objectIdSourceTest`", + PARSER_EXPECTED( + "SELECT * FROM `LSST`.`Object_100` AS `o`,`LSST`.`Source_100` AS `s` " + "WHERE scisql_s2PtInCPoly(`o`.`ra_Test`,`o`.`decl_Test`,1,3,1.5,2,2,4)=1 " + "AND `o`.`objectIdObjTest`=`s`.`objectIdSourceTest`", + "SELECT * FROM `LSST`.`Object_100` AS `o`,`LSST`.`Source_100` AS `s` " + "WHERE scisql_s2PtInCPoly(`o`.`ra_Test`,`o`.`decl_Test`,1.0,3.0,1.5,2.0,2.0,4.0)=1 " + "AND `o`.`objectIdObjTest`=`s`.`objectIdSourceTest`"), std::make_shared(polyArgs)), ScisqlRestrictorTestCaseData("select * from LSST.Object o, Source s " @@ -375,7 +385,12 @@ BOOST_DATA_TEST_CASE(ObjectSourceJoin_ScisqlRestrictor, SCISQL_RESTRICTOR_TEST_C BOOST_REQUIRE(context->areaRestrictors); BOOST_CHECK_EQUAL(context->areaRestrictors->size(), 1U); auto restrictorFunc = context->areaRestrictors->front(); - BOOST_CHECK_EQUAL(*restrictorFunc, *queryData.expectedRestrictor); + + std::ostringstream os1, os2; + os1 << *restrictorFunc; + os2 << *queryData.expectedRestrictor; + + BOOST_CHECK_EQUAL(os1.str(), os2.str()); } else { BOOST_CHECK_EQUAL(nullptr, context->areaRestrictors); } @@ -826,15 +841,13 @@ BOOST_AUTO_TEST_CASE(UnpartLimit) { BOOST_AUTO_TEST_CASE(Subquery) { // ticket #2053 std::string stmt = "SELECT subQueryColumn FROM (SELECT * FROM Object WHERE filterId=4) WHERE rFlux_PS > 0.3;"; - ParseRunner::Ptr p; - BOOST_CHECK_THROW(p = queryAnaHelper.getParser(stmt), lsst::qserv::parser::ParseException); + BOOST_CHECK_THROW(ParseRunner::makeSelectStmt(stmt), lsst::qserv::parser::ParseException); // Expected failure: Subqueries are unsupported. } BOOST_AUTO_TEST_CASE(FromParen) { // Extra paren. Not supported by our grammar. std::string stmt = "SELECT * FROM (Object) WHERE rFlux_PS > 0.3;"; - ParseRunner::Ptr p; - BOOST_CHECK_THROW(p = queryAnaHelper.getParser(stmt), lsst::qserv::parser::ParseException); + BOOST_CHECK_THROW(ParseRunner::makeSelectStmt(stmt), lsst::qserv::parser::ParseException); } BOOST_AUTO_TEST_CASE(NewParser) { @@ -855,7 +868,7 @@ BOOST_AUTO_TEST_CASE(NewParser) { for (int i = 0; i < 8; ++i) { std::string stmt = stmts[i]; BOOST_TEST_MESSAGE("----" << stmt << "----"); - ParseRunner::Ptr p = queryAnaHelper.getParser(stmt); + BOOST_REQUIRE_NO_THROW(ParseRunner::makeSelectStmt(stmt)); } } @@ -1007,7 +1020,8 @@ BOOST_AUTO_TEST_CASE(FuncExprPred) { "SELECT `o1`.`objectId` AS `o1.objectId`,`o2`.`objectId` AS `objectId2` " "FROM `Subchunks_LSST_100`.`Object_100_%S\007S%` AS " "`o1`,`Subchunks_LSST_100`.`Object_100_%S\007S%` AS `o2` " - "WHERE scisql_angSep(`o1`.`ra_Test`,`o1`.`decl_Test`,`o2`.`ra_Test`,`o2`.`decl_Test`)<0.00001 " + "WHERE scisql_angSep(`o1`.`ra_Test`,`o1`.`decl_Test`,`o2`.`ra_Test`,`o2`.`decl_Test`)<" + PARSER_EXPECTED("1e-05", "0.00001") " " "AND `o1`.`objectId`<>`o2`.`objectId` AND " "ABS((scisql_fluxToAbMag(`o1`.`gFlux_PS`)-scisql_fluxToAbMag(`o1`.`rFlux_PS`))-(scisql_" "fluxToAbMag(`o2`.`gFlux_PS`)-scisql_fluxToAbMag(`o2`.`rFlux_PS`)))<1"; @@ -1049,7 +1063,8 @@ BOOST_AUTO_TEST_CASE(MatchTableWithWhere) { std::string expected = "SELECT * FROM `LSST`.`RefObjMatch_100` AS `LSST.RefObjMatch` WHERE " "(`refObjectId` IS NULL OR `flags`<>2) " - "AND `LSST.RefObjMatch`.`foo`!=`LSST.RefObjMatch`.`bar` AND `LSST.RefObjMatch`.`baz`<3.14159"; + "AND `LSST.RefObjMatch`.`foo`" PARSER_EXPECTED("<>", "!=") "`LSST.RefObjMatch`.`bar`" + " AND `LSST.RefObjMatch`.`baz`<3.14159"; qsTest.sqlConfig = SqlConfig(SqlConfig::MockDbTableColumns({{"LSST", {{"RefObjMatch", {"foo", "bar", "baz"}}}}})); @@ -1271,9 +1286,11 @@ BOOST_AUTO_TEST_CASE(Case01_1012) { qsTest.sqlConfig = SqlConfig(SqlConfig::MockDbTableColumns({{"LSST", {{"Object", {"objectId", "iE1_SG"}}}}})); auto qs = queryAnaHelper.buildQuerySession(qsTest, stmt); - BOOST_CHECK_EQUAL(qs->getError(), - "ParseException:Error parsing query, near \"ABS(iE1_SG)\", qserv does not support " - "functions in ORDER BY."); + char const* expectedErr = PARSER_EXPECTED( + "ParseException:qserv does not support functions in ORDER BY.", + "ParseException:Error parsing query, near \"ABS(iE1_SG)\", qserv does not support " + "functions in ORDER BY."); + BOOST_CHECK_EQUAL(qs->getError(), expectedErr); } BOOST_AUTO_TEST_CASE(Case01_1013) { @@ -1286,9 +1303,11 @@ BOOST_AUTO_TEST_CASE(Case01_1013) { qsTest.sqlConfig = SqlConfig(SqlConfig::MockDbTableColumns({{"LSST", {{"Object", {"objectId", "iE1_SG"}}}}})); auto qs = queryAnaHelper.buildQuerySession(qsTest, stmt); - BOOST_CHECK_EQUAL(qs->getError(), - "ParseException:Error parsing query, near \"ROUND(ABS(iE1_SG), 3)\", qserv does not " - "support functions in ORDER BY."); + char const* expectedErr = PARSER_EXPECTED( + "ParseException:qserv does not support functions in ORDER BY.", + "ParseException:Error parsing query, near \"ROUND(ABS(iE1_SG), 3)\", qserv does not " + "support functions in ORDER BY."); + BOOST_CHECK_EQUAL(qs->getError(), expectedErr); } // ASC and maybe USING(...) syntax not supported currently. @@ -1355,15 +1374,19 @@ BOOST_AUTO_TEST_CASE(Case01_1081) { std::string expected_100_subchunk_core = "SELECT count(*) AS `QS1_COUNT` " "FROM `Subchunks_LSST_100`.`Object_100_%S\007S%` AS `o` " - "INNER JOIN `LSST`.`RefObjMatch_100` AS `o2t` ON `o`.`objectIdObjTest`=`o2t`.`objectId` " - "INNER JOIN `Subchunks_LSST_100`.`SimRefObject_100_%S\007S%` AS `t` ON " + PARSER_EXPECTED("JOIN", "INNER JOIN") " `LSST`.`RefObjMatch_100` AS `o2t`" + " ON `o`.`objectIdObjTest`=`o2t`.`objectId` " + PARSER_EXPECTED("JOIN", "INNER JOIN") " `Subchunks_LSST_100`." + "`SimRefObject_100_%S\007S%` AS `t` ON " "`o2t`.`refObjectId`=`t`.`refObjectId` " "WHERE `o`.`closestToObj`=1 OR `o`.`closestToObj` IS NULL"; std::string expected_100_subchunk_overlap = "SELECT count(*) AS `QS1_COUNT` " "FROM `Subchunks_LSST_100`.`Object_100_%S\007S%` AS `o` " - "INNER JOIN `LSST`.`RefObjMatch_100` AS `o2t` ON `o`.`objectIdObjTest`=`o2t`.`objectId` " - "INNER JOIN `Subchunks_LSST_100`.`SimRefObjectFullOverlap_100_%S\007S%` AS `t` ON " + PARSER_EXPECTED("JOIN", "INNER JOIN") " `LSST`.`RefObjMatch_100` AS `o2t`" + " ON `o`.`objectIdObjTest`=`o2t`.`objectId` " + PARSER_EXPECTED("JOIN", "INNER JOIN") " `Subchunks_LSST_100`." + "`SimRefObjectFullOverlap_100_%S\007S%` AS `t` ON " "`o2t`.`refObjectId`=`t`.`refObjectId` " "WHERE `o`.`closestToObj`=1 OR `o`.`closestToObj` IS NULL"; qsTest.sqlConfig = @@ -1467,8 +1490,9 @@ BOOST_AUTO_TEST_CASE(Case01_2004) { "FROM Object WHERE rFlux_PS > 10;"; // CASE in column spec is illegal. - char const expectedErr[] = - "ParseException:qserv can not parse query, near \"CASE WHEN (typeId=3) THEN 1 ELSE 0 END\""; + char const* expectedErr = PARSER_EXPECTED( + "ParseException:qserv can not parse query: CASE expressions are not supported.", + "ParseException:qserv can not parse query, near \"CASE WHEN (typeId=3) THEN 1 ELSE 0 END\""); auto qs = queryAnaHelper.buildQuerySession(qsTest, stmt); BOOST_CHECK_EQUAL(qs->getError(), expectedErr); } diff --git a/src/qproc/testQueryAnaOrderBy.cc b/src/qproc/testQueryAnaOrderBy.cc index a5d2b91747..1472f09e83 100644 --- a/src/qproc/testQueryAnaOrderBy.cc +++ b/src/qproc/testQueryAnaOrderBy.cc @@ -43,6 +43,7 @@ // Qserv headers #include "css/CssAccess.h" +#include "tests/ParserExpected.h" #include "qproc/QuerySession.h" #include "query/SelectStmt.h" #include "sql/SqlConfig.h" @@ -95,7 +96,7 @@ static const std::vector DATA = { Data("SELECT filterId FROM Filter ORDER BY filterId", "SELECT `LSST.Filter`.`filterId` AS `filterId` FROM `LSST`.`Filter` AS `LSST.Filter`", "", - "ORDER BY `filterId`", + PARSER_EXPECTED("ORDER BY `filterId` ASC", "ORDER BY `filterId`"), sql::SqlConfig(sql::SqlConfig::MockDbTableColumns({{defaultDb, {{"Filter", {"filterId"}}}}}))), // OrderByTwoField @@ -104,7 +105,9 @@ static const std::vector DATA = { "ORDER BY objectId, taiMidPoint ASC", "SELECT `LSST.Source`.`objectId` AS `objectId`,`LSST.Source`.`taiMidPoint` AS `taiMidPoint` " "FROM `LSST`.`Source_100` AS `LSST.Source`", - "", "ORDER BY `objectId`, `taiMidPoint` ASC", + "", + PARSER_EXPECTED("ORDER BY `objectId` ASC, `taiMidPoint` ASC", + "ORDER BY `objectId`, `taiMidPoint` ASC"), sql::SqlConfig(sql::SqlConfig::MockDbTableColumns( {{defaultDb, {{"Source", {"objectId", "taiMidPoint"}}}}}))), @@ -115,7 +118,9 @@ static const std::vector DATA = { "SELECT `LSST.Source`.`objectId` AS `objectId`," "`LSST.Source`.`taiMidPoint` AS `taiMidPoint`,`LSST.Source`.`xFlux` AS `xFlux` " "FROM `LSST`.`Source_100` AS `LSST.Source`", - "", "ORDER BY `objectId`, `taiMidPoint`, `xFlux` DESC", + "", + PARSER_EXPECTED("ORDER BY `objectId` ASC, `taiMidPoint` ASC, `xFlux` DESC", + "ORDER BY `objectId`, `taiMidPoint`, `xFlux` DESC"), sql::SqlConfig(sql::SqlConfig::MockDbTableColumns( {{defaultDb, {{"Source", {"objectId", "taiMidPoint", "xFlux"}}}}}))), @@ -143,7 +148,7 @@ static const std::vector DATA = { "SELECT `filterId` AS `filterId`,SUM(`QS1_SUM`) AS `SUM(photClam)` " "FROM `LSST`.`Filter` AS `LSST.Filter` " "GROUP BY `filterId`", - "ORDER BY `filterId`", + PARSER_EXPECTED("ORDER BY `filterId` ASC", "ORDER BY `filterId`"), sql::SqlConfig(sql::SqlConfig::MockDbTableColumns( {{defaultDb, {{"Filter", {"filterId", "photClam"}}}}}))), @@ -165,9 +170,9 @@ static const std::vector DATA = { "SELECT `LSST.Science_Ccd_Exposure`.`run` AS `run`,`LSST.Science_Ccd_Exposure`.`field` AS " "`field` " "FROM `LSST`.`Science_Ccd_Exposure` AS `LSST.Science_Ccd_Exposure` " - "ORDER BY `field` " - "LIMIT 2", - "", "ORDER BY `field`", + "ORDER BY `field`" PARSER_EXPECTED(" ASC", "") " " + "LIMIT 2", + "", PARSER_EXPECTED("ORDER BY `field` ASC", "ORDER BY `field`"), sql::SqlConfig(sql::SqlConfig::MockDbTableColumns( {{defaultDb, {{"Science_Ccd_Exposure", {"run", "field"}}}}}))), @@ -194,12 +199,12 @@ static const std::vector DATA = { "SELECT `LSST.Filter`.`filterId` AS `filterId`,SUM(`LSST.Filter`.`photClam`) AS `QS1_SUM` " "FROM `LSST`.`Filter` AS `LSST.Filter` " "GROUP BY `filterId` " - "ORDER BY `filterId`", + "ORDER BY `filterId`" PARSER_EXPECTED(" ASC", ""), // FIXME merge query is not useful here, see DM-3166 "SELECT `filterId` AS `filterId`,SUM(`QS1_SUM`) AS `SUM(photClam)` " "FROM `LSST`.`Filter` AS `LSST.Filter` " - "GROUP BY `filterId` ORDER BY `filterId` LIMIT 3", - "ORDER BY `filterId`", + "GROUP BY `filterId` ORDER BY `filterId`" PARSER_EXPECTED(" ASC", "") " LIMIT 3", + PARSER_EXPECTED("ORDER BY `filterId` ASC", "ORDER BY `filterId`"), sql::SqlConfig(sql::SqlConfig::MockDbTableColumns( {{defaultDb, {{"Filter", {"filterId", "photClam"}}}}}))), }; diff --git a/src/tests/ParserExpected.h b/src/tests/ParserExpected.h new file mode 100644 index 0000000000..7a6a9c25eb --- /dev/null +++ b/src/tests/ParserExpected.h @@ -0,0 +1,47 @@ +// -*- LSST-C++ -*- +/* + * LSST Data Management System + * Copyright 2026 LSST. + * + * This product includes software developed by the + * LSST Project (http://www.lsst.org/). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the LSST License Statement and + * the GNU General Public License along with this program. If not, + * see . + */ + +/** + * @file + * + * @brief Helper for normalizing differences between parser backends. + * + * PARSER_EXPECTED(hyrise, antlr) selects the appropriate string literal for the active parser. + * + * "SELECT ... " PARSER_EXPECTED("JOIN", "INNER JOIN") " ORDER BY ..." + * + * -> SELECT ... JOIN ORDER BY ... + * - or - + * -> SELECT ... INNER JOIN ORDER BY ... + */ + +#ifndef LSST_QSERV_TESTS_PARSEREXPECTED_H +#define LSST_QSERV_TESTS_PARSEREXPECTED_H + +#ifdef QSERV_USE_HYRISE_SQL_PARSER +#define PARSER_EXPECTED(hyrise, antlr) hyrise +#else +#define PARSER_EXPECTED(hyrise, antlr) antlr +#endif + +#endif // LSST_QSERV_TESTS_PARSEREXPECTED_H diff --git a/src/tests/QueryAnaHelper.cc b/src/tests/QueryAnaHelper.cc index 036147f7da..989766d07b 100644 --- a/src/tests/QueryAnaHelper.cc +++ b/src/tests/QueryAnaHelper.cc @@ -40,7 +40,6 @@ #include "lsst/log/Log.h" // Qserv headers -#include "ccontrol/ParseRunner.h" #include "parser/ParseException.h" #include "qproc/ChunkSpec.h" #include "query/AreaRestrictor.h" @@ -48,7 +47,6 @@ #include "query/SecIdxRestrictor.h" #include "query/SelectStmt.h" -using lsst::qserv::ccontrol::ParseRunner; using lsst::qserv::qproc::ChunkQuerySpec; using lsst::qserv::qproc::ChunkSpec; using lsst::qserv::qproc::QuerySession; @@ -61,11 +59,6 @@ LOG_LOGGER _log = LOG_GET("lsst.qserv.tests.QueryAnaHelper"); namespace lsst::qserv::tests { -ParseRunner::Ptr QueryAnaHelper::getParser(std::string const& stmt) { - auto p = std::make_shared(stmt); - return p; -} - std::shared_ptr QueryAnaHelper::buildQuerySession(QuerySession::Test qsTest, std::string const& stmt, bool expectError) { querySession = std::make_shared(qsTest); diff --git a/src/tests/QueryAnaHelper.h b/src/tests/QueryAnaHelper.h index 639fddb5d6..e934736c7d 100644 --- a/src/tests/QueryAnaHelper.h +++ b/src/tests/QueryAnaHelper.h @@ -36,7 +36,6 @@ #include // Qserv headers -#include "ccontrol/ParseRunner.h" #include "qproc/QuerySession.h" #include "util/IterableFormatter.h" @@ -46,8 +45,6 @@ namespace lsst::qserv::tests { * @brief Test tools used by qproc::testQueryAna* units tests */ struct QueryAnaHelper { - static ccontrol::ParseRunner::Ptr getParser(const std::string& stmt); - /** * @brief Prepare the query session used to process SQL queries * issued from MySQL client.