diff --git a/.drone.jsonnet b/.drone.jsonnet index 999070239..6d1260619 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -1,18 +1,18 @@ local events = ["pull_request", "cron"]; + +local current_branch = "stable-23.10"; + local servers = { - develop: ["10.6-enterprise"], "stable-23.10": ["10.6-enterprise"], }; local platforms = { - develop: ["rockylinux:8", "rockylinux:9", "debian:12", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04"], - "stable-23.10": ["rockylinux:8", "rockylinux:9", "debian:12", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04"], + "stable-23.10": ["rockylinux:8", "rockylinux:9", "debian:12", "ubuntu:22.04", "ubuntu:24.04"], }; local platforms_arm = { - develop: ["rockylinux:8", "rockylinux:9", "debian:12", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04"], - "stable-23.10": ["rockylinux:8", "rockylinux:9", "debian:12", "ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04"], + "stable-23.10": ["rockylinux:8", "rockylinux:9", "debian:12", "ubuntu:22.04", "ubuntu:24.04"], }; local rewrite_ubuntu_mirror = @"sed -i 's|//\\(us\\.\\)\\?archive\\.ubuntu\\.com|//us.archive.ubuntu.com|g' /etc/apt/sources.list || true; " + @@ -56,10 +56,10 @@ local customBootstrapParamsForAdditionalPipelinesMap = { local any_branch = "**"; -local platforms_custom = platforms.develop; -local platforms_arm_custom = platforms_arm.develop; +local platforms_custom = platforms[current_branch]; +local platforms_arm_custom = platforms_arm[current_branch]; -local platforms_mtr = platforms.develop; +local platforms_mtr = platforms[current_branch]; local builddir = "verylongdirnameforverystrangecpackbehavior"; @@ -146,7 +146,7 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", local socket_path = if (pkg_format == "rpm") then "/var/lib/mysql/mysql.sock" else "/run/mysqld/mysqld.sock", local config_path_prefix = if (pkg_format == "rpm") then "/etc/my.cnf.d/" else "/etc/mysql/mariadb.conf.d/50-", local img = if (platform == "rockylinux:8") then platform else "detravi/" + std.strReplace(platform, "/", "-"), - local branch_ref = if (branch == any_branch) then "stable-23.10" else branch, + local branch_ref = if (branch == any_branch) then current_branch else branch, // local regression_tests = if (std.startsWith(platform, 'debian') || std.startsWith(platform, 'ubuntu:20')) then 'test000.sh' else 'test000.sh,test001.sh', local branchp = if (branch == "**") then "" else branch + "/", @@ -176,7 +176,7 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", publish(step_prefix="pkg", eventp=event + "/${DRONE_BUILD_NUMBER}"):: { name: "publish " + step_prefix, depends_on: [std.strReplace(step_prefix, " latest", ""), "createrepo"], - image: "amazon/aws-cli:2.23.5", + image: "amazon/aws-cli:2.22.30", when: { status: ["success", "failure"], }, @@ -248,8 +248,8 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", if (pkg_format == "deb") then execInnerDocker('bash -c "apt-get clean && apt-get update -y && apt-get install -y mariadb-columnstore-cmapi"', containerName) else execInnerDocker('bash -c "yum update -y && yum install -y MariaDB-columnstore-cmapi"', containerName), - local prepareTestStage(containerName, result, do_setup) = - 'sh -c "apk add bash && bash /mdb/' + builddir + "/storage/columnstore/columnstore/build/prepare_test_stage.sh" + + local prepareTestContainer(containerName, result, do_setup) = + 'sh -c "apk add bash && bash /mdb/' + builddir + "/storage/columnstore/columnstore/build/prepare_test_container.sh" + " --container-name " + containerName + " --docker-image " + img + " --result-path " + result + @@ -274,7 +274,7 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", image: "docker:28.2.2", volumes: [pipeline._volumes.mdb, pipeline._volumes.docker], commands: [ - prepareTestStage(getContainerName("smoke"), result, true), + prepareTestContainer(getContainerName("smoke"), result, true), "bash /mdb/" + builddir + "/storage/columnstore/columnstore/build/run_smoke.sh " + getContainerName("smoke"), ], }, @@ -302,7 +302,7 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", }, commands: [ // why do we mount cgroups here, but miss it on other steps? - prepareTestStage(getContainerName("upgrade") + version, result, false), + prepareTestContainer(getContainerName("upgrade") + version, result, false), if (pkg_format == "deb") then execInnerDocker('bash -c "./upgrade_setup_deb.sh ' + version + " " + result + " " + arch + " " + repo_pkg_url_no_res + ' $${UPGRADE_TOKEN}"', getContainerName("upgrade") + version), @@ -341,37 +341,14 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", MTR_FULL_SUITE: "${MTR_FULL_SUITE:-false}", }, commands: [ - prepareTestStage(getContainerName("mtr"), result, true), - "docker cp mysql-test/columnstore mtr$${DRONE_BUILD_NUMBER}:" + mtr_path + "/suite/", - execInnerDocker("chown -R mysql:mysql " + mtr_path, getContainerName("mtr")), - // disable systemd 'ProtectSystem' (we need to write to /usr/share/) - execInnerDocker("bash -c 'sed -i /ProtectSystem/d $(systemctl show --property FragmentPath mariadb | sed s/FragmentPath=//)'", getContainerName("mtr")), - execInnerDocker("systemctl daemon-reload", getContainerName("mtr")), - execInnerDocker("systemctl start mariadb", getContainerName("mtr")), - // Set RAM consumption limits to avoid RAM contention b/w mtr and regression steps. - execInnerDocker("/usr/bin/mcsSetConfig SystemConfig CGroup just_no_group_use_local", getContainerName("mtr")), - execInnerDocker('mariadb -e "create database if not exists test;"', getContainerName("mtr")), - execInnerDocker("systemctl restart mariadb-columnstore", getContainerName("mtr")), - - // delay mtr for manual debugging on live instance - "sleep $${MTR_DELAY_SECONDS:-1s}", + prepareTestContainer(getContainerName("mtr"), result, true), 'MTR_SUITE_LIST=$([ "$MTR_FULL_SUITE" == true ] && echo "' + mtr_full_set + '" || echo "$MTR_SUITE_LIST")', - if (event == "custom" || event == "cron") then - execInnerDocker('bash -c "wget -qO- https://cspkg.s3.amazonaws.com/mtr-test-data.tar.lz4 | lz4 -dc - | tar xf - -C /"', - getContainerName("mtr")), - if (event == "custom" || event == "cron") then - execInnerDocker('bash -c "cd ' + mtr_path + " && ./mtr --extern socket=" + socket_path + ' --force --print-core=detailed --print-method=gdb --max-test-fail=0 --suite=columnstore/setup"', - getContainerName("mtr")), - if (event == "cron") then - execInnerDocker('bash -c "cd ' + mtr_path + " && ./mtr --extern socket=" + socket_path + - " --force --print-core=detailed --print-method=gdb --max-test-fail=0 --suite=" - + std.join(",", std.map(function(x) "columnstore/" + x, std.split(mtr_full_set, ","))), - getContainerName("mtr")) + '"' - else - execInnerDocker('bash -c "cd ' + mtr_path + " && ./mtr --extern socket=" + socket_path + - ' --force --print-core=detailed --print-method=gdb --max-test-fail=0 --suite=columnstore/$${MTR_SUITE_LIST//,/,columnstore/}"', - getContainerName("mtr")), + 'apk add bash && bash /mdb/' + builddir + '/storage/columnstore/columnstore/build/run_mtr.sh' + + ' --container-name ' + getContainerName("mtr") + + ' --distro ' + platform + + ' --suite-list $${MTR_SUITE_LIST}' + + ' --triggering-event ' + event, ], }, mtrlog:: { @@ -386,66 +363,11 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", status: ["success", "failure"], }, }, - prepare_regression:: { - name: "prepare regression", - depends_on: ["mtr", "publish pkg", "publish cmapi build"], - when: { - status: ["success", "failure"], - }, - image: "docker:git", - volumes: [pipeline._volumes.docker, pipeline._volumes.mdb], - environment: { - REGRESSION_BRANCH_REF: "${DRONE_SOURCE_BRANCH}", - REGRESSION_REF_AUX: branch_ref, - }, - commands: [ - // compute branch. - 'echo "$$REGRESSION_REF"', - 'echo "$$REGRESSION_BRANCH_REF"', - // if REGRESSION_REF is empty, try to see whether regression repository has a branch named as one we PR. - 'export REGRESSION_REF=$${REGRESSION_REF:-$$(git ls-remote https://github.com/mariadb-corporation/mariadb-columnstore-regression-test --h --sort origin "refs/heads/$$REGRESSION_BRANCH_REF" | grep -E -o "[^/]+$$")}', - 'echo "$$REGRESSION_REF"', - // REGRESSION_REF can be empty if there is no appropriate branch in regression repository. - // assign what is appropriate by default. - "export REGRESSION_REF=$${REGRESSION_REF:-$$REGRESSION_REF_AUX}", - 'echo "$$REGRESSION_REF"', - // clone regression test repo - "git clone --recurse-submodules --branch $$REGRESSION_REF --depth 1 https://github.com/mariadb-corporation/mariadb-columnstore-regression-test", - // where are we now? - "cd mariadb-columnstore-regression-test", - "git rev-parse --abbrev-ref HEAD && git rev-parse HEAD", - "cd ..", - prepareTestStage(getContainerName("regression"), result, true), - - "docker cp mariadb-columnstore-regression-test regression$${DRONE_BUILD_NUMBER}:/", - // list storage manager binary - "ls -la /mdb/" + builddir + "/storage/columnstore/columnstore/storage-manager", - "docker cp /mdb/" + builddir + "/storage/columnstore/columnstore/storage-manager regression$${DRONE_BUILD_NUMBER}:/", - // check storage-manager unit test binary file - execInnerDocker("ls -l /storage-manager", getContainerName("regression")), - // copy test data for regression test suite - execInnerDocker('bash -c "wget -qO- https://cspkg.s3.amazonaws.com/testData.tar.lz4 | lz4 -dc - | tar xf - -C mariadb-columnstore-regression-test/"', getContainerName("regression")), - - // set mariadb lower_case_table_names=1 config option - execInnerDocker('sed -i "/^.mariadb.$/a lower_case_table_names=1" ' + config_path_prefix + "server.cnf", getContainerName("regression")), - // set default client character set to utf-8 - execInnerDocker('sed -i "/^.client.$/a default-character-set=utf8" ' + config_path_prefix + "client.cnf", getContainerName("regression")), - - // Set RAM consumption limits to avoid RAM contention b/w mtr andregression steps. - execInnerDocker("/usr/bin/mcsSetConfig SystemConfig CGroup just_no_group_use_local", getContainerName("regression")), - - execInnerDocker("systemctl start mariadb", getContainerName("regression")), - execInnerDocker("systemctl restart mariadb-columnstore", getContainerName("regression")), - // delay regression for manual debugging on live instance - "sleep $${REGRESSION_DELAY_SECONDS:-1s}", - execInnerDocker("/usr/bin/g++ /mariadb-columnstore-regression-test/mysql/queries/queryTester.cpp -O2 -o /mariadb-columnstore-regression-test/mysql/queries/queryTester", getContainerName("regression")), - ], - }, regression(name, depends_on):: { name: name, depends_on: depends_on, image: "docker:git", - volumes: [pipeline._volumes.docker], + volumes: [pipeline._volumes.docker, pipeline._volumes.mdb], when: { status: ["success", "failure"], }, @@ -454,14 +376,24 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", REGRESSION_TIMEOUT: { from_secret: "regression_timeout", }, + REGRESSION_BRANCH_REF: "${DRONE_SOURCE_BRANCH}", + REGRESSION_REF_AUX: branch_ref, }, commands: [ - execInnerDocker("mkdir -p reg-logs", getContainerName("regression"), "--workdir /mariadb-columnstore-regression-test/mysql/queries/nightly/alltest"), - execInnerDocker("bash -c 'sleep 4800 && bash /save_stack.sh /mariadb-columnstore-regression-test/mysql/queries/nightly/alltest/reg-logs/' & ", - getContainerName("regresion")), - execInnerDockerNoTTY('bash -c "timeout -k 1m -s SIGKILL --preserve-status $${REGRESSION_TIMEOUT} ./go.sh --sm_unit_test_dir=/storage-manager --tests=' + name + " || ./regression_logs.sh " + name + '"', - getContainerName("regression"), - "--env PRESERVE_LOGS=true --workdir /mariadb-columnstore-regression-test/mysql/queries/nightly/alltest"), + prepareTestContainer(getContainerName("regression"), result, true), + + // REGRESSION_REF can be empty if there is no appropriate branch in regression repository. + // if REGRESSION_REF is empty, try to see whether regression repository has a branch named as one we PR. + 'export REGRESSION_REF=$${REGRESSION_REF:-$$(git ls-remote https://github.com/mariadb-corporation/mariadb-columnstore-regression-test --h --sort origin "refs/heads/$$REGRESSION_BRANCH_REF" | grep -E -o "[^/]+$$")}', + "export REGRESSION_REF=$${REGRESSION_REF:-$$REGRESSION_REF_AUX}", + 'echo "$$REGRESSION_REF"', + + "apk add bash && bash /mdb/" + builddir + "/storage/columnstore/columnstore/build/run_regression.sh" + + " --container-name " + getContainerName("regression") + + " --test-name " + name + + " --distro " + platform + + " --regression-branch $$REGRESSION_REF" + + " --regression-timeout $${REGRESSION_TIMEOUT}", ], }, regressionlog:: { @@ -537,7 +469,7 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", PYTHONPATH: "/usr/share/columnstore/cmapi/deps", }, commands: [ - prepareTestStage(getContainerName("cmapi"), result, true), + prepareTestContainer(getContainerName("cmapi"), result, true), installCmapi(getContainerName("cmapi"), pkg_format), "cd cmapi", "for i in mcs_node_control cmapi_server failover; do docker cp $${i}/test cmapi$${DRONE_BUILD_NUMBER}:" + cmapi_path + "/$${i}/; done", @@ -750,8 +682,7 @@ local Pipeline(branch, platform, event, arch="amd64", server="10.6-enterprise", [pipeline.cmapilog] + [pipeline.publish("cmapilog")] + (if (platform == "rockylinux:8" && arch == "amd64") then [pipeline.dockerfile] + [pipeline.dockerhub] + [pipeline.multi_node_mtr] else [pipeline.mtr] + [pipeline.mtrlog] + [pipeline.publish("mtrlog")]) + - [pipeline.prepare_regression] + - [pipeline.regression(regression_tests[i], [if (i == 0) then "prepare regression" else regression_tests[i - 1]]) for i in indexes(regression_tests)] + + [pipeline.regression(regression_tests[i], if (i == 0) then ["mtr", "publish pkg", "publish cmapi build"] else [regression_tests[i - 1]]) for i in indexes(regression_tests)] + [pipeline.regressionlog] + [pipeline.publish("regressionlog")] + // [pipeline.upgrade(mdb_server_versions[i]) for i in indexes(mdb_server_versions)] + @@ -792,8 +723,8 @@ local FinalPipeline(branch, event) = { "failure", ], } + (if event == "cron" then { cron: ["nightly-" + std.strReplace(branch, ".", "-")] } else {}), - depends_on: std.map(function(p) std.join(" ", [branch, p, event, "amd64", "10.6-enterprise", "", ""]), platforms.develop) + - std.map(function(p) std.join(" ", [branch, p, event, "arm64", "10.6-enterprise", "", ""]), platforms_arm.develop), + depends_on: std.map(function(p) std.join(" ", [branch, p, event, "amd64", "10.6-enterprise", "", ""]), platforms[current_branch]), + // +std.map(function(p) std.join(" ", [branch, p, event, "arm64", "10.6-enterprise", "", ""]), platforms_arm.develop), }; [ @@ -803,13 +734,13 @@ local FinalPipeline(branch, event) = { for s in servers[b] for e in events ] + -[ - Pipeline(b, p, e, "arm64", s) - for b in std.objectFields(platforms_arm) - for p in platforms_arm[b] - for s in servers[b] - for e in events -] + +// [ +// Pipeline(b, p, e, "arm64", s) +// for b in std.objectFields(platforms_arm) +// for p in platforms_arm[b] +// for s in servers[b] +// for e in events +// ] + [ FinalPipeline(b, "cron") @@ -820,11 +751,11 @@ local FinalPipeline(branch, event) = { Pipeline(any_branch, p, "custom", "amd64", "10.6-enterprise") for p in platforms_custom ] + -[ - Pipeline(any_branch, p, "custom", "arm64", "10.6-enterprise") - for p in platforms_arm_custom -] -+ +// [ +// Pipeline(any_branch, p, "custom", "arm64", "10.6-enterprise") +// for p in platforms_arm_custom +// ] +// + [ Pipeline(b, platform, triggeringEvent, a, server, "", buildenv) for a in ["amd64"] @@ -832,5 +763,5 @@ local FinalPipeline(branch, event) = { for platform in ["ubuntu:24.04"] for buildenv in std.objectFields(customEnvCommandsMap) for triggeringEvent in events - for server in servers.develop + for server in servers[current_branch] ] diff --git a/build/bootstrap_mcs.sh b/build/bootstrap_mcs.sh index 8fe38dd36..a82992c16 100755 --- a/build/bootstrap_mcs.sh +++ b/build/bootstrap_mcs.sh @@ -574,11 +574,15 @@ run_microbenchmarks_tests() { disable_plugins_for_bootstrap() { find /etc -type f -exec sed -i 's/plugin-load-add=auth_gssapi.so//g' {} + - find /etc -type f -exec sed -i 's/plugin-load-add=ha_columnstore.so//g' {} + + find /etc -type f -exec sed -i 's/plugin-load-add=ha_columnstore.so/#plugin-load-add=ha_columnstore.so/g' {} + } enable_columnstore_back() { - cp "$MDB_SOURCE_PATH"/storage/columnstore/columnstore/dbcon/mysql/columnstore.cnf $CONFIG_DIR + if [[ "$NO_CLEAN" == true ]]; then + find /etc -type f -exec sed -i 's/#plugin-load-add=ha_columnstore.so/plugin-load-add=ha_columnstore.so/g' {} + + else + cp "$MDB_SOURCE_PATH"/storage/columnstore/columnstore/dbcon/mysql/columnstore.cnf $CONFIG_DIR + fi } fix_config_files() { @@ -594,6 +598,7 @@ fix_config_files() { if grep -q thread_stack $COLUMNSTORE_CONFIG; then warn "MDB Server has thread_stack settings on $COLUMNSTORE_CONFIG check it's compatibility with ASAN" else + echo "" >>$COLUMNSTORE_CONFIG echo "thread_stack = ${THREAD_STACK_SIZE}" >>$COLUMNSTORE_CONFIG message "thread_stack was set to ${THREAD_STACK_SIZE} in $COLUMNSTORE_CONFIG" fi diff --git a/build/prepare_test_stage.sh b/build/prepare_test_container.sh similarity index 94% rename from build/prepare_test_stage.sh rename to build/prepare_test_container.sh index 5266c5511..924382bcf 100755 --- a/build/prepare_test_stage.sh +++ b/build/prepare_test_container.sh @@ -75,8 +75,7 @@ start_container() { fi } -start_container - +prepare_container() { if [[ "$RESULT" != *rocky* ]]; then execInnerDocker "$CONTAINER_NAME" 'sed -i "s/exit 101/exit 0/g" /usr/sbin/policy-rc.d' fi @@ -118,8 +117,16 @@ echo "Installing columnstore..." if [[ "$RESULT" == *rocky* ]]; then execInnerDockerWithRetry "$CONTAINER_NAME" 'yum install -y MariaDB-columnstore-engine MariaDB-test' else - execInnerDockerWithRetry "$CONTAINER_NAME" 'apt update -y && apt install -y mariadb-plugin-columnstore mariadb-test' + execInnerDockerWithRetry "$CONTAINER_NAME" 'apt update -y && apt install -y mariadb-plugin-columnstore mariadb-test mariadb-test-data' fi sleep 5 echo "PrepareTestStage completed in $CONTAINER_NAME" +} + + +if [[ -z $(docker ps -q --filter "name=${CONTAINER_NAME}") ]]; then + start_container + prepare_container +else warn "Container ${CONTAINER_NAME} is already running!" +fi diff --git a/build/run_mtr.sh b/build/run_mtr.sh new file mode 100755 index 000000000..273fa1720 --- /dev/null +++ b/build/run_mtr.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +set -eo pipefail + +SCRIPT_LOCATION=$(dirname "$0") +source "$SCRIPT_LOCATION"/utils.sh + +optparse.define short=c long=container-name desc="Name of the Docker container where mtr tests will run" variable=CONTAINER_NAME +optparse.define short=d long=distro desc="Linux distro for which mtr is runned" variable=DISTRO +optparse.define short=s long=suite-list desc="Comma-separated list of test suites to run" variable=MTR_SUITE_LIST +optparse.define short=e long=triggering-event desc="Event that triggers testrun" variable=EVENT +source $(optparse.build) + +MTR_FULL_SET="basic,bugfixes,devregression,autopilot,extended,multinode,oracle,1pmonly" + +echo "Arguments received: $@" + +if [[ "$EUID" -ne 0 ]]; then + error "Please run script as root" + exit 1 +fi + +if [[ -z "${CONTAINER_NAME}" ]]; then + echo "Please provide mtr container name as a parameter, e.g. ./run_mtr.sh -c mtr183" + exit 1 +fi + +if [[ -z $(docker ps -q --filter "name=${CONTAINER_NAME}") ]]; then + error "Container '${CONTAINER_NAME}' is not running." + exit 1 +fi + +if [[ "$DISTRO" == *rocky* ]]; then + SOCKET_PATH="/var/lib/mysql/mysql.sock" + MTR_PATH="/usr/share/mysql-test" +else + SOCKET_PATH="/run/mysqld/mysqld.sock" + MTR_PATH="/usr/share/mysql/mysql-test" +fi + +message "Running mtr tests..." + +execInnerDocker "${CONTAINER_NAME}" "chown -R mysql:mysql ${MTR_PATH}" + +# disable systemd 'ProtectSystem' (we need to write to /usr/share/) +execInnerDocker "${CONTAINER_NAME}" "sed -i /ProtectSystem/d \$(systemctl show --property FragmentPath mariadb | sed s/FragmentPath=//) || true" +execInnerDocker "${CONTAINER_NAME}" "systemctl daemon-reload" +execInnerDocker "${CONTAINER_NAME}" "systemctl start mariadb" + +# Set RAM consumption limits to avoid RAM contention b/w mtr and regression steps. +execInnerDocker "${CONTAINER_NAME}" "/usr/bin/mcsSetConfig SystemConfig CGroup just_no_group_use_local" +execInnerDocker "${CONTAINER_NAME}" "mariadb -e \"create database if not exists test;\"" +execInnerDocker "${CONTAINER_NAME}" "systemctl restart mariadb-columnstore" + +if [[ "${EVENT}" == "custom" || "${EVENT}" == "cron" ]]; then + execInnerDocker "${CONTAINER_NAME}" "wget -qO- https://cspkg.s3.amazonaws.com/mtr-test-data.tar.lz4 | lz4 -dc - | tar xf - -C /" + execInnerDocker "${CONTAINER_NAME}" "cd ${MTR_PATH} && ./mtr --extern socket=${SOCKET_PATH} --force --print-core=detailed --print-method=gdb --max-test-fail=0 --suite=columnstore/setup" +fi + +if [[ "${EVENT}" == "cron" ]]; then + execInnerDocker "${CONTAINER_NAME}" "cd ${MTR_PATH} && ./mtr --extern socket=${SOCKET_PATH} --force --print-core=detailed --print-method=gdb --max-test-fail=0 --suite=columnstore/${MTR_FULL_SET//,/,columnstore/}" +else + execInnerDocker "${CONTAINER_NAME}" "cd ${MTR_PATH} && ./mtr --extern socket=${SOCKET_PATH} --force --print-core=detailed --print-method=gdb --max-test-fail=0 --suite=columnstore/${MTR_SUITE_LIST//,/,columnstore/}" +fi \ No newline at end of file diff --git a/build/run_regression.sh b/build/run_regression.sh new file mode 100755 index 000000000..83b41fb02 --- /dev/null +++ b/build/run_regression.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +set -o pipefail + +SCRIPT_LOCATION=$(dirname "$0") +source "$SCRIPT_LOCATION"/utils.sh + +optparse.define short=c long=container-name desc="Name of the Docker container where regression tests will run" variable=CONTAINER_NAME +optparse.define short=b long=regression-branch desc="Branch from regression tests repo" variable=REGRESSION_BRANCH +optparse.define short=d long=distro desc="Linux distro for which regression is executed" variable=DISTRO +optparse.define short=t long=regression-timeout desc="Timeout for the regression test run" variable=REGRESSION_TIMEOUT +optparse.define short=n long=test-name desc="Name of regression test to execute" variable=TEST_NAME +source "$(optparse.build)" + +for flag in CONTAINER_NAME REGRESSION_BRANCH DISTRO; do + if [[ -z "${!flag}" ]]; then + error "Missing required flag: -${flag:0:1} / --${flag,,}" + exit 1 + fi +done + +if [[ -z $(docker ps -q --filter "name=${CONTAINER_NAME}") ]]; then + error "Container '${CONTAINER_NAME}' is not running." + exit 1 +fi + +BUILD_DIR="verylongdirnameforverystrangecpackbehavior" + +prepare_regression() { + if execInnerDocker "${CONTAINER_NAME}" "test -f /mariadb-columnstore-regression-test/mysql/queries/queryTester.cpp"; then + return 0 + fi + + message "Running one-time preparation for regression tests" + + # Set config path prefix based on distro + if [[ "$DISTRO" == *rocky* ]]; then + CONFIG_PATH_PREFIX="/etc/my.cnf.d/" + else + CONFIG_PATH_PREFIX="/etc/mysql/mariadb.conf.d/50-" + fi + + git clone --recurse-submodules --branch "${REGRESSION_BRANCH}" --depth 1 https://github.com/mariadb-corporation/mariadb-columnstore-regression-test + cd mariadb-columnstore-regression-test + git rev-parse --abbrev-ref HEAD && git rev-parse HEAD + cd .. + + docker cp mariadb-columnstore-regression-test "${CONTAINER_NAME}:/" + docker cp "/mdb/${BUILD_DIR}/storage/columnstore/columnstore/storage-manager" "${CONTAINER_NAME}:/" + + #copy test data for regression test suite + execInnerDocker "${CONTAINER_NAME}" 'bash -c "wget -qO- https://cspkg.s3.amazonaws.com/testData.tar.lz4 | lz4 -dc - | tar xf - -C mariadb-columnstore-regression-test/"' + + # set mariadb lower_case_table_names=1 config option + execInnerDocker "${CONTAINER_NAME}" "sed -i '/^\[mariadb\]/a lower_case_table_names=1' ${CONFIG_PATH_PREFIX}server.cnf" + + # set default client character set to utf-8 + execInnerDocker "${CONTAINER_NAME}" "sed -i '/^\[client\]/a default-character-set=utf8' ${CONFIG_PATH_PREFIX}client.cnf" + + # Start services and build queryTester + execInnerDocker "${CONTAINER_NAME}" "systemctl start mariadb" + execInnerDocker "${CONTAINER_NAME}" "systemctl restart mariadb-columnstore" + execInnerDocker "${CONTAINER_NAME}" "g++ /mariadb-columnstore-regression-test/mysql/queries/queryTester.cpp -O2 -o /mariadb-columnstore-regression-test/mysql/queries/queryTester" + + message "Regression preparation complete" +} + +run_test() { + message "Running test: ${TEST_NAME:-}" + + execInnerDocker "${CONTAINER_NAME}" "bash -c 'sleep 4800 && bash /save_stack.sh /mariadb-columnstore-regression-test/mysql/queries/nightly/alltest/reg-logs/' &" + + execInnerDockerNoTTY "${CONTAINER_NAME}" \ + "export PRESERVE_LOGS=true && cd /mariadb-columnstore-regression-test/mysql/queries/nightly/alltest && \ + timeout -k 1m -s SIGKILL --preserve-status ${REGRESSION_TIMEOUT} ./go.sh --sm_unit_test_dir=/storage-manager --tests=${TEST_NAME} \ + || ./regression_logs.sh ${TEST_NAME}" +} + +on_exit() { + exit_code=$? + if [[ $exit_code -eq 0 ]]; then + message "Regression finished successfully" + else + message "Some of regression tests has failed" + fi +} +trap on_exit EXIT + +prepare_regression +run_test + diff --git a/build/utils.sh b/build/utils.sh index 56b6ee3c7..d2551655a 100644 --- a/build/utils.sh +++ b/build/utils.sh @@ -531,7 +531,20 @@ function execInnerDocker() { if [[ $dockerCommandExitCode -ne 0 ]]; then error "Command \"$@\" failed in container \"$container_name\"" - exit $dockerCommandExitCode + return $dockerCommandExitCode + fi +} + +function execInnerDockerNoTTY() { + local container_name=$1 + shift 1 + + docker exec "$container_name" bash -c "$@" + local dockerCommandExitCode=$? + + if [[ $dockerCommandExitCode -ne 0 ]]; then + error "Command \"$@\" failed in container \"$container_name\"" + return $dockerCommandExitCode fi } diff --git a/cmapi/cmapi_server/handlers/cluster.py b/cmapi/cmapi_server/handlers/cluster.py index 1cc9a1d6f..c81fffc6c 100644 --- a/cmapi/cmapi_server/handlers/cluster.py +++ b/cmapi/cmapi_server/handlers/cluster.py @@ -83,6 +83,7 @@ class ClusterHandler(): r_json = r.json() if len(r_json.get('services', 0)) == 0: r_json['dbrm_mode'] = 'offline' + r_json['cluster_mode'] = 'offline' response[f'{str(node)}'] = r_json num_nodes += 1 diff --git a/dbcon/execplan/calpontselectexecutionplan.cpp b/dbcon/execplan/calpontselectexecutionplan.cpp index 6845cf9fd..fd48ebb3c 100644 --- a/dbcon/execplan/calpontselectexecutionplan.cpp +++ b/dbcon/execplan/calpontselectexecutionplan.cpp @@ -193,51 +193,71 @@ void CalpontSelectExecutionPlan::havingTokenList(const FilterTokenList& havingTo having(parser.parse(tokens.begin(), tokens.end())); } -string CalpontSelectExecutionPlan::toString() const +std::string endlWithIndent(const size_t ident) +{ + ostringstream output; + output << endl; + output << std::string(ident, ' '); + return output.str(); +} + +void CalpontSelectExecutionPlan::printSubCSEP(const size_t& ident, ostringstream& output, + CalpontSelectExecutionPlan*& plan) const +{ + if (plan) + { + output << endlWithIndent(ident) << "{"; + output << plan->toString(ident + 2); + output << endlWithIndent(ident) << "}"; + } +} +string CalpontSelectExecutionPlan::toString(const size_t ident) const { ostringstream output; - output << ">SELECT "; + output << endlWithIndent(ident) << "SELECT "; if (distinct()) - output << "DISTINCT "; + { + output << endlWithIndent(ident) << "DISTINCT "; + } - output << "limit: " << limitStart() << " - " << limitNum() << endl; + output << endlWithIndent(ident) << "limit: " << limitStart() << " - " << limitNum(); switch (location()) { - case CalpontSelectExecutionPlan::MAIN: output << "MAIN" << endl; break; + case CalpontSelectExecutionPlan::MAIN: output << endlWithIndent(ident) << "MAIN"; break; - case CalpontSelectExecutionPlan::FROM: output << "FROM" << endl; break; + case CalpontSelectExecutionPlan::FROM: output << endlWithIndent(ident) << "FROM"; break; - case CalpontSelectExecutionPlan::WHERE: output << "WHERE" << endl; break; + case CalpontSelectExecutionPlan::WHERE: output << endlWithIndent(ident) << "WHERE"; break; - case CalpontSelectExecutionPlan::HAVING: output << "HAVING" << endl; break; + case CalpontSelectExecutionPlan::HAVING: output << "HAVING" << endlWithIndent(ident); break; } // Returned Column CalpontSelectExecutionPlan::ReturnedColumnList retCols = returnedCols(); - output << ">>Returned Columns" << endl; + output << endlWithIndent(ident) << ">>Returned Columns"; + uint32_t seq = 0; for (unsigned int i = 0; i < retCols.size(); i++) { - output << *retCols[i] << endl; + output << endlWithIndent(ident+2) << *retCols[i]; // WIP replace with constant if (retCols[i]->colSource() & SELECT_SUB) { - output << "select sub -- " << endl; + output << endlWithIndent(ident + 2) << "select sub -- "; CalpontSelectExecutionPlan* plan = dynamic_cast(fSelectSubList[seq++].get()); - if (plan) - output << "{" << *plan << "}" << endl; + printSubCSEP(ident + 2, output, plan); } } // From Clause CalpontSelectExecutionPlan::TableList tables = tableList(); - output << ">>From Tables" << endl; + output << endlWithIndent(ident) <<">>From Tables"; seq = 0; for (unsigned int i = 0; i < tables.size(); i++) @@ -245,42 +265,50 @@ string CalpontSelectExecutionPlan::toString() const // derived table if (tables[i].schema.length() == 0 && tables[i].table.length() == 0) { - output << "derived table - " << tables[i].alias << endl; + output << endlWithIndent(ident+2) << "derived table - " << tables[i].alias; CalpontSelectExecutionPlan* plan = dynamic_cast(fDerivedTableList[seq++].get()); - if (plan) - output << "{" << *plan << "}" << endl; + printSubCSEP(ident + 2, output, plan); } else { - output << tables[i] << endl; + output << endlWithIndent(ident+2) << tables[i]; } } // Filters - output << ">>Filters" << endl; + output << endlWithIndent(ident) << ">>Filters"; if (filters() != nullptr) + { + output << endlWithIndent(ident + 2); filters()->walk(ParseTree::print, output); + } else - output << "empty filter tree" << endl; + { + output << endlWithIndent(ident + 2) << "empty filter tree"; + } // Group by columns const CalpontSelectExecutionPlan::GroupByColumnList& gbc = groupByCols(); if (gbc.size() > 0) { - output << ">>Group By Columns" << endl; + output << endlWithIndent(ident) << ">>Group By Columns"; + output << std::string(ident, ' '); for (unsigned int i = 0; i < gbc.size(); i++) - output << *gbc[i] << endl; + { + output << endlWithIndent(ident + 2) << *gbc[i]; + } + output << std::string(ident, ' '); } // Having if (having() != nullptr) { - output << ">>Having" << endl; + output << endlWithIndent(ident) << ">>Having" << endlWithIndent(ident + 2); having()->walk(ParseTree::print, output); } @@ -289,39 +317,42 @@ string CalpontSelectExecutionPlan::toString() const if (obc.size() > 0) { - output << ">>Order By Columns" << endl; + output << endlWithIndent(ident) << ">>Order By Columns"; for (unsigned int i = 0; i < obc.size(); i++) - output << *obc[i] << endl; + output << endlWithIndent(ident + 2) << *obc[i]; } - output << "SessionID: " << fSessionID << endl; - output << "TxnID: " << fTxnID << endl; - output << "VerID: " << fVerID << endl; - output << "TraceFlags: " << fTraceFlags << endl; - output << "StatementID: " << fStatementID << endl; - output << "DistUnionNum: " << (int)fDistinctUnionNum << endl; - output << "Limit: " << fLimitStart << " - " << fLimitNum << endl; - output << "String table threshold: " << fStringTableThreshold << endl; + output << endlWithIndent(ident) << "SessionID: " << fSessionID; + output << endlWithIndent(ident) << "TxnID: " << fTxnID; + output << endlWithIndent(ident) << "VerID: " << fVerID; + output << endlWithIndent(ident) << "TraceFlags: " << fTraceFlags; + output << endlWithIndent(ident) << "StatementID: " << fStatementID; + output << endlWithIndent(ident) << "DistUnionNum: " << (int)fDistinctUnionNum; + output << endlWithIndent(ident) << "Limit: " << fLimitStart << " - " << fLimitNum; + output << endlWithIndent(ident) << "String table threshold: " << fStringTableThreshold; - output << "--- Column Map ---" << endl; + output << endlWithIndent(ident) << "--- Column Map ---"; CalpontSelectExecutionPlan::ColumnMap::const_iterator iter; for (iter = columnMap().begin(); iter != columnMap().end(); iter++) - output << (*iter).first << " : " << (*iter).second << endl; + { + output << endlWithIndent(ident + 2) << (*iter).first << " : " << (*iter).second; + } - output << "UUID: " << fUuid << endl; - output << "QueryType: " << queryType() << endl; + output << endlWithIndent(ident) << "UUID: " << fUuid; + output << endlWithIndent(ident) << "QueryType: " << queryType(); if (!unionVec().empty()) - output << "\n--- Union Unit ---" << endl; + { + output << endlWithIndent(ident) << "--- Union Unit ---"; + } for (unsigned i = 0; i < unionVec().size(); i++) { CalpontSelectExecutionPlan* plan = dynamic_cast(unionVec()[i].get()); - if (plan) - output << "{" << *plan << "}\n" << endl; + printSubCSEP(ident, output, plan); } return output.str(); @@ -832,4 +863,107 @@ void CalpontSelectExecutionPlan::pron(std::string&& pron) fPron = pron; } +// This routine doesn't copy derived table list, union vector, select subqueries, subquery list, and subselects. +execplan::SCSEP CalpontSelectExecutionPlan::cloneWORecursiveSelects() +{ + execplan::SCSEP newPlan(new CalpontSelectExecutionPlan(fLocation)); + + // Copy simple members + newPlan->fLocalQuery = fLocalQuery; + newPlan->fTableAlias = fTableAlias; + newPlan->fLocation = fLocation; + newPlan->fDependent = fDependent; + newPlan->fData = fData; + newPlan->fSessionID = fSessionID; + newPlan->fTxnID = fTxnID; + newPlan->fVerID = fVerID; + newPlan->fSchemaName = fSchemaName; + newPlan->fTableName = fTableName; + newPlan->fTraceFlags = fTraceFlags; + newPlan->fStatementID = fStatementID; + newPlan->fDistinct = fDistinct; + newPlan->fOverrideLargeSideEstimate = fOverrideLargeSideEstimate; + newPlan->fDistinctUnionNum = fDistinctUnionNum; + newPlan->fSubType = fSubType; + newPlan->fDerivedTbAlias = fDerivedTbAlias; + newPlan->fDerivedTbView = fDerivedTbView; + newPlan->fLimitStart = fLimitStart; + newPlan->fLimitNum = fLimitNum; + newPlan->fHasOrderBy = fHasOrderBy; + newPlan->fStringScanThreshold = fStringScanThreshold; + newPlan->fQueryType = fQueryType; + newPlan->fPriority = fPriority; + newPlan->fStringTableThreshold = fStringTableThreshold; + newPlan->fSpecHandlerProcessed = fSpecHandlerProcessed; + newPlan->fOrderByThreads = fOrderByThreads; + newPlan->fUuid = fUuid; + newPlan->fDJSSmallSideLimit = fDJSSmallSideLimit; + newPlan->fDJSLargeSideLimit = fDJSLargeSideLimit; + newPlan->fDJSPartitionSize = fDJSPartitionSize; + newPlan->fDJSMaxPartitionTreeDepth = fDJSMaxPartitionTreeDepth; + newPlan->fDJSForceRun = fDJSForceRun; + newPlan->fMaxPmJoinResultCount = fMaxPmJoinResultCount; + newPlan->fUMMemLimit = fUMMemLimit; + newPlan->fIsDML = fIsDML; + newPlan->fTimeZone = fTimeZone; + newPlan->fPron = fPron; + newPlan->fWithRollup = fWithRollup; + + // Deep copy of ReturnedColumnList + ReturnedColumnList newReturnedCols; + for (const auto& col : fReturnedCols) + { + if (col) + newReturnedCols.push_back(SRCP(col->clone())); + } + newPlan->returnedCols(newReturnedCols); + + // Deep copy of filters + if (fFilters) + newPlan->filters(new ParseTree(*fFilters)); + + // Deep copy of filter token list + newPlan->filterTokenList(fFilterTokenList); + newPlan->havingTokenList(fHavingTokenList); + + // Deep copy of group by columns + GroupByColumnList newGroupByCols; + for (const auto& col : fGroupByCols) + { + if (col) + newGroupByCols.push_back(SRCP(col->clone())); + } + newPlan->groupByCols(newGroupByCols); + + // Deep copy of having clause + if (fHaving) + newPlan->having(new ParseTree(*fHaving)); + + // Deep copy of order by columns + OrderByColumnList newOrderByCols; + for (const auto& col : fOrderByCols) + { + if (col) + newOrderByCols.push_back(SRCP(col->clone())); + } + newPlan->orderByCols(newOrderByCols); + + // Deep copy of column map + ColumnMap newColumnMap; + for (const auto& entry : fColumnMap) + { + if (entry.second) + newColumnMap.insert(ColumnMap::value_type(entry.first, SRCP(entry.second->clone()))); + } + newPlan->columnMap(newColumnMap); + + // Copy RM parameters + newPlan->rmParms(frmParms); + + // Deep copy of table list + newPlan->tableList(fTableList); + + return newPlan; +} + } // namespace execplan diff --git a/dbcon/execplan/calpontselectexecutionplan.h b/dbcon/execplan/calpontselectexecutionplan.h index 0fa8cec96..e9425ed45 100644 --- a/dbcon/execplan/calpontselectexecutionplan.h +++ b/dbcon/execplan/calpontselectexecutionplan.h @@ -159,6 +159,10 @@ class CalpontSelectExecutionPlan : public CalpontExecutionPlan */ ~CalpontSelectExecutionPlan() override; + /** + * Clones this CSEP without recursive selects for optimizer purposes + */ + execplan::SCSEP cloneWORecursiveSelects(); /** * Access and mutator methods */ @@ -797,7 +801,8 @@ class CalpontSelectExecutionPlan : public CalpontExecutionPlan * Return a string rep of the CSEP * @return a string */ - virtual std::string toString() const; + void printSubCSEP(const size_t& ident, ostringstream& output, CalpontSelectExecutionPlan*& plan) const; + virtual std::string toString(const size_t ident = 0) const; /** @brief Is this an internal query? * diff --git a/dbcon/execplan/calpontsystemcatalog.h b/dbcon/execplan/calpontsystemcatalog.h index 1963e7999..dee640c3e 100644 --- a/dbcon/execplan/calpontsystemcatalog.h +++ b/dbcon/execplan/calpontsystemcatalog.h @@ -458,8 +458,13 @@ class CalpontSystemCatalog : public datatypes::SystemCatalog { return !(*this == rhs); } + bool isColumnstore() const + { + return fisColumnStore; + } void serialize(messageqcpp::ByteStream&) const; void unserialize(messageqcpp::ByteStream&); + friend std::ostream& operator<<(std::ostream& os, const TableAliasName& rhs); }; diff --git a/dbcon/joblist/subquerytransformer.cpp b/dbcon/joblist/subquerytransformer.cpp index 1fd364bd8..96562ad93 100644 --- a/dbcon/joblist/subquerytransformer.cpp +++ b/dbcon/joblist/subquerytransformer.cpp @@ -79,9 +79,6 @@ SubQueryTransformer::~SubQueryTransformer() SJSTEP& SubQueryTransformer::makeSubQueryStep(execplan::CalpontSelectExecutionPlan* csep, bool subInFromClause) { - if (fOutJobInfo->trace) - cout << (*csep) << endl; - // Setup job info, job list and error status relation. fSubJobInfo = new JobInfo(fOutJobInfo->rm); fSubJobInfo->sessionId = fOutJobInfo->sessionId; diff --git a/dbcon/mysql/CMakeLists.txt b/dbcon/mysql/CMakeLists.txt index 7bd6ed78b..711c0a188 100644 --- a/dbcon/mysql/CMakeLists.txt +++ b/dbcon/mysql/CMakeLists.txt @@ -23,6 +23,8 @@ set(libcalmysql_SRCS ha_mcs_impl.cpp ha_mcs_dml.cpp ha_mcs_ddl.cpp + ha_mcs_execplan_helpers.cpp + ha_mcs_execplan_walks.cpp ha_mcs_execplan.cpp ha_scalar_sub.cpp ha_in_sub.cpp @@ -40,6 +42,7 @@ set(libcalmysql_SRCS is_columnstore_files.cpp is_columnstore_extents.cpp columnstore_dataload.cpp + rulebased_optimizer.cpp ) set_source_files_properties(ha_mcs.cpp PROPERTIES COMPILE_FLAGS "-fno-implicit-templates") diff --git a/dbcon/mysql/ha_mcs.cpp b/dbcon/mysql/ha_mcs.cpp index 8232146c4..c1c7456ac 100644 --- a/dbcon/mysql/ha_mcs.cpp +++ b/dbcon/mysql/ha_mcs.cpp @@ -1828,14 +1828,20 @@ static int columnstore_init_func(void* p) fprintf(stderr, "Columnstore: Started; Version: %s-%s\n", columnstore_version.c_str(), columnstore_release.c_str()); + plugin_ref plugin_innodb; LEX_CSTRING name = {STRING_WITH_LEN("INNODB")}; - auto* plugin_innodb = ha_resolve_by_name(0, &name, 0); - if (!plugin_innodb || plugin_state(plugin_innodb) != PLUGIN_IS_READY) + if (get_innodb_queries_uses_mcs()) { - DBUG_RETURN(HA_ERR_RETRY_INIT); - } + std::cerr << "Columnstore: innodb_queries_uses_mcs is set, looking for InnoDB plugin." << std::endl; + plugin_innodb = ha_resolve_by_name(0, &name, 0); + if (!plugin_innodb || plugin_state(plugin_innodb) != PLUGIN_IS_READY) + { + DBUG_RETURN(HA_ERR_RETRY_INIT); + } + } + strncpy(cs_version, columnstore_version.c_str(), sizeof(cs_version) - 1); cs_version[sizeof(cs_version) - 1] = 0; @@ -1844,10 +1850,14 @@ static int columnstore_init_func(void* p) mcs_hton = (handlerton*)p; + std::cerr << "Columnstore: init pthread_mutex_init" << std::endl; (void)pthread_mutex_init(&mcs_mutex, MY_MUTEX_INIT_FAST); + std::cerr << "Columnstore: init my_hash_init" << std::endl; (void)my_hash_init(PSI_NOT_INSTRUMENTED, &mcs_open_tables, system_charset_info, 32, 0, 0, (my_hash_get_key)mcs_get_key, 0, 0); + std::cerr << "Columnstore: init mcs_hton attributes" << std::endl; + mcs_hton->create = ha_mcs_cache_create_handler; mcs_hton->panic = 0; mcs_hton->flags = HTON_CAN_RECREATE | HTON_NO_PARTITION; @@ -1863,10 +1873,13 @@ static int columnstore_init_func(void* p) if (get_innodb_queries_uses_mcs()) { + std::cerr << "Columnstore: innodb_queries_uses_mcs is set, redirecting all InnoDB queries to Columnstore." << std::endl; + auto* innodb_hton = plugin_hton(plugin_innodb); int error = innodb_hton == nullptr; // Engine must exists! if (error) { + std::cerr << "Columnstore: innodb_queries_uses_mcs is set, but could not find InnoDB plugin." << std::endl; my_error(HA_ERR_INITIALIZATION, MYF(0), "Could not find storage engine %s", name.str); } innodb_hton->create_select = create_columnstore_select_handler; @@ -1874,11 +1887,13 @@ static int columnstore_init_func(void* p) } #ifdef HAVE_PSI_INTERFACE + std::cerr << "Columnstore: Registering mutex for Columnstore write cache." << std::endl; uint count = sizeof(all_mutexes) / sizeof(all_mutexes[0]); mysql_mutex_register("ha_mcs_cache", all_mutexes, count); #else (void)key_LOCK_cache_share; #endif + std::cerr << "Columnstore: Initialising mutex for Columnstore write cache." << std::endl; mysql_mutex_init(key_LOCK_cache_share, &LOCK_cache_share, MY_MUTEX_INIT_FAST); DBUG_RETURN(0); diff --git a/dbcon/mysql/ha_mcs_execplan.cpp b/dbcon/mysql/ha_mcs_execplan.cpp index c81a3d39c..6e19dda44 100644 --- a/dbcon/mysql/ha_mcs_execplan.cpp +++ b/dbcon/mysql/ha_mcs_execplan.cpp @@ -54,6 +54,9 @@ using namespace logging; #include "mcsv1_udaf.h" +#include "ha_mcs_execplan_walks.h" +#include "ha_mcs_execplan_parseinfo_bits.h" +#include "ha_mcs_execplan_helpers.h" #include "ha_mcs_impl_if.h" #include "ha_mcs_sysvars.h" #include "ha_subquery.h" @@ -78,6 +81,7 @@ using namespace cal_impl_if; #include "predicateoperator.h" #include "rewrites.h" #include "rowcolumn.h" +#include "rulebased_optimizer.h" #include "selectfilter.h" #include "simplecolumn_decimal.h" #include "simplecolumn_int.h" @@ -92,50 +96,6 @@ using namespace funcexp; #include "vlarray.h" -const uint64_t AGG_BIT = 0x01; -const uint64_t SUB_BIT = 0x02; -const uint64_t AF_BIT = 0x04; -const uint64_t CORRELATED = 0x08; - -// In certain cases, gp_walk is called recursively. When done so, -// we need to bookmark the rcWorkStack for those cases where a constant -// expression such as 1=1 is used in an if statement or function call. -// This is a seriously bad kludge for MariaDB bug 750. -// -// BM => BookMark -// HWM => HighWaterMark -class RecursionCounter -{ - private: - RecursionCounter() - { - } - - public: - RecursionCounter(gp_walk_info* gwip) : fgwip(gwip) - { - ++fgwip->recursionLevel; - - if (fgwip->recursionLevel > fgwip->recursionHWM) - { - fgwip->rcBookMarkStack.push(fgwip->rcWorkStack.size()); - fgwip->recursionHWM = fgwip->recursionLevel; - } - } - ~RecursionCounter() - { - --fgwip->recursionLevel; - - if (fgwip->recursionLevel < fgwip->recursionHWM - 1) - { - fgwip->rcBookMarkStack.pop(); - --fgwip->recursionHWM; - } - } - - gp_walk_info* fgwip; -}; - #include "ha_view.h" namespace cal_impl_if @@ -328,12 +288,12 @@ static execplan::Partitions getPartitions(TABLE* table) while ((pe = part_el_it++)) // this is how server does it. { - // TODO: partition names are not just strings in - #if MYSQL_VERSION_ID >= 110501 - result.fPartNames.emplace_back(pe->partition_name.str); - #else - result.fPartNames.emplace_back(pe->partition_name); - #endif +// TODO: partition names are not just strings in +#if MYSQL_VERSION_ID >= 110501 + result.fPartNames.emplace_back(pe->partition_name.str); +#else + result.fPartNames.emplace_back(pe->partition_name); +#endif } } return result; @@ -454,21 +414,6 @@ void clearDeleteStacks(gp_walk_info& gwi) gwi.viewList.clear(); } -bool nonConstFunc(Item_func* ifp) -{ - if (strcasecmp(ifp->func_name(), "rand") == 0 || strcasecmp(ifp->func_name(), "sysdate") == 0 || - strcasecmp(ifp->func_name(), "idblocalpm") == 0) - return true; - - for (uint32_t i = 0; i < ifp->argument_count(); i++) - { - if (ifp->arguments()[i]->type() == Item::FUNC_ITEM && nonConstFunc(((Item_func*)ifp->arguments()[i]))) - return true; - } - - return false; -} - /*@brief getColNameFromItem - builds a name from an Item */ /*********************************************************** * DESCRIPTION: @@ -809,659 +754,6 @@ string getViewName(TABLE_LIST* table_ptr) return viewName; } -#ifdef DEBUG_WALK_COND -void debug_walk(const Item* item, void* arg) -{ - switch (item->type()) - { - case Item::FIELD_ITEM: - { - Item_field* ifp = (Item_field*)item; - cerr << "FIELD_ITEM: " << (ifp->db_name.str ? ifp->db_name.str : "") << '.' << bestTableName(ifp) << '.' - << ifp->field_name.str << endl; - break; - } - case Item::CONST_ITEM: - { - switch (item->cmp_type()) - { - case INT_RESULT: - { - Item_int* iip = (Item_int*)item; - cerr << "INT_ITEM: "; - - if (iip->name.length) - cerr << iip->name.str << " (from name string)" << endl; - else - cerr << iip->val_int() << endl; - - break; - } - case STRING_RESULT: - { - Item_string* isp = (Item_string*)item; - String val, *str = isp->val_str(&val); - string valStr; - valStr.assign(str->ptr(), str->length()); - cerr << "STRING_ITEM: >" << valStr << '<' << endl; - break; - } - case REAL_RESULT: - { - cerr << "REAL_ITEM" << endl; - break; - } - case DECIMAL_RESULT: - { - cerr << "DECIMAL_ITEM" << endl; - break; - } - case TIME_RESULT: - { - String val, *str = NULL; - Item_temporal_literal* itp = (Item_temporal_literal*)item; - str = itp->val_str(&val); - cerr << "DATE ITEM: "; - - if (str) - cerr << ": (" << str->ptr() << ')' << endl; - else - cerr << ": " << endl; - - break; - } - default: - { - cerr << ": Unknown cmp_type" << endl; - break; - } - } - break; - } - case Item::FUNC_ITEM: - { - Item_func* ifp = (Item_func*)item; - Item_func_opt_neg* inp; - cerr << "FUNC_ITEM: "; - - switch (ifp->functype()) - { - case Item_func::UNKNOWN_FUNC: // 0 - cerr << ifp->func_name() << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::GT_FUNC: // 7 - cerr << '>' << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::EQ_FUNC: // 1 - cerr << '=' << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::GE_FUNC: cerr << ">=" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::LE_FUNC: cerr << "<=" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::LT_FUNC: cerr << '<' << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::NE_FUNC: cerr << "<>" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::NEG_FUNC: // 45 - cerr << "unary minus" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::IN_FUNC: // 16 - inp = (Item_func_opt_neg*)ifp; - - if (inp->negated) - cerr << "not "; - - cerr << "in" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::BETWEEN: - inp = (Item_func_opt_neg*)ifp; - - if (inp->negated) - cerr << "not "; - - cerr << "between" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::ISNULL_FUNC: // 10 - cerr << "is null" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::ISNOTNULL_FUNC: // 11 - cerr << "is not null" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::NOT_ALL_FUNC: cerr << "not_all" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::NOT_FUNC: cerr << "not_func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::TRIG_COND_FUNC: - cerr << "trig_cond_func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::ISNOTNULLTEST_FUNC: - cerr << "isnotnulltest_func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::MULT_EQUAL_FUNC: - { - cerr << "mult_equal_func:" << " (" << ifp->functype() << ")" << endl; - Item_equal* item_eq = (Item_equal*)ifp; - Item_equal_fields_iterator it(*item_eq); - Item* item; - - while ((item = it++)) - { - Field* equal_field = it.get_curr_field(); - cerr << equal_field->field_name.str << endl; - } - - break; - } - - case Item_func::EQUAL_FUNC: cerr << "equal func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::FT_FUNC: cerr << "ft func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::LIKE_FUNC: cerr << "like func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::COND_AND_FUNC: - cerr << "cond and func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::COND_OR_FUNC: cerr << "cond or func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::XOR_FUNC: cerr << "xor func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::INTERVAL_FUNC: - cerr << "interval func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_EQUALS_FUNC: - cerr << "sp equals func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_DISJOINT_FUNC: - cerr << "sp disjoint func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_INTERSECTS_FUNC: - cerr << "sp intersects func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_TOUCHES_FUNC: - cerr << "sp touches func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_CROSSES_FUNC: - cerr << "sp crosses func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_WITHIN_FUNC: - cerr << "sp within func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_CONTAINS_FUNC: - cerr << "sp contains func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_OVERLAPS_FUNC: - cerr << "sp overlaps func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_STARTPOINT: - cerr << "sp startpoint func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_ENDPOINT: - cerr << "sp endpoint func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_EXTERIORRING: - cerr << "sp exteriorring func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_POINTN: cerr << "sp pointn func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::SP_GEOMETRYN: - cerr << "sp geometryn func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_INTERIORRINGN: - cerr << "sp exteriorringn func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::SP_RELATE_FUNC: - cerr << "sp relate func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::NOW_FUNC: cerr << "now func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::SUSERVAR_FUNC: - cerr << "suservar func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::GUSERVAR_FUNC: - cerr << "guservar func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::COLLATE_FUNC: cerr << "collate func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::EXTRACT_FUNC: cerr << "extract func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::CHAR_TYPECAST_FUNC: - cerr << "char typecast func" << " (" << ifp->functype() << ")" << endl; - break; - - case Item_func::FUNC_SP: cerr << "func sp func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::UDF_FUNC: cerr << "udf func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::GSYSVAR_FUNC: cerr << "gsysvar func" << " (" << ifp->functype() << ")" << endl; break; - - case Item_func::DYNCOL_FUNC: cerr << "dyncol func" << " (" << ifp->functype() << ")" << endl; break; - - default: cerr << "type=" << ifp->functype() << endl; break; - } - - break; - } - - case Item::COND_ITEM: - { - Item_cond* icp = (Item_cond*)item; - cerr << "COND_ITEM: " << icp->func_name() << endl; - break; - } - - case Item::SUM_FUNC_ITEM: - { - Item_sum* isp = (Item_sum*)item; - char* item_name = const_cast(item->name.str); - - // MCOL-1052 This is an extended SELECT list item - if (!item_name && isp->get_arg_count() && isp->get_arg(0)->name.length) - { - item_name = const_cast(isp->get_arg(0)->name.str); - } - else if (!item_name && isp->get_arg_count() && isp->get_arg(0)->type() == Item::CONST_ITEM && - isp->get_arg(0)->cmp_type() == INT_RESULT) - { - item_name = (char*)"INT||*"; - } - else if (!item_name) - { - item_name = (char*)""; - } - - switch (isp->sum_func()) - { - case Item_sum::SUM_FUNC: cerr << "SUM_FUNC: " << item_name << endl; break; - - case Item_sum::SUM_DISTINCT_FUNC: cerr << "SUM_DISTINCT_FUNC: " << item_name << endl; break; - - case Item_sum::AVG_FUNC: cerr << "AVG_FUNC: " << item_name << endl; break; - - case Item_sum::COUNT_FUNC: cerr << "COUNT_FUNC: " << item_name << endl; break; - - case Item_sum::COUNT_DISTINCT_FUNC: cerr << "COUNT_DISTINCT_FUNC: " << item_name << endl; break; - - case Item_sum::MIN_FUNC: cerr << "MIN_FUNC: " << item_name << endl; break; - - case Item_sum::MAX_FUNC: cerr << "MAX_FUNC: " << item_name << endl; break; - - case Item_sum::UDF_SUM_FUNC: cerr << "UDAF_FUNC: " << item_name << endl; break; - - default: cerr << "SUM_FUNC_ITEM type=" << isp->sum_func() << endl; break; - } - - break; - } - - case Item::SUBSELECT_ITEM: - { - Item_subselect* sub = (Item_subselect*)item; - cerr << "SUBSELECT Item: "; - - switch (sub->substype()) - { - case Item_subselect::EXISTS_SUBS: cerr << "EXISTS"; break; - - case Item_subselect::IN_SUBS: cerr << "IN"; break; - - default: cerr << sub->substype(); break; - } - - cerr << endl; - JOIN* join = sub->get_select_lex()->join; - - if (join) - { - Item_cond* cond = static_cast(join->conds); - - if (cond) - cond->traverse_cond(debug_walk, arg, Item::POSTFIX); - } - - cerr << "Finish subselect item traversing" << endl; - break; - } - - case Item::REF_ITEM: - { - Item_ref* ref = (Item_ref*)item; - - if (ref->real_item()->type() == Item::CACHE_ITEM) - { - Item* field = ((Item_cache*)ref->real_item())->get_example(); - - if (field->type() == Item::FIELD_ITEM) - { - Item_field* ifp = (Item_field*)field; - // ifp->cached_table->select_lex->select_number gives the select level. - // could be used on alias. - // could also be used to tell correlated join (equal level). - cerr << "CACHED REF FIELD_ITEM: " << ifp->db_name.str << '.' << bestTableName(ifp) << '.' - << ifp->field_name.str << endl; - break; - } - else if (field->type() == Item::FUNC_ITEM) - { - Item_func* ifp = (Item_func*)field; - cerr << "CACHED REF FUNC_ITEM " << ifp->func_name() << endl; - } - else if (field->type() == Item::REF_ITEM) - { - Item_ref* ifr = (Item_ref*)field; - string refType; - string realType; - - switch (ifr->ref_type()) - { - case Item_ref::REF: refType = "REF"; break; - - case Item_ref::DIRECT_REF: refType = "DIRECT_REF"; break; - - case Item_ref::VIEW_REF: refType = "VIEW_REF"; break; - - case Item_ref::OUTER_REF: refType = "OUTER_REF"; break; - - case Item_ref::AGGREGATE_REF: refType = "AGGREGATE_REF"; break; - - default: refType = "UNKNOWN"; break; - } - - switch (ifr->real_type()) - { - case Item::FIELD_ITEM: - { - Item_field* ifp = (Item_field*)(*(ifr->ref)); - realType = "FIELD_ITEM "; - realType += ifp->db_name.str; - realType += '.'; - realType += bestTableName(ifp); - realType += '.'; - realType += ifp->field_name.str; - break; - } - - case Item::SUM_FUNC_ITEM: - { - Item_sum* isp = (Item_sum*)(*(ifr->ref)); - - if (isp->sum_func() == Item_sum::GROUP_CONCAT_FUNC) - realType = "GROUP_CONCAT_FUNC"; - else - realType = "SUM_FUNC_ITEM"; - - break; - } - - case Item::REF_ITEM: - // Need recursion here - realType = "REF_ITEM"; - break; - - case Item::FUNC_ITEM: - { - Item_func* ifp = (Item_func*)(*(ifr->ref)); - realType = "FUNC_ITEM "; - realType += ifp->func_name(); - break; - } - - default: - { - realType = "UNKNOWN"; - } - } - - cerr << "CACHED REF_ITEM: ref type " << refType.c_str() << " real type " << realType.c_str() - << endl; - break; - } - else - { - cerr << "REF_ITEM with CACHE_ITEM type unknown " << field->type() << endl; - } - } - else if (ref->real_item()->type() == Item::FIELD_ITEM) - { - Item_field* ifp = (Item_field*)ref->real_item(); - - // MCOL-1052 The field referenced presumable came from - // extended SELECT list. - if (!ifp->field_name.str) - { - cerr << "REF extra FIELD_ITEM: " << ifp->name.str << endl; - } - else - { - cerr << "REF FIELD_ITEM: " << ifp->db_name.str << '.' << bestTableName(ifp) << '.' - << ifp->field_name.str << endl; - } - - break; - } - else if (ref->real_item()->type() == Item::FUNC_ITEM) - { - Item_func* ifp = (Item_func*)ref->real_item(); - cerr << "REF FUNC_ITEM " << ifp->func_name() << endl; - } - else if (ref->real_item()->type() == Item::WINDOW_FUNC_ITEM) - { - Item_window_func* ifp = (Item_window_func*)ref->real_item(); - cerr << "REF WINDOW_FUNC_ITEM " << ifp->window_func()->func_name() << endl; - } - else - { - cerr << "UNKNOWN REF ITEM type " << ref->real_item()->type() << endl; - } - - break; - } - - case Item::ROW_ITEM: - { - Item_row* row = (Item_row*)item; - cerr << "ROW_ITEM: " << endl; - - for (uint32_t i = 0; i < row->cols(); i++) - debug_walk(row->element_index(i), 0); - - break; - } - - case Item::EXPR_CACHE_ITEM: - { - cerr << "Expr Cache Item" << endl; - ((Item_cache_wrapper*)item)->get_orig_item()->traverse_cond(debug_walk, arg, Item::POSTFIX); - break; - } - - case Item::CACHE_ITEM: - { - Item_cache* isp = (Item_cache*)item; - // MCOL-46 isp->val_str() can cause a call to execute a subquery. We're not set up - // to execute yet. -#if 0 - - switch (item->result_type()) - { - case STRING_RESULT: - cerr << "CACHE_STRING_ITEM" << endl; - break; - - case REAL_RESULT: - cerr << "CACHE_REAL_ITEM " << isp->val_real() << endl; - break; - - case INT_RESULT: - cerr << "CACHE_INT_ITEM " << isp->val_int() << endl; - break; - - case ROW_RESULT: - cerr << "CACHE_ROW_ITEM" << endl; - break; - - case DECIMAL_RESULT: - cerr << "CACHE_DECIMAL_ITEM " << isp->val_decimal() << endl; - break; - - default: - cerr << "CACHE_UNKNOWN_ITEM" << endl; - break; - } - -#endif - Item* field = isp->get_example(); - - if (field->type() == Item::FIELD_ITEM) - { - Item_field* ifp = (Item_field*)field; - // ifp->cached_table->select_lex->select_number gives the select level. - // could be used on alias. - // could also be used to tell correlated join (equal level). - cerr << "CACHED FIELD_ITEM: " << ifp->db_name.str << '.' << bestTableName(ifp) << '.' - << ifp->field_name.str << endl; - break; - } - else if (field->type() == Item::REF_ITEM) - { - Item_ref* ifr = (Item_ref*)field; - string refType; - string realType; - - switch (ifr->ref_type()) - { - case Item_ref::REF: refType = "REF"; break; - - case Item_ref::DIRECT_REF: refType = "DIRECT_REF"; break; - - case Item_ref::VIEW_REF: refType = "VIEW_REF"; break; - - case Item_ref::OUTER_REF: refType = "OUTER_REF"; break; - - case Item_ref::AGGREGATE_REF: refType = "AGGREGATE_REF"; break; - - default: refType = "UNKNOWN"; break; - } - - switch (ifr->real_type()) - { - case Item::FIELD_ITEM: - { - Item_field* ifp = (Item_field*)(*(ifr->ref)); - realType = "FIELD_ITEM "; - realType += ifp->db_name.str; - realType += '.'; - realType += bestTableName(ifp); - realType += '.'; - realType += ifp->field_name.str; - break; - } - - case Item::SUM_FUNC_ITEM: - { - Item_sum* isp = (Item_sum*)(*(ifr->ref)); - - if (isp->sum_func() == Item_sum::GROUP_CONCAT_FUNC) - realType = "GROUP_CONCAT_FUNC"; - else - realType = "SUM_FUNC_ITEM"; - - break; - } - - case Item::REF_ITEM: - // Need recursion here - realType = "REF_ITEM"; - break; - - case Item::FUNC_ITEM: - { - Item_func* ifp = (Item_func*)(*(ifr->ref)); - realType = "FUNC_ITEM "; - realType += ifp->func_name(); - break; - } - - default: - { - realType = "UNKNOWN"; - } - } - - cerr << "CACHE_ITEM ref type " << refType.c_str() << " real type " << realType.c_str() << endl; - break; - } - else if (field->type() == Item::FUNC_ITEM) - { - Item_func* ifp = (Item_func*)field; - cerr << "CACHE_ITEM FUNC_ITEM " << ifp->func_name() << endl; - break; - } - else - { - cerr << "CACHE_ITEM type unknown " << field->type() << endl; - } - - break; - } - - case Item::WINDOW_FUNC_ITEM: - { - Item_window_func* ifp = (Item_window_func*)item; - cerr << "Window Function Item " << ifp->window_func()->func_name() << endl; - break; - } - - case Item::NULL_ITEM: - { - cerr << "NULL item" << endl; - break; - } - - case Item::TYPE_HOLDER: - { - cerr << "TYPE_HOLDER item with cmp_type " << item->cmp_type() << endl; - break; - } - - default: - { - cerr << "UNKNOWN_ITEM type " << item->type() << endl; - break; - } - } -} -#endif - void buildNestedJoinLeafTables(List& join_list, std::set& leafTables) { @@ -3213,7 +2505,10 @@ CalpontSystemCatalog::ColType fieldType_MysqlToIDB(const Field* field) case DECIMAL_RESULT: { - Field_decimal* idp = (Field_decimal*)field; + const Field_new_decimal* idp = dynamic_cast(field); + + idbassert(idp); + ct.colDataType = CalpontSystemCatalog::DECIMAL; ct.colWidth = 8; ct.scale = idp->dec; @@ -3437,162 +2732,6 @@ ReturnedColumn* buildReturnedColumnNull(gp_walk_info& gwi) return rc; } -class ValStrStdString : public string -{ - bool mIsNull; - - public: - ValStrStdString(Item* item) - { - String val, *str = item->val_str(&val); - mIsNull = (str == nullptr); - DBUG_ASSERT(mIsNull == item->null_value); - if (!mIsNull) - assign(str->ptr(), str->length()); - } - bool isNull() const - { - return mIsNull; - } -}; - -/* - Create a ConstantColumn according to cmp_type(). - But do not set the time zone yet. - - Handles NOT NULL values. - - Three ways of value extraction are used depending on the data type: - 1. Using a native val_xxx(). - 2. Using val_str() with further convertion to the native representation. - 3. Using both val_str() and a native val_xxx(). - - We should eventually get rid of N2 and N3 and use N1 for all data types: - - N2 contains a redundant code for str->native conversion. - It should be replaced to an existing code (a Type_handler method call?). - - N3 performs double evalation of the value, which may cause - various negative effects (double side effects or double warnings). -*/ -static ConstantColumn* newConstantColumnNotNullUsingValNativeNoTz(Item* item, gp_walk_info& gwi) -{ - DBUG_ASSERT(item->const_item()); - - switch (item->cmp_type()) - { - case INT_RESULT: - { - if (item->unsigned_flag) - return new ConstantColumnUInt((uint64_t)item->val_uint(), (int8_t)item->decimal_scale(), - (uint8_t)item->decimal_precision()); - ValStrStdString str(item); - DBUG_ASSERT(!str.isNull()); - return new ConstantColumnSInt(colType_MysqlToIDB(item), str, (int64_t)item->val_int()); - } - case STRING_RESULT: - { - // Special handling for 0xHHHH literals - if (item->type_handler() == &type_handler_hex_hybrid) - return new ConstantColumn((int64_t)item->val_int(), ConstantColumn::NUM); - ValStrStdString str(item); - DBUG_ASSERT(!str.isNull()); - return new ConstantColumnString(str); - } - case REAL_RESULT: - { - ValStrStdString str(item); - DBUG_ASSERT(!str.isNull()); - return new ConstantColumnReal(colType_MysqlToIDB(item), str, item->val_real()); - } - case DECIMAL_RESULT: - { - ValStrStdString str(item); - DBUG_ASSERT(!str.isNull()); - return buildDecimalColumn(item, str, gwi); - } - case TIME_RESULT: - { - ValStrStdString str(item); - DBUG_ASSERT(!str.isNull()); - return new ConstantColumnTemporal(colType_MysqlToIDB(item), str); - } - default: - { - gwi.fatalParseError = true; - gwi.parseErrorText = "Unknown item type"; - break; - } - } - - return nullptr; -} - -/* - Create a ConstantColumn according to cmp_type(). - But do not set the time zone yet. - - Handles NULL and NOT NULL values. - - Uses a simplified logic regarding to data types: - always extracts the value through val_str(). - - Should probably be joined with the previous function, to have - a single function which can at the same time: - a. handle both NULL and NOT NULL values - b. extract values using a native val_xxx() method, - to avoid possible negative effects mentioned in the comments - to newConstantColumnNotNullUsingValNativeNoTz(). -*/ -static ConstantColumn* newConstantColumnMaybeNullFromValStrNoTz(const Item* item, - const ValStrStdString& valStr, - gp_walk_info& gwi) -{ - if (valStr.isNull()) - return new ConstantColumnNull(); - - switch (item->result_type()) - { - case STRING_RESULT: return new ConstantColumnString(valStr); - case DECIMAL_RESULT: return buildDecimalColumn(item, valStr, gwi); - case TIME_RESULT: - case INT_RESULT: - case REAL_RESULT: - case ROW_RESULT: return new ConstantColumnNum(colType_MysqlToIDB(item), valStr); - } - return nullptr; -} - -// Create a ConstantColumn from a previously evaluated val_str() result, -// Supports both NULL and NOT NULL values. -// Sets the time zone according to gwi. - -static ConstantColumn* buildConstantColumnMaybeNullFromValStr(const Item* item, const ValStrStdString& valStr, - gp_walk_info& gwi) -{ - ConstantColumn* rc = newConstantColumnMaybeNullFromValStrNoTz(item, valStr, gwi); - if (rc) - rc->timeZone(gwi.timeZone); - return rc; -} - -// Create a ConstantColumn by calling val_str(). -// Supports both NULL and NOT NULL values. -// Sets the time zone according to gwi. - -static ConstantColumn* buildConstantColumnMaybeNullUsingValStr(Item* item, gp_walk_info& gwi) -{ - return buildConstantColumnMaybeNullFromValStr(item, ValStrStdString(item), gwi); -} - -// Create a ConstantColumn for a NOT NULL expression. -// Sets the time zone according to gwi. -static ConstantColumn* buildConstantColumnNotNullUsingValNative(Item* item, gp_walk_info& gwi) -{ - ConstantColumn* rc = newConstantColumnNotNullUsingValNativeNoTz(item, gwi); - if (rc) - rc->timeZone(gwi.timeZone); - return rc; -} - ReturnedColumn* buildReturnedColumnBody(Item* item, gp_walk_info& gwi, bool& nonSupport, bool /*isRefItem*/) { ReturnedColumn* rc = NULL; @@ -4590,10 +3729,10 @@ ReturnedColumn* buildFunctionColumnBody(Item_func* ifp, gp_walk_info& gwi, bool& } if (funcName == "last_day") { - CalpontSystemCatalog::ColType ct; - ct.colDataType = CalpontSystemCatalog::DATE; - ct.colWidth = 4; - fc->resultType(ct); + CalpontSystemCatalog::ColType ct; + ct.colDataType = CalpontSystemCatalog::DATE; + ct.colWidth = 4; + fc->resultType(ct); } #if 0 @@ -5088,21 +4227,6 @@ class ConstArgParam } }; -static bool isSupportedAggregateWithOneConstArg(const Item_sum* item, Item** orig_args) -{ - if (item->argument_count() != 1 || !orig_args[0]->const_item()) - return false; - switch (orig_args[0]->cmp_type()) - { - case INT_RESULT: - case STRING_RESULT: - case REAL_RESULT: - case DECIMAL_RESULT: return true; - default: break; - } - return false; -} - static void processAggregateColumnConstArg(gp_walk_info& gwi, SRCP& parm, AggregateColumn* ac, Item* sfitemp, ConstArgParam& constParam) { @@ -5957,923 +5081,6 @@ void castTypeArgs(gp_walk_info* gwip, Item_func* ifp, FunctionParm& functionParm functionParms.push_back(sptp); } -bool isSecondArgumentConstItem(Item_func* ifp) -{ - return (ifp->argument_count() == 2 && ifp->arguments()[1]->type() == Item::CONST_ITEM); -} - -// SELECT ... WHERE NOT IN (SELECT ); -bool isNotFuncAndConstScalarSubSelect(Item_func* ifp, const std::string& funcName) -{ - return (ifp->with_subquery() && funcName == "not" && ifp->argument_count() == 1 && - ifp->arguments()[0]->type() == Item::FUNC_ITEM && - std::string(((Item_func*)ifp->arguments()[0])->func_name()) == "=" && - isSecondArgumentConstItem((Item_func*)ifp->arguments()[0])); -} - -void gp_walk(const Item* item, void* arg) -{ - gp_walk_info* gwip = static_cast(arg); - idbassert(gwip); - - // Bailout... - if (gwip->fatalParseError) - return; - - RecursionCounter r(gwip); // Increments and auto-decrements upon exit. - - Item::Type itype = item->type(); - - // Allow to process XOR(which is Item_func) like other logical operators (which are Item_cond) - if (itype == Item::FUNC_ITEM && ((Item_func*)item)->functype() == Item_func::XOR_FUNC) - itype = Item::COND_ITEM; - - switch (itype) - { - case Item::CACHE_ITEM: - { - // The item or condition is cached as per MariaDB server view but - // for InfiniDB it need to be parsed and executed. - // MCOL-1188 and MCOL-1029 - Item* orig_item = ((Item_cache*)item)->get_example(); - orig_item->traverse_cond(gp_walk, gwip, Item::POSTFIX); - break; - } - case Item::FIELD_ITEM: - { - Item_field* ifp = (Item_field*)item; - - if (ifp) - { - // XXX: this looks awfuly wrong. - SimpleColumn* scp = buildSimpleColumn(ifp, *gwip); - - if (!scp) - break; - - string aliasTableName(scp->tableAlias()); - scp->tableAlias(aliasTableName); - gwip->rcWorkStack.push(scp->clone()); - boost::shared_ptr scsp(scp); - gwip->scsp = scsp; - - gwip->funcName.clear(); - gwip->columnMap.insert( - CalpontSelectExecutionPlan::ColumnMap::value_type(string(ifp->field_name.str), scsp)); - - //@bug4636 take where clause column as dummy projection column, but only on local column. - // varbinary aggregate is not supported yet, so rule it out - if (!((scp->joinInfo() & JOIN_CORRELATED) || - scp->colType().colDataType == CalpontSystemCatalog::VARBINARY)) - { - TABLE_LIST* tmp = (ifp->cached_table ? ifp->cached_table : 0); - gwip->tableMap[make_aliastable(scp->schemaName(), scp->tableName(), scp->tableAlias(), - scp->isColumnStore())] = make_pair(1, tmp); - } - } - - break; - } - - case Item::CONST_ITEM: - { - switch (item->cmp_type()) - { - case INT_RESULT: - { - Item* non_const_item = const_cast(item); - gwip->rcWorkStack.push(buildReturnedColumn(non_const_item, *gwip, gwip->fatalParseError)); - break; - } - - case STRING_RESULT: - { - // Special handling for 0xHHHH literals - if (item->type_handler() == &type_handler_hex_hybrid) - { - Item_hex_hybrid* hip = static_cast(const_cast(item)); - gwip->rcWorkStack.push(new ConstantColumn((int64_t)hip->val_int(), ConstantColumn::NUM)); - ConstantColumn* cc = dynamic_cast(gwip->rcWorkStack.top()); - cc->timeZone(gwip->timeZone); - break; - } - - if (item->result_type() == STRING_RESULT) - { - // dangerous cast here - Item* isp = const_cast(item); - String val, *str = isp->val_str(&val); - if (str) - { - string cval; - - if (str->ptr()) - { - cval.assign(str->ptr(), str->length()); - } - - gwip->rcWorkStack.push(new ConstantColumn(cval)); - (dynamic_cast(gwip->rcWorkStack.top()))->timeZone(gwip->timeZone); - break; - } - else - { - gwip->rcWorkStack.push(new ConstantColumn("", ConstantColumn::NULLDATA)); - (dynamic_cast(gwip->rcWorkStack.top()))->timeZone(gwip->timeZone); - break; - } - - gwip->rcWorkStack.push(buildReturnedColumn(isp, *gwip, gwip->fatalParseError)); - } - break; - } - - case REAL_RESULT: - case DECIMAL_RESULT: - case TIME_RESULT: - { - Item* nonConstItem = const_cast(item); - gwip->rcWorkStack.push(buildReturnedColumn(nonConstItem, *gwip, gwip->fatalParseError)); - break; - } - - default: - { - if (gwip->condPush) - { - // push noop for unhandled item - SimpleColumn* rc = new SimpleColumn("noop"); - rc->timeZone(gwip->timeZone); - gwip->rcWorkStack.push(rc); - break; - } - - ostringstream oss; - oss << "Unhandled Item type(): " << item->type(); - gwip->parseErrorText = oss.str(); - gwip->fatalParseError = true; - break; - } - } - break; - } - case Item::NULL_ITEM: - { - if (gwip->condPush) - { - // push noop for unhandled item - SimpleColumn* rc = new SimpleColumn("noop"); - rc->timeZone(gwip->timeZone); - gwip->rcWorkStack.push(rc); - break; - } - - gwip->rcWorkStack.push(new ConstantColumn("", ConstantColumn::NULLDATA)); - (dynamic_cast(gwip->rcWorkStack.top()))->timeZone(gwip->timeZone); - break; - } - - case Item::FUNC_ITEM: - { - Item* ncitem = const_cast(item); - Item_func* ifp = static_cast(ncitem); - - string funcName = ifp->func_name(); - - if (!gwip->condPush) - { - if (!ifp->fixed()) - { - ifp->fix_fields(gwip->thd, &ncitem); - } - - // Special handling for queries of the form: - // SELECT ... WHERE col1 NOT IN (SELECT ); - if (isNotFuncAndConstScalarSubSelect(ifp, funcName)) - { - idbassert(!gwip->ptWorkStack.empty()); - ParseTree* pt = gwip->ptWorkStack.top(); - SimpleFilter* sf = dynamic_cast(pt->data()); - - if (sf) - { - boost::shared_ptr sop(new PredicateOperator("<>")); - sf->op(sop); - return; - } - } - - // Do not call buildSubselectFunc() if the subquery is a const scalar - // subselect of the form: - // (SELECT ) - // As an example: SELECT col1 FROM t1 WHERE col2 = (SELECT 2); - if ((ifp->with_subquery() && !isSecondArgumentConstItem(ifp)) || funcName == "") - { - buildSubselectFunc(ifp, gwip); - return; - } - - if (ifp->argument_count() > 0 && ifp->arguments()) - { - for (uint32_t i = 0; i < ifp->argument_count(); i++) - { - if (ifp->arguments()[i]->type() == Item::SUBSELECT_ITEM) - { - // This is probably NOT IN subquery with derived table in it. - // for some reason, MySQL has not fully optimized the plan at this point. - // noop here, and eventually MySQL will continue its optimization and get - // to rnd_init again. - if (ifp->functype() == Item_func::NOT_FUNC) - return; - - buildSubselectFunc(ifp, gwip); - return; - } - } - } - - if (ifp->functype() == Item_func::TRIG_COND_FUNC && gwip->subQuery) - { - gwip->subQuery->handleFunc(gwip, ifp); - break; - } - - // having clause null function added by MySQL - if (ifp->functype() == Item_func::ISNOTNULLTEST_FUNC) - { - // @bug 4215. remove the argument in rcWorkStack. - if (!gwip->rcWorkStack.empty()) - { - delete gwip->rcWorkStack.top(); - gwip->rcWorkStack.pop(); - } - - break; - } - } - - // try to evaluate const F&E - vector tmpVec; - uint16_t parseInfo = 0; - parse_item(ifp, tmpVec, gwip->fatalParseError, parseInfo, gwip); - - // table mode takes only one table filter - if (gwip->condPush) - { - set tableSet; - - for (uint32_t i = 0; i < tmpVec.size(); i++) - { - if (tmpVec[i]->table_name.str) - tableSet.insert(tmpVec[i]->table_name.str); - } - - if (tableSet.size() > 1) - break; - } - - if (!gwip->fatalParseError && !(parseInfo & AGG_BIT) && !(parseInfo & SUB_BIT) && !nonConstFunc(ifp) && - !(parseInfo & AF_BIT) && tmpVec.size() == 0 && ifp->functype() != Item_func::MULT_EQUAL_FUNC) - { - ValStrStdString valStr(ifp); - - ConstantColumn* cc = buildConstantColumnMaybeNullFromValStr(ifp, valStr, *gwip); - - for (uint32_t i = 0; i < ifp->argument_count() && !gwip->rcWorkStack.empty(); i++) - { - delete gwip->rcWorkStack.top(); - gwip->rcWorkStack.pop(); - } - - // bug 3137. If filter constant like 1=0, put it to ptWorkStack - // MariaDB bug 750. Breaks if compare is an argument to a function. - // if ((int32_t)gwip->rcWorkStack.size() <= - //(gwip->rcBookMarkStack.empty() - //? - // 0 - //: gwip->rcBookMarkStack.top()) - // && isPredicateFunction(ifp, gwip)) - if (isPredicateFunction(ifp, gwip)) - gwip->ptWorkStack.push(new ParseTree(cc)); - else - gwip->rcWorkStack.push(cc); - - if (!valStr.isNull()) - IDEBUG(cerr << "Const F&E " << item->full_name() << " evaluate: " << valStr << endl); - - break; - } - - ReturnedColumn* rc = NULL; - - // @bug4488. Process function for table mode also, not just vtable mode. - rc = buildFunctionColumn(ifp, *gwip, gwip->fatalParseError); - - if (gwip->fatalParseError) - { - if (gwip->clauseType == SELECT) - return; - - // @bug 2585 - if (gwip->parseErrorText.empty()) - { - Message::Args args; - args.add(funcName); - gwip->parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORTED_FUNCTION, args); - } - - return; - } - - // predicate operators fall in the old path - if (rc) - { - // @bug 2383. For some reason func_name() for "in" gives " IN " always - if (funcName == "between" || funcName == "in" || funcName == " IN ") - gwip->ptWorkStack.push(new ParseTree(rc)); - else - gwip->rcWorkStack.push(rc); - } - else - { - // push to pt or rc stack is handled inside the function - buildPredicateItem(ifp, gwip); - } - - break; - } - - case Item::SUM_FUNC_ITEM: - { - Item_sum* isp = (Item_sum*)item; - ReturnedColumn* rc = buildAggregateColumn(isp, *gwip); - - if (rc) - gwip->rcWorkStack.push(rc); - - break; - } - - case Item::COND_ITEM: - { - // All logical functions are handled here, most of them are Item_cond, - // but XOR (it is Item_func_boolean2) - Item_func* func = (Item_func*)item; - - enum Item_func::Functype ftype = func->functype(); - bool isOr = (ftype == Item_func::COND_OR_FUNC); - bool isXor = (ftype == Item_func::XOR_FUNC); - - List* argumentList; - List xorArgumentList; - - if (isXor) - { - for (unsigned i = 0; i < func->argument_count(); i++) - { - xorArgumentList.push_back(func->arguments()[i]); - } - - argumentList = &xorArgumentList; - } - else - { - argumentList = ((Item_cond*)item)->argument_list(); - } - - // @bug2932. if ptWorkStack contains less items than the condition's arguments, - // the missing one should be in the rcWorkStack, unless the it's subselect. - // @todo need to figure out a way to combine these two stacks while walking. - // if (gwip->ptWorkStack.size() < icp->argument_list()->elements) - { - List_iterator_fast li(*argumentList); - - while (Item* it = li++) - { - //@bug3495, @bug5865 error out non-supported OR with correlated subquery - if (isOr) - { - vector fieldVec; - uint16_t parseInfo = 0; - parse_item(it, fieldVec, gwip->fatalParseError, parseInfo, gwip); - - if (parseInfo & CORRELATED) - { - gwip->fatalParseError = true; - gwip->parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_CORRELATED_SUB_OR); - return; - } - } - - if ((it->type() == Item::FIELD_ITEM || - (it->type() == Item::CONST_ITEM && - (it->cmp_type() == INT_RESULT || it->cmp_type() == DECIMAL_RESULT || - it->cmp_type() == STRING_RESULT || it->cmp_type() == REAL_RESULT)) || - it->type() == Item::NULL_ITEM || - (it->type() == Item::FUNC_ITEM && !isPredicateFunction(it, gwip))) && - !gwip->rcWorkStack.empty()) - { - gwip->ptWorkStack.push(new ParseTree(gwip->rcWorkStack.top())); - gwip->rcWorkStack.pop(); - } - } - } - - // @bug1603. MySQL's filter tree is a multi-tree grouped by operator. So more than - // two filters saved on the stack so far might belong to this operator. - uint32_t leftInStack = gwip->ptWorkStack.size() - argumentList->elements + 1; - - while (true) - { - if (gwip->ptWorkStack.size() < 2) - break; - - ParseTree* lhs = gwip->ptWorkStack.top(); - gwip->ptWorkStack.pop(); - SimpleFilter* lsf = dynamic_cast(lhs->data()); - - if (lsf && lsf->op()->data() == "noop") - { - if (isOr) - { - gwip->parseErrorText = "Unhandled item in WHERE or HAVING clause"; - gwip->fatalParseError = true; - break; - } - else - continue; - } - - ParseTree* rhs = gwip->ptWorkStack.top(); - gwip->ptWorkStack.pop(); - SimpleFilter* rsf = dynamic_cast(rhs->data()); - - if (rsf && rsf->op()->data() == "noop") - { - if (isOr) - { - gwip->parseErrorText = "Unhandled item in WHERE or HAVING clause"; - gwip->fatalParseError = true; - break; - } - else - { - delete rhs; - gwip->ptWorkStack.push(lhs); - continue; - } - } - - Operator* op = new LogicOperator(func->func_name()); - ParseTree* ptp = new ParseTree(op); - ptp->left(lhs); - ptp->right(rhs); - gwip->ptWorkStack.push(ptp); - - if (gwip->ptWorkStack.size() == leftInStack) - break; - } - - // special handling for subquery with aggregate. MySQL adds isnull function to the selected - // column. InfiniDB will remove it and set nullmatch flag if it's NOT_IN sub. - // @todo need more checking here to make sure it's not a user input OR operator - if (isOr && gwip->subQuery) - gwip->subQuery->handleFunc(gwip, func); - - break; - } - - case Item::REF_ITEM: - { - Item* col = *(((Item_ref*)item)->ref); - ReturnedColumn* rc = NULL; - // ref item is not pre-walked. force clause type to SELECT - ClauseType clauseType = gwip->clauseType; - gwip->clauseType = SELECT; - - if (col->type() != Item::COND_ITEM) - { - rc = buildReturnedColumn(col, *gwip, gwip->fatalParseError, true); - - if (col->type() == Item::FIELD_ITEM) - gwip->fatalParseError = false; - } - - SimpleColumn* sc = clauseType == HAVING ? nullptr : dynamic_cast(rc); - - if (sc) - { - boost::shared_ptr scsp(sc->clone()); - gwip->scsp = scsp; - - if (col->type() == Item::FIELD_ITEM) - { - const Item_ident* ident_field = dynamic_cast(item); - if (ident_field) - { - const auto& field_name = string(ident_field->field_name.str); - auto colMap = CalpontSelectExecutionPlan::ColumnMap::value_type(field_name, scsp); - gwip->columnMap.insert(colMap); - } - } - } - - bool cando = true; - gwip->clauseType = clauseType; - - if (rc) - { - if (((Item_ref*)item)->depended_from) - { - rc->joinInfo(rc->joinInfo() | JOIN_CORRELATED); - - if (gwip->subQuery) - gwip->subQuery->correlated(true); - - SimpleColumn* scp = dynamic_cast(rc); - - if (scp) - gwip->correlatedTbNameVec.push_back( - make_aliastable(scp->schemaName(), scp->tableName(), scp->tableAlias())); - - if (gwip->subSelectType == CalpontSelectExecutionPlan::SINGLEROW_SUBS) - rc->joinInfo(rc->joinInfo() | JOIN_SCALAR | JOIN_SEMI); - - if (gwip->subSelectType == CalpontSelectExecutionPlan::SELECT_SUBS) - rc->joinInfo(rc->joinInfo() | JOIN_SCALAR | JOIN_OUTER_SELECT); - } - - gwip->rcWorkStack.push(rc); - } - else if (col->type() == Item::FUNC_ITEM) - { - // sometimes mysql treat having filter items inconsistently. In such cases, - // which are always predicate operator, the function (gp_key>3) comes in as - // one item. - Item_func* ifp = (Item_func*)col; - - for (uint32_t i = 0; i < ifp->argument_count(); i++) - { - ReturnedColumn* operand = NULL; - - if (ifp->arguments()[i]->type() == Item::REF_ITEM) - { - Item* op = *(((Item_ref*)ifp->arguments()[i])->ref); - operand = buildReturnedColumn(op, *gwip, gwip->fatalParseError); - } - else - operand = buildReturnedColumn(ifp->arguments()[i], *gwip, gwip->fatalParseError); - - if (operand) - { - gwip->rcWorkStack.push(operand); - if (i == 0 && gwip->scsp == NULL) // first item is the WHEN LHS - { - SimpleColumn* sc = dynamic_cast(operand); - if (sc) - { - gwip->scsp.reset(sc->clone()); // We need to clone else sc gets double deleted. This code is - // rarely executed so the cost is acceptable. - } - } - } - else - { - cando = false; - break; - } - } - - if (cando) - buildPredicateItem(ifp, gwip); - } - else if (col->type() == Item::COND_ITEM) - { - gwip->ptWorkStack.push(buildParseTree(col, *gwip, gwip->fatalParseError)); - } - else if (col->type() == Item::FIELD_ITEM && gwip->clauseType == HAVING) - { - // ReturnedColumn* rc = buildAggFrmTempField(const_cast(item), *gwip); - ReturnedColumn* rc = buildReturnedColumn(const_cast(item), *gwip, gwip->fatalParseError); - if (rc) - gwip->rcWorkStack.push(rc); - - break; - } - else - { - cando = false; - } - - SimpleColumn* thisSC = dynamic_cast(rc); - if (thisSC) - { - gwip->scsp.reset(thisSC->clone()); - } - if (!rc && !cando) - { - ostringstream oss; - oss << "Unhandled Item type(): " << item->type(); - gwip->parseErrorText = oss.str(); - gwip->fatalParseError = true; - } - - break; - } - - case Item::SUBSELECT_ITEM: - { - if (gwip->condPush) // table mode - break; - - Item_subselect* sub = (Item_subselect*)item; - - if (sub->substype() == Item_subselect::EXISTS_SUBS) - { - SubQuery* orig = gwip->subQuery; - ExistsSub* existsSub = new ExistsSub(*gwip, sub); - gwip->hasSubSelect = true; - gwip->subQuery = existsSub; - gwip->ptWorkStack.push(existsSub->transform()); - // MCOL-2178 isUnion member only assigned, never used - // MIGR::infinidb_vtable.isUnion = true; // only temp. bypass the 2nd phase. - // recover original - gwip->subQuery = orig; - gwip->lastSub = existsSub; - } - else if (sub->substype() == Item_subselect::IN_SUBS) - { - if (!((Item_in_subselect*)sub)->optimizer && gwip->thd->derived_tables_processing) - { - ostringstream oss; - oss << "Invalid In_optimizer: " << item->type(); - gwip->parseErrorText = oss.str(); - gwip->fatalParseError = true; - break; - } - } - - // store a dummy subselect object. the transform is handled in item_func. - SubSelect* subselect = new SubSelect(); - gwip->rcWorkStack.push(subselect); - break; - } - - case Item::ROW_ITEM: - { - Item_row* row = (Item_row*)item; - RowColumn* rowCol = new RowColumn(); - vector cols; - // temp change clause type because the elements of row column are not walked yet - gwip->clauseType = SELECT; - for (uint32_t i = 0; i < row->cols(); i++) - cols.push_back(SRCP(buildReturnedColumn(row->element_index(i), *gwip, gwip->fatalParseError))); - - gwip->clauseType = WHERE; - rowCol->columnVec(cols); - gwip->rcWorkStack.push(rowCol); - break; - } - - case Item::EXPR_CACHE_ITEM: - { - ((Item_cache_wrapper*)item)->get_orig_item()->traverse_cond(gp_walk, arg, Item::POSTFIX); - break; - } - - case Item::WINDOW_FUNC_ITEM: - { - gwip->hasWindowFunc = true; - Item_window_func* ifa = (Item_window_func*)item; - ReturnedColumn* af = buildWindowFunctionColumn(ifa, *gwip, gwip->fatalParseError); - - if (af) - gwip->rcWorkStack.push(af); - - break; - } - - case Item::COPY_STR_ITEM: printf("********** received COPY_STR_ITEM *********\n"); break; - - case Item::FIELD_AVG_ITEM: printf("********** received FIELD_AVG_ITEM *********\n"); break; - - case Item::DEFAULT_VALUE_ITEM: printf("********** received DEFAULT_VALUE_ITEM *********\n"); break; - - case Item::PROC_ITEM: printf("********** received PROC_ITEM *********\n"); break; - - case Item::FIELD_STD_ITEM: printf("********** received FIELD_STD_ITEM *********\n"); break; - - case Item::FIELD_VARIANCE_ITEM: printf("********** received FIELD_VARIANCE_ITEM *********\n"); break; - - case Item::INSERT_VALUE_ITEM: printf("********** received INSERT_VALUE_ITEM *********\n"); break; - - case Item::PARAM_ITEM: printf("********** received PARAM_ITEM *********\n"); break; - - case Item::TRIGGER_FIELD_ITEM: printf("********** received TRIGGER_FIELD_ITEM *********\n"); break; - - case Item::TYPE_HOLDER: std::cerr << "********** received TYPE_HOLDER *********" << std::endl; break; - default: - { - if (gwip->condPush) - { - // push noop for unhandled item - SimpleColumn* rc = new SimpleColumn("noop"); - rc->timeZone(gwip->timeZone); - gwip->rcWorkStack.push(rc); - break; - } - - ostringstream oss; - oss << "Unhandled Item type (2): " << item->type(); - gwip->parseErrorText = oss.str(); - gwip->fatalParseError = true; - break; - } - } - - return; -} - -/** @info this function recursivly walks an item's arguments and push all - * the involved item_fields to the passed in vector. It's used in parsing - * functions or arithmetic expressions for vtable post process. - */ -void parse_item(Item* item, vector& field_vec, bool& hasNonSupportItem, uint16_t& parseInfo, - gp_walk_info* gwi) -{ - Item::Type itype = item->type(); - - switch (itype) - { - case Item::FIELD_ITEM: - { - Item_field* ifp = static_cast(item); - field_vec.push_back(ifp); - return; - } - - case Item::SUM_FUNC_ITEM: - { - // hasAggColumn = true; - parseInfo |= AGG_BIT; - Item_sum* isp = static_cast(item); - Item** sfitempp = isp->arguments(); - - for (uint32_t i = 0; i < isp->argument_count(); i++) - parse_item(sfitempp[i], field_vec, hasNonSupportItem, parseInfo, gwi); - - break; - } - - case Item::FUNC_ITEM: - { - Item_func* isp = static_cast(item); - - if (string(isp->func_name()) == "") - { - parseInfo |= SUB_BIT; - parseInfo |= CORRELATED; - break; - } - - for (uint32_t i = 0; i < isp->argument_count(); i++) - parse_item(isp->arguments()[i], field_vec, hasNonSupportItem, parseInfo, gwi); - - break; - } - - case Item::COND_ITEM: - { - Item_cond* icp = static_cast(item); - List_iterator_fast it(*(icp->argument_list())); - Item* cond_item; - - while ((cond_item = it++)) - parse_item(cond_item, field_vec, hasNonSupportItem, parseInfo, gwi); - - break; - } - - case Item::REF_ITEM: - { - Item_ref* ref = (Item_ref*)item; - if (ref->ref_type() == Item_ref::DIRECT_REF) - { - parse_item(ref->real_item(), field_vec, hasNonSupportItem, parseInfo, gwi); - break; - } - while (true) - { - ref = (Item_ref*)item; - if ((*(ref->ref))->type() == Item::SUM_FUNC_ITEM) - { - parseInfo |= AGG_BIT; - Item_sum* isp = static_cast(*(ref->ref)); - Item** sfitempp = isp->arguments(); - - // special handling for count(*). This should not be treated as constant. - if (isSupportedAggregateWithOneConstArg(isp, sfitempp)) - { - field_vec.push_back(nullptr); // dummy - } - - for (uint32_t i = 0; i < isp->argument_count(); i++) - parse_item(sfitempp[i], field_vec, hasNonSupportItem, parseInfo, gwi); - - break; - } - else if ((*(ref->ref))->type() == Item::FIELD_ITEM) - { - // MCOL-1510. This could be a non-supported function - // argument in form of a temp_table_field, so check - // and set hasNonSupportItem if it is so. - // ReturnedColumn* rc = NULL; - // if (gwi) - // rc = buildAggFrmTempField(ref, *gwi); - - // if (!rc) - //{ - Item_field* ifp = static_cast(*(ref->ref)); - field_vec.push_back(ifp); - //} - break; - } - else if ((*(ref->ref))->type() == Item::FUNC_ITEM) - { - Item_func* isp = static_cast(*(ref->ref)); - Item** sfitempp = isp->arguments(); - - for (uint32_t i = 0; i < isp->argument_count(); i++) - parse_item(sfitempp[i], field_vec, hasNonSupportItem, parseInfo, gwi); - - break; - } - else if ((*(ref->ref))->type() == Item::CACHE_ITEM) - { - Item_cache* isp = static_cast(*(ref->ref)); - parse_item(isp->get_example(), field_vec, hasNonSupportItem, parseInfo, gwi); - break; - } - else if ((*(ref->ref))->type() == Item::REF_ITEM) - { - item = (*(ref->ref)); - continue; - } - else if ((*(ref->ref))->type() == Item::WINDOW_FUNC_ITEM) - { - parseInfo |= AF_BIT; - break; - } - else - { - cerr << "UNKNOWN REF Item" << endl; - break; - } - } - - break; - } - - case Item::SUBSELECT_ITEM: - { - parseInfo |= SUB_BIT; - Item_subselect* sub = (Item_subselect*)item; - - if (sub->is_correlated) - parseInfo |= CORRELATED; - - break; - } - - case Item::ROW_ITEM: - { - Item_row* row = (Item_row*)item; - - for (uint32_t i = 0; i < row->cols(); i++) - parse_item(row->element_index(i), field_vec, hasNonSupportItem, parseInfo, gwi); - - break; - } - - case Item::EXPR_CACHE_ITEM: - { - // item is a Item_cache_wrapper. Shouldn't get here. - // DRRTUY TODO Why - IDEBUG(std::cerr << "EXPR_CACHE_ITEM in parse_item\n" << std::endl); - gwi->fatalParseError = true; - // DRRTUY The questionable error text. I've seen - // ERR_CORRELATED_SUB_OR - string parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_SUB_QUERY_TYPE); - setError(gwi->thd, ER_CHECK_NOT_IMPLEMENTED, parseErrorText); - break; - } - - case Item::WINDOW_FUNC_ITEM: parseInfo |= AF_BIT; break; - - default: break; - } -} - /*@brief set some runtime params to run the query */ /*********************************************************** * DESCRIPTION: @@ -6982,8 +5189,6 @@ int processFrom(bool& isUnion, SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& gwi.tbList.push_back(tn); CalpontSystemCatalog::TableAliasName tan = make_aliastable("", alias, alias); gwi.tableMap[tan] = make_pair(0, table_ptr); - // MCOL-2178 isUnion member only assigned, never used - // MIGR::infinidb_vtable.isUnion = true; //by-pass the 2nd pass of rnd_init } else if (table_ptr->view) { @@ -7083,8 +5288,6 @@ int processFrom(bool& isUnion, SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& if (!isUnion && (!isSelectHandlerTop || isSelectLexUnit) && select_lex.master_unit()->is_unit_op()) { - // MCOL-2178 isUnion member only assigned, never used - // MIGR::infinidb_vtable.isUnion = true; CalpontSelectExecutionPlan::SelectList unionVec; SELECT_LEX* select_cursor = select_lex.master_unit()->first_select(); unionSel = true; @@ -7136,101 +5339,101 @@ int processFrom(bool& isUnion, SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& * RETURNS * none ***********************************************************/ - void buildInToExistsFilter(gp_walk_info& gwi, SELECT_LEX& select_lex) - { - RowColumn* rlhs = dynamic_cast(gwi.inSubQueryLHS); - - size_t additionalRetColsBefore = gwi.additionalRetCols.size(); - - if (rlhs) - { - idbassert(gwi.inSubQueryLHSItem->type() == Item::ROW_ITEM); - - Item_row* row = (Item_row*)gwi.inSubQueryLHSItem; - - idbassert(!rlhs->columnVec().empty() && (rlhs->columnVec().size() == gwi.returnedCols.size()) && - row->cols() && (row->cols() == select_lex.item_list.elements) && - (row->cols() == gwi.returnedCols.size())); - - List_iterator_fast it(select_lex.item_list); - Item* item; - - int i = 0; - - ParseTree* rowFilter = nullptr; - - while ((item = it++)) - { - boost::shared_ptr sop(new PredicateOperator("=")); - vector itemList = {row->element_index(i), item}; - ReturnedColumn* rhs = gwi.returnedCols[i]->clone(); - - buildEqualityPredicate(rlhs->columnVec()[i]->clone(), rhs, &gwi, sop, Item_func::EQ_FUNC, itemList, - true); - - if (gwi.fatalParseError) - { - delete rlhs; - return; - } - - ParseTree* tmpFilter = nullptr; - - if (!gwi.ptWorkStack.empty()) - { - tmpFilter = gwi.ptWorkStack.top(); - gwi.ptWorkStack.pop(); - } - - if (i == 0 && tmpFilter) - { - rowFilter = tmpFilter; - } - else if (i != 0 && tmpFilter && rowFilter) - { - ParseTree* ptp = new ParseTree(new LogicOperator("and")); - ptp->left(rowFilter); - ptp->right(tmpFilter); - rowFilter = ptp; - } - - i++; - } - - delete rlhs; - - if (rowFilter) - gwi.ptWorkStack.push(rowFilter); - } - else - { - idbassert((gwi.returnedCols.size() == 1) && (select_lex.item_list.elements == 1)); - - boost::shared_ptr sop(new PredicateOperator("=")); - vector itemList = {gwi.inSubQueryLHSItem, select_lex.item_list.head()}; - ReturnedColumn* rhs = gwi.returnedCols[0]->clone(); - buildEqualityPredicate(gwi.inSubQueryLHS, rhs, &gwi, sop, Item_func::EQ_FUNC, itemList, true); - - if (gwi.fatalParseError) - return; - } - - size_t additionalRetColsAdded = gwi.additionalRetCols.size() - additionalRetColsBefore; - - if (gwi.returnedCols.size() && (gwi.returnedCols.size() == additionalRetColsAdded)) - { - for (size_t i = 0; i < gwi.returnedCols.size(); i++) - { - gwi.returnedCols[i]->expressionId(gwi.additionalRetCols[additionalRetColsBefore + i]->expressionId()); - gwi.returnedCols[i]->colSource(gwi.additionalRetCols[additionalRetColsBefore + i]->colSource()); - } - - // Delete the duplicate copy of the returned cols - auto iter = gwi.additionalRetCols.begin(); - std::advance(iter, additionalRetColsBefore); - gwi.additionalRetCols.erase(iter, gwi.additionalRetCols.end()); - } - } +void buildInToExistsFilter(gp_walk_info& gwi, SELECT_LEX& select_lex) +{ + RowColumn* rlhs = dynamic_cast(gwi.inSubQueryLHS); + + size_t additionalRetColsBefore = gwi.additionalRetCols.size(); + + if (rlhs) + { + idbassert(gwi.inSubQueryLHSItem->type() == Item::ROW_ITEM); + + Item_row* row = (Item_row*)gwi.inSubQueryLHSItem; + + idbassert(!rlhs->columnVec().empty() && (rlhs->columnVec().size() == gwi.returnedCols.size()) && + row->cols() && (row->cols() == select_lex.item_list.elements) && + (row->cols() == gwi.returnedCols.size())); + + List_iterator_fast it(select_lex.item_list); + Item* item; + + int i = 0; + + ParseTree* rowFilter = nullptr; + + while ((item = it++)) + { + boost::shared_ptr sop(new PredicateOperator("=")); + vector itemList = {row->element_index(i), item}; + ReturnedColumn* rhs = gwi.returnedCols[i]->clone(); + + buildEqualityPredicate(rlhs->columnVec()[i]->clone(), rhs, &gwi, sop, Item_func::EQ_FUNC, itemList, + true); + + if (gwi.fatalParseError) + { + delete rlhs; + return; + } + + ParseTree* tmpFilter = nullptr; + + if (!gwi.ptWorkStack.empty()) + { + tmpFilter = gwi.ptWorkStack.top(); + gwi.ptWorkStack.pop(); + } + + if (i == 0 && tmpFilter) + { + rowFilter = tmpFilter; + } + else if (i != 0 && tmpFilter && rowFilter) + { + ParseTree* ptp = new ParseTree(new LogicOperator("and")); + ptp->left(rowFilter); + ptp->right(tmpFilter); + rowFilter = ptp; + } + + i++; + } + + delete rlhs; + + if (rowFilter) + gwi.ptWorkStack.push(rowFilter); + } + else + { + idbassert((gwi.returnedCols.size() == 1) && (select_lex.item_list.elements == 1)); + + boost::shared_ptr sop(new PredicateOperator("=")); + vector itemList = {gwi.inSubQueryLHSItem, select_lex.item_list.head()}; + ReturnedColumn* rhs = gwi.returnedCols[0]->clone(); + buildEqualityPredicate(gwi.inSubQueryLHS, rhs, &gwi, sop, Item_func::EQ_FUNC, itemList, true); + + if (gwi.fatalParseError) + return; + } + + size_t additionalRetColsAdded = gwi.additionalRetCols.size() - additionalRetColsBefore; + + if (gwi.returnedCols.size() && (gwi.returnedCols.size() == additionalRetColsAdded)) + { + for (size_t i = 0; i < gwi.returnedCols.size(); i++) + { + gwi.returnedCols[i]->expressionId(gwi.additionalRetCols[additionalRetColsBefore + i]->expressionId()); + gwi.returnedCols[i]->colSource(gwi.additionalRetCols[additionalRetColsBefore + i]->colSource()); + } + + // Delete the duplicate copy of the returned cols + auto iter = gwi.additionalRetCols.begin(); + std::advance(iter, additionalRetColsBefore); + gwi.additionalRetCols.erase(iter, gwi.additionalRetCols.end()); + } +} /*@brief Process HAVING part of the query or sub-query */ /*********************************************************** @@ -7239,7 +5442,8 @@ int processFrom(bool& isUnion, SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& * RETURNS * error id as an int ***********************************************************/ - int processHaving(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep, std::unique_ptr& havingFilter) +int processHaving(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep, + std::unique_ptr& havingFilter) { gwi.havingDespiteSelect = true; clearStacks(gwi, false, true); @@ -7530,9 +5734,9 @@ int processGroupBy(SELECT_LEX& select_lex, gp_walk_info& gwi, const bool withRol // @bug5638. The group by column is constant but not counter, alias has to match a column // on the select list else if (!groupcol->counter_used && - (groupItem->type() == Item::CONST_ITEM && + (groupItem->type() == Item::CONST_ITEM && (groupItem->cmp_type() == INT_RESULT || groupItem->cmp_type() == STRING_RESULT || - groupItem->cmp_type() == REAL_RESULT || groupItem->cmp_type() == DECIMAL_RESULT))) + groupItem->cmp_type() == REAL_RESULT || groupItem->cmp_type() == DECIMAL_RESULT))) { ReturnedColumn* rc = 0; @@ -8083,8 +6287,6 @@ int processLimitAndOffset(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep return 0; } - - /*@brief Process SELECT part of a query or sub-query */ /*********************************************************** * DESCRIPTION: @@ -8092,505 +6294,501 @@ int processLimitAndOffset(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep * RETURNS * error id as an int ***********************************************************/ - int processSelect(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep, - vector& funcFieldVec, - CalpontSelectExecutionPlan::SelectList& selectSubList) - { - gwi.select_lex = &select_lex; - #ifdef DEBUG_WALK_COND - { - cerr << "------------------- SELECT --------------------" << endl; - List_iterator_fast it(select_lex.item_list); - Item* item; - - while ((item = it++)) - { - debug_walk(item, 0); - } - - cerr << "-----------------------------------------------\n" << endl; - } - #endif - - // analyze SELECT and ORDER BY parts - do they have implicit GROUP BY induced by aggregates? - { - if (select_lex.group_list.first) - { - // we have an explicit GROUP BY. - gwi.implicitExplicitGroupBy = true; - } - else - { - // do we have an implicit GROUP BY? - List_iterator_fast it(select_lex.item_list); - Item* item; - - while ((item = it++)) - { - analyzeForImplicitGroupBy(item, gwi); - } - SQL_I_List order_list = select_lex.order_list; - ORDER* ordercol = static_cast(order_list.first); - - for (; ordercol; ordercol = ordercol->next) - { - analyzeForImplicitGroupBy(*(ordercol->item), gwi); - } - } - } - // populate returnedcolumnlist and columnmap - List_iterator_fast it(select_lex.item_list); - Item* item; - - // empty rcWorkStack and ptWorkStack. They should all be empty by now. - clearStacks(gwi, false, true); - - // indicate the starting pos of scalar returned column, because some join column - // has been inserted to the returned column list. - if (gwi.subQuery) - { - ScalarSub* scalar = dynamic_cast(gwi.subQuery); - - if (scalar) - scalar->returnedColPos(gwi.additionalRetCols.size()); - } - - - while ((item = it++)) - { - string itemAlias = (item->name.length ? item->name.str : ""); - - // @bug 5916. Need to keep checking until getting concret item in case - // of nested view. - Item* baseItem = item; - while (item->type() == Item::REF_ITEM) - { - Item_ref* ref = (Item_ref*)item; - item = (*(ref->ref)); - } - - Item::Type itype = item->type(); - - switch (itype) - { - case Item::FIELD_ITEM: - { - Item_field* ifp = (Item_field*)item; - SimpleColumn* sc = NULL; - - if (ifp->field_name.length && string(ifp->field_name.str) == "*") - { - collectAllCols(gwi, ifp); - break; - } - sc = buildSimpleColumn(ifp, gwi); - - if (sc) - { - string fullname; - String str; - ifp->print(&str, QT_ORDINARY); - fullname = str.c_ptr(); - - if (!ifp->is_explicit_name()) // no alias - { - sc->alias(fullname); - } - else // alias - { - if (!itemAlias.empty()) - sc->alias(itemAlias); - } - - // We need to look into GROUP BY columns to decide if we need to wrap a column. - ReturnedColumn* rc = wrapIntoAggregate(sc, gwi, baseItem); - - SRCP sprc(rc); - pushReturnedCol(gwi, baseItem, sprc); - - gwi.columnMap.insert( - CalpontSelectExecutionPlan::ColumnMap::value_type(string(ifp->field_name.str), sprc)); - TABLE_LIST* tmp = 0; - - if (ifp->cached_table) - tmp = ifp->cached_table; - - gwi.tableMap[make_aliastable(sc->schemaName(), sc->tableName(), sc->tableAlias(), - sc->isColumnStore())] = make_pair(1, tmp); - } - else - { - setError(gwi.thd, ER_INTERNAL_ERROR, gwi.parseErrorText, gwi); - delete sc; - return ER_INTERNAL_ERROR; - } - - break; - } - - // aggregate column - case Item::SUM_FUNC_ITEM: - { - ReturnedColumn* ac = buildAggregateColumn(item, gwi); - - if (gwi.fatalParseError) - { - // e.g., non-support ref column - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - delete ac; - return ER_CHECK_NOT_IMPLEMENTED; - } - - // add this agg col to returnedColumnList - boost::shared_ptr spac(ac); - pushReturnedCol(gwi, item, spac); - break; - } - - case Item::FUNC_ITEM: - { - Item_func* ifp = static_cast(item); - - // @bug4383. error out non-support stored function - if (ifp->functype() == Item_func::FUNC_SP) - { - gwi.fatalParseError = true; - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_SP_FUNCTION_NOT_SUPPORT); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - if (string(ifp->func_name()) == "xor") - { - gwi.fatalParseError = true; - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_FILTER_COND_EXP); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - uint16_t parseInfo = 0; - vector tmpVec; - bool hasNonSupportItem = false; - parse_item(ifp, tmpVec, hasNonSupportItem, parseInfo, &gwi); - - if (ifp->with_subquery() || string(ifp->func_name()) == string("") || - ifp->functype() == Item_func::NOT_ALL_FUNC || parseInfo & SUB_BIT) - { - gwi.fatalParseError = true; - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_SELECT_SUB); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - // if "IN" or "BETWEEN" are in the SELECT clause, build function column - string funcName = ifp->func_name(); - ReturnedColumn* rc; - if (funcName == "in" || funcName == " IN " || funcName == "between") - { - rc = buildFunctionColumn(ifp, gwi, hasNonSupportItem, true); - } - else - { - rc = buildFunctionColumn(ifp, gwi, hasNonSupportItem); - } - - SRCP srcp(rc); - - if (rc) - { - // MCOL-2178 CS has to process determenistic functions with constant arguments. - if (!hasNonSupportItem && ifp->const_item() && !(parseInfo & AF_BIT) && tmpVec.size() == 0) - { - srcp.reset(buildReturnedColumn(item, gwi, gwi.fatalParseError)); - pushReturnedCol(gwi, item, srcp); - - if (ifp->name.length) - srcp->alias(ifp->name.str); - - continue; - } - // FIXME: usage of pushReturnedCol instead of gwi.returnedCols.push_back(srcp) here - // made within MCOL-5776 produced bug MCOL-5932 so, the check of equal columns is disabled - pushReturnedCol(gwi, item, srcp); - } - else // This was a vtable post-process block - { - hasNonSupportItem = false; - uint32_t before_size = funcFieldVec.size(); - parse_item(ifp, funcFieldVec, hasNonSupportItem, parseInfo, &gwi); - uint32_t after_size = funcFieldVec.size(); - - // pushdown handler projection functions - // @bug3881. set_user_var can not be treated as constant function - // @bug5716. Try to avoid post process function for union query. - if (!hasNonSupportItem && (after_size - before_size) == 0 && !(parseInfo & AGG_BIT) && - !(parseInfo & SUB_BIT)) - { - ConstantColumn* cc = buildConstantColumnMaybeNullUsingValStr(ifp, gwi); - - SRCP srcp(cc); - - if (ifp->name.length) - cc->alias(ifp->name.str); - - pushReturnedCol(gwi, ifp, srcp); - - // clear the error set by buildFunctionColumn - gwi.fatalParseError = false; - gwi.parseErrorText = ""; - break; - } - else if (hasNonSupportItem || parseInfo & AGG_BIT || parseInfo & SUB_BIT || - (gwi.fatalParseError && gwi.subQuery)) - { - if (gwi.parseErrorText.empty()) - { - Message::Args args; - args.add(ifp->func_name()); - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORTED_FUNCTION, args); - } - - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - else if (gwi.subQuery && (isPredicateFunction(ifp, &gwi) || ifp->type() == Item::COND_ITEM)) - { - gwi.fatalParseError = true; - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_FILTER_COND_EXP); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - //@Bug 3030 Add error check for dml statement - if (ha_mcs_common::isUpdateOrDeleteStatement(gwi.thd->lex->sql_command)) - { - if (after_size - before_size != 0) - { - gwi.parseErrorText = ifp->func_name(); - return -1; - } - } - else - { - Message::Args args; - args.add(ifp->func_name()); - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORTED_FUNCTION, args); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - } - - break; - } // End of FUNC_ITEM - - // DRRTUY Replace the whole section with typeid() checks or use - // static_cast here - case Item::CONST_ITEM: - { - switch (item->cmp_type()) - - { - case INT_RESULT: - case STRING_RESULT: - case DECIMAL_RESULT: - case REAL_RESULT: - case TIME_RESULT: - { - if (ha_mcs_common::isUpdateOrDeleteStatement(gwi.thd->lex->sql_command)) - { - } - else - { - // do not push the dummy column (mysql added) to returnedCol - if (item->name.length && string(item->name.str) == "Not_used") - continue; - - // @bug3509. Constant column is sent to ExeMgr now. - SRCP srcp(buildReturnedColumn(item, gwi, gwi.fatalParseError)); - - if (item->name.length) - srcp->alias(item->name.str); - - pushReturnedCol(gwi, item, srcp); - } - - break; - } - // MCOL-2178 This switch doesn't handl - // ROW_ - default: - { - IDEBUG(cerr << "Warning unsupported cmp_type() in projection" << endl); - // noop - } - } - break; - } // CONST_ITEM ends here - - case Item::NULL_ITEM: - { - if (ha_mcs_common::isUpdateOrDeleteStatement(gwi.thd->lex->sql_command)) - { - } - else - { - SRCP srcp(buildReturnedColumn(item, gwi, gwi.fatalParseError)); - pushReturnedCol(gwi, item, srcp); - - if (item->name.length) - srcp->alias(item->name.str); - } - - break; - } - - case Item::SUBSELECT_ITEM: - { - Item_subselect* sub = (Item_subselect*)item; - - if (sub->substype() != Item_subselect::SINGLEROW_SUBS) - { - gwi.fatalParseError = true; - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_SELECT_SUB); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - #ifdef DEBUG_WALK_COND - cerr << "SELECT clause SUBSELECT Item: " << sub->substype() << endl; - JOIN* join = sub->get_select_lex()->join; - - if (join) - { - Item_cond* cond = static_cast(join->conds); - - if (cond) - cond->traverse_cond(debug_walk, &gwi, Item::POSTFIX); - } - - cerr << "Finish SELECT clause subselect item traversing" << endl; - #endif - SelectSubQuery* selectSub = new SelectSubQuery(gwi, sub); - // selectSub->gwip(&gwi); - SCSEP ssub = selectSub->transform(); - - if (!ssub || gwi.fatalParseError) - { - if (gwi.parseErrorText.empty()) - gwi.parseErrorText = "Unsupported Item in SELECT subquery."; - - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - - return ER_CHECK_NOT_IMPLEMENTED; - } - - selectSubList.push_back(ssub); - SimpleColumn* rc = new SimpleColumn(); - rc->colSource(rc->colSource() | SELECT_SUB); - rc->timeZone(gwi.timeZone); - - if (sub->get_select_lex()->get_table_list()) - { - rc->viewName(getViewName(sub->get_select_lex()->get_table_list()), lower_case_table_names); - } - if (sub->name.length) - rc->alias(sub->name.str); - - gwi.returnedCols.push_back(SRCP(rc)); - - break; - } - - case Item::COND_ITEM: - { - gwi.fatalParseError = true; - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_FILTER_COND_EXP); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - case Item::EXPR_CACHE_ITEM: - { - printf("EXPR_CACHE_ITEM in getSelectPlan\n"); - gwi.fatalParseError = true; - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_UNKNOWN_COL); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - case Item::WINDOW_FUNC_ITEM: - { - SRCP srcp(buildWindowFunctionColumn(item, gwi, gwi.fatalParseError)); - - if (!srcp || gwi.fatalParseError) - { - if (gwi.parseErrorText.empty()) - gwi.parseErrorText = "Unsupported Item in SELECT subquery."; - - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - - pushReturnedCol(gwi, item, srcp); - break; - } - case Item::TYPE_HOLDER: - { - if (!gwi.tbList.size()) - { - gwi.parseErrorText = "subquery with VALUES"; - gwi.fatalParseError = true; - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - else - { - std::cerr << "********** received TYPE_HOLDER *********" << std::endl; - } - break; - } - - default: - { - break; - } - } - } - - // @bug4388 normalize the project coltypes for union main select list - if (!csep->unionVec().empty()) - { - unsigned int unionedTypeRc = 0; - - for (uint32_t i = 0; i < gwi.returnedCols.size(); i++) - { - vector coltypes; - - for (uint32_t j = 0; j < csep->unionVec().size(); j++) - { - CalpontSelectExecutionPlan* unionCsep = - dynamic_cast(csep->unionVec()[j].get()); - coltypes.push_back(unionCsep->returnedCols()[i]->resultType()); - - // @bug5976. set hasAggregate true for the main column if - // one corresponding union column has aggregate - if (unionCsep->returnedCols()[i]->hasAggregate()) - gwi.returnedCols[i]->hasAggregate(true); - } - - gwi.returnedCols[i]->resultType( - CalpontSystemCatalog::ColType::convertUnionColType(coltypes, unionedTypeRc)); - - if (unionedTypeRc != 0) - { - gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(unionedTypeRc); - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - } - } - return 0; - } +int processSelect(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep, vector& funcFieldVec, + CalpontSelectExecutionPlan::SelectList& selectSubList) +{ + gwi.select_lex = &select_lex; +#ifdef DEBUG_WALK_COND + { + cerr << "------------------- SELECT --------------------" << endl; + List_iterator_fast it(select_lex.item_list); + Item* item; + + while ((item = it++)) + { + debug_walk(item, 0); + } + + cerr << "-----------------------------------------------\n" << endl; + } +#endif + + // analyze SELECT and ORDER BY parts - do they have implicit GROUP BY induced by aggregates? + { + if (select_lex.group_list.first) + { + // we have an explicit GROUP BY. + gwi.implicitExplicitGroupBy = true; + } + else + { + // do we have an implicit GROUP BY? + List_iterator_fast it(select_lex.item_list); + Item* item; + + while ((item = it++)) + { + analyzeForImplicitGroupBy(item, gwi); + } + SQL_I_List order_list = select_lex.order_list; + ORDER* ordercol = static_cast(order_list.first); + + for (; ordercol; ordercol = ordercol->next) + { + analyzeForImplicitGroupBy(*(ordercol->item), gwi); + } + } + } + // populate returnedcolumnlist and columnmap + List_iterator_fast it(select_lex.item_list); + Item* item; + + // empty rcWorkStack and ptWorkStack. They should all be empty by now. + clearStacks(gwi, false, true); + + // indicate the starting pos of scalar returned column, because some join column + // has been inserted to the returned column list. + if (gwi.subQuery) + { + ScalarSub* scalar = dynamic_cast(gwi.subQuery); + + if (scalar) + scalar->returnedColPos(gwi.additionalRetCols.size()); + } + + while ((item = it++)) + { + string itemAlias = (item->name.length ? item->name.str : ""); + + // @bug 5916. Need to keep checking until getting concret item in case + // of nested view. + Item* baseItem = item; + while (item->type() == Item::REF_ITEM) + { + Item_ref* ref = (Item_ref*)item; + item = (*(ref->ref)); + } + + Item::Type itype = item->type(); + + switch (itype) + { + case Item::FIELD_ITEM: + { + Item_field* ifp = (Item_field*)item; + SimpleColumn* sc = NULL; + + if (ifp->field_name.length && string(ifp->field_name.str) == "*") + { + collectAllCols(gwi, ifp); + break; + } + sc = buildSimpleColumn(ifp, gwi); + + if (sc) + { + string fullname; + String str; + ifp->print(&str, QT_ORDINARY); + fullname = str.c_ptr(); + + if (!ifp->is_explicit_name()) // no alias + { + sc->alias(fullname); + } + else // alias + { + if (!itemAlias.empty()) + sc->alias(itemAlias); + } + + // We need to look into GROUP BY columns to decide if we need to wrap a column. + ReturnedColumn* rc = wrapIntoAggregate(sc, gwi, baseItem); + + SRCP sprc(rc); + pushReturnedCol(gwi, baseItem, sprc); + + gwi.columnMap.insert( + CalpontSelectExecutionPlan::ColumnMap::value_type(string(ifp->field_name.str), sprc)); + TABLE_LIST* tmp = 0; + + if (ifp->cached_table) + tmp = ifp->cached_table; + + gwi.tableMap[make_aliastable(sc->schemaName(), sc->tableName(), sc->tableAlias(), + sc->isColumnStore())] = make_pair(1, tmp); + } + else + { + setError(gwi.thd, ER_INTERNAL_ERROR, gwi.parseErrorText, gwi); + delete sc; + return ER_INTERNAL_ERROR; + } + + break; + } + + // aggregate column + case Item::SUM_FUNC_ITEM: + { + ReturnedColumn* ac = buildAggregateColumn(item, gwi); + + if (gwi.fatalParseError) + { + // e.g., non-support ref column + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + delete ac; + return ER_CHECK_NOT_IMPLEMENTED; + } + + // add this agg col to returnedColumnList + boost::shared_ptr spac(ac); + pushReturnedCol(gwi, item, spac); + break; + } + + case Item::FUNC_ITEM: + { + Item_func* ifp = static_cast(item); + + // @bug4383. error out non-support stored function + if (ifp->functype() == Item_func::FUNC_SP) + { + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_SP_FUNCTION_NOT_SUPPORT); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + + if (string(ifp->func_name()) == "xor") + { + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_FILTER_COND_EXP); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + + uint16_t parseInfo = 0; + vector tmpVec; + bool hasNonSupportItem = false; + parse_item(ifp, tmpVec, hasNonSupportItem, parseInfo, &gwi); + + if (ifp->with_subquery() || string(ifp->func_name()) == string("") || + ifp->functype() == Item_func::NOT_ALL_FUNC || parseInfo & SUB_BIT) + { + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_SELECT_SUB); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + + // if "IN" or "BETWEEN" are in the SELECT clause, build function column + string funcName = ifp->func_name(); + ReturnedColumn* rc; + if (funcName == "in" || funcName == " IN " || funcName == "between") + { + rc = buildFunctionColumn(ifp, gwi, hasNonSupportItem, true); + } + else + { + rc = buildFunctionColumn(ifp, gwi, hasNonSupportItem); + } + + SRCP srcp(rc); + + if (rc) + { + // MCOL-2178 CS has to process determenistic functions with constant arguments. + if (!hasNonSupportItem && ifp->const_item() && !(parseInfo & AF_BIT) && tmpVec.size() == 0) + { + srcp.reset(buildReturnedColumn(item, gwi, gwi.fatalParseError)); + pushReturnedCol(gwi, item, srcp); + + if (ifp->name.length) + srcp->alias(ifp->name.str); + + continue; + } + // FIXME: usage of pushReturnedCol instead of gwi.returnedCols.push_back(srcp) here + // made within MCOL-5776 produced bug MCOL-5932 so, the check of equal columns is disabled + pushReturnedCol(gwi, item, srcp); + } + else // This was a vtable post-process block + { + hasNonSupportItem = false; + uint32_t before_size = funcFieldVec.size(); + parse_item(ifp, funcFieldVec, hasNonSupportItem, parseInfo, &gwi); + uint32_t after_size = funcFieldVec.size(); + + // pushdown handler projection functions + // @bug3881. set_user_var can not be treated as constant function + // @bug5716. Try to avoid post process function for union query. + if (!hasNonSupportItem && (after_size - before_size) == 0 && !(parseInfo & AGG_BIT) && + !(parseInfo & SUB_BIT)) + { + ConstantColumn* cc = buildConstantColumnMaybeNullUsingValStr(ifp, gwi); + + SRCP srcp(cc); + + if (ifp->name.length) + cc->alias(ifp->name.str); + + pushReturnedCol(gwi, ifp, srcp); + + // clear the error set by buildFunctionColumn + gwi.fatalParseError = false; + gwi.parseErrorText = ""; + break; + } + else if (hasNonSupportItem || parseInfo & AGG_BIT || parseInfo & SUB_BIT || + (gwi.fatalParseError && gwi.subQuery)) + { + if (gwi.parseErrorText.empty()) + { + Message::Args args; + args.add(ifp->func_name()); + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORTED_FUNCTION, args); + } + + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + else if (gwi.subQuery && (isPredicateFunction(ifp, &gwi) || ifp->type() == Item::COND_ITEM)) + { + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_FILTER_COND_EXP); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + + //@Bug 3030 Add error check for dml statement + if (ha_mcs_common::isUpdateOrDeleteStatement(gwi.thd->lex->sql_command)) + { + if (after_size - before_size != 0) + { + gwi.parseErrorText = ifp->func_name(); + return -1; + } + } + else + { + Message::Args args; + args.add(ifp->func_name()); + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORTED_FUNCTION, args); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + } + + break; + } // End of FUNC_ITEM + + // DRRTUY Replace the whole section with typeid() checks or use + // static_cast here + case Item::CONST_ITEM: + { + switch (item->cmp_type()) + + { + case INT_RESULT: + case STRING_RESULT: + case DECIMAL_RESULT: + case REAL_RESULT: + case TIME_RESULT: + { + if (ha_mcs_common::isUpdateOrDeleteStatement(gwi.thd->lex->sql_command)) + { + } + else + { + // do not push the dummy column (mysql added) to returnedCol + if (item->name.length && string(item->name.str) == "Not_used") + continue; + + // @bug3509. Constant column is sent to ExeMgr now. + SRCP srcp(buildReturnedColumn(item, gwi, gwi.fatalParseError)); + + if (item->name.length) + srcp->alias(item->name.str); + + pushReturnedCol(gwi, item, srcp); + } + + break; + } + default: + { + IDEBUG(cerr << "Warning unsupported cmp_type() in projection" << endl); + // noop + } + } + break; + } // CONST_ITEM ends here + + case Item::NULL_ITEM: + { + if (ha_mcs_common::isUpdateOrDeleteStatement(gwi.thd->lex->sql_command)) + { + } + else + { + SRCP srcp(buildReturnedColumn(item, gwi, gwi.fatalParseError)); + pushReturnedCol(gwi, item, srcp); + + if (item->name.length) + srcp->alias(item->name.str); + } + + break; + } + + case Item::SUBSELECT_ITEM: + { + Item_subselect* sub = (Item_subselect*)item; + + if (sub->substype() != Item_subselect::SINGLEROW_SUBS) + { + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_SELECT_SUB); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + +#ifdef DEBUG_WALK_COND + cerr << "SELECT clause SUBSELECT Item: " << sub->substype() << endl; + JOIN* join = sub->get_select_lex()->join; + + if (join) + { + Item_cond* cond = static_cast(join->conds); + + if (cond) + cond->traverse_cond(debug_walk, &gwi, Item::POSTFIX); + } + + cerr << "Finish SELECT clause subselect item traversing" << endl; +#endif + SelectSubQuery* selectSub = new SelectSubQuery(gwi, sub); + // selectSub->gwip(&gwi); + SCSEP ssub = selectSub->transform(); + + if (!ssub || gwi.fatalParseError) + { + if (gwi.parseErrorText.empty()) + gwi.parseErrorText = "Unsupported Item in SELECT subquery."; + + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + + return ER_CHECK_NOT_IMPLEMENTED; + } + + selectSubList.push_back(ssub); + SimpleColumn* rc = new SimpleColumn(); + rc->colSource(rc->colSource() | SELECT_SUB); + rc->timeZone(gwi.timeZone); + + if (sub->get_select_lex()->get_table_list()) + { + rc->viewName(getViewName(sub->get_select_lex()->get_table_list()), lower_case_table_names); + } + if (sub->name.length) + rc->alias(sub->name.str); + + gwi.returnedCols.push_back(SRCP(rc)); + + break; + } + + case Item::COND_ITEM: + { + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_FILTER_COND_EXP); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + + case Item::EXPR_CACHE_ITEM: + { + printf("EXPR_CACHE_ITEM in getSelectPlan\n"); + gwi.fatalParseError = true; + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_UNKNOWN_COL); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + + case Item::WINDOW_FUNC_ITEM: + { + SRCP srcp(buildWindowFunctionColumn(item, gwi, gwi.fatalParseError)); + + if (!srcp || gwi.fatalParseError) + { + if (gwi.parseErrorText.empty()) + gwi.parseErrorText = "Unsupported Item in SELECT subquery."; + + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + + pushReturnedCol(gwi, item, srcp); + break; + } + case Item::TYPE_HOLDER: + { + if (!gwi.tbList.size()) + { + gwi.parseErrorText = "subquery with VALUES"; + gwi.fatalParseError = true; + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + else + { + std::cerr << "********** received TYPE_HOLDER *********" << std::endl; + } + break; + } + + default: + { + break; + } + } + } + + // @bug4388 normalize the project coltypes for union main select list + if (!csep->unionVec().empty()) + { + unsigned int unionedTypeRc = 0; + + for (uint32_t i = 0; i < gwi.returnedCols.size(); i++) + { + vector coltypes; + + for (uint32_t j = 0; j < csep->unionVec().size(); j++) + { + CalpontSelectExecutionPlan* unionCsep = + dynamic_cast(csep->unionVec()[j].get()); + coltypes.push_back(unionCsep->returnedCols()[i]->resultType()); + + // @bug5976. set hasAggregate true for the main column if + // one corresponding union column has aggregate + if (unionCsep->returnedCols()[i]->hasAggregate()) + gwi.returnedCols[i]->hasAggregate(true); + } + + gwi.returnedCols[i]->resultType( + CalpontSystemCatalog::ColType::convertUnionColType(coltypes, unionedTypeRc)); + + if (unionedTypeRc != 0) + { + gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(unionedTypeRc); + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, gwi.parseErrorText, gwi); + return ER_CHECK_NOT_IMPLEMENTED; + } + } + } + return 0; +} /*@brief Process ORDER BY part of a query or sub-query */ /*********************************************************** @@ -8599,143 +6797,177 @@ int processLimitAndOffset(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep * RETURNS * error id as an int ***********************************************************/ -int processOrderBy(SELECT_LEX& select_lex, - gp_walk_info& gwi, - SCSEP& csep, - boost::shared_ptr& csc, - SRCP& minSc, - const bool isUnion, - const bool unionSel) +int processOrderBy(SELECT_LEX& select_lex, gp_walk_info& gwi, SCSEP& csep, + boost::shared_ptr& csc, SRCP& minSc, const bool isUnion, + const bool unionSel) { - SQL_I_List order_list = select_lex.order_list; - ORDER* ordercol = static_cast(order_list.first); + SQL_I_List order_list = select_lex.order_list; + ORDER* ordercol = static_cast(order_list.first); - // check if window functions are in order by. InfiniDB process order by list if - // window functions are involved, either in order by or projection. - for (; ordercol; ordercol = ordercol->next) + // check if window functions are in order by. InfiniDB process order by list if + // window functions are involved, either in order by or projection. + for (; ordercol; ordercol = ordercol->next) + { + if ((*(ordercol->item))->type() == Item::WINDOW_FUNC_ITEM) + gwi.hasWindowFunc = true; + // XXX: TODO: implement a proper analysis of what we support. + // MCOL-2166 Looking for this sorting item in GROUP_BY items list. + // Shouldn't look into this if query doesn't have GROUP BY or + // aggregations + if (select_lex.agg_func_used() && select_lex.group_list.first && + !sortItemIsInGrouping(*ordercol->item, select_lex.group_list.first)) { - if ((*(ordercol->item))->type() == Item::WINDOW_FUNC_ITEM) - gwi.hasWindowFunc = true; - // XXX: TODO: implement a proper analysis of what we support. - // MCOL-2166 Looking for this sorting item in GROUP_BY items list. - // Shouldn't look into this if query doesn't have GROUP BY or - // aggregations - if (select_lex.agg_func_used() && select_lex.group_list.first && - !sortItemIsInGrouping(*ordercol->item, select_lex.group_list.first)) + std::ostringstream ostream; + std::ostringstream& osr = ostream; + getColNameFromItem(osr, *ordercol->item); + Message::Args args; + args.add(ostream.str()); + string emsg = IDBErrorInfo::instance()->errorMsg(ERR_NOT_SUPPORTED_GROUPBY_ORDERBY_EXPRESSION, args); + gwi.parseErrorText = emsg; + setError(gwi.thd, ER_INTERNAL_ERROR, emsg, gwi); + return ERR_NOT_SUPPORTED_GROUPBY_ORDERBY_EXPRESSION; + } + } + + // re-visit the first of ordercol list + ordercol = static_cast(order_list.first); + + for (; ordercol; ordercol = ordercol->next) + { + ReturnedColumn* rc = NULL; + + if (ordercol->in_field_list && ordercol->counter_used) + { + rc = gwi.returnedCols[ordercol->counter - 1]->clone(); + rc->orderPos(ordercol->counter - 1); + // can not be optimized off if used in order by with counter. + // set with self derived table alias if it's derived table + gwi.returnedCols[ordercol->counter - 1]->incRefCount(); + } + else + { + Item* ord_item = *(ordercol->item); + + // ignore not_used column on order by. + if ((ord_item->type() == Item::CONST_ITEM && ord_item->cmp_type() == INT_RESULT) && + ord_item->full_name() && !strcmp(ord_item->full_name(), "Not_used")) { - std::ostringstream ostream; - std::ostringstream& osr = ostream; - getColNameFromItem(osr, *ordercol->item); - Message::Args args; - args.add(ostream.str()); - string emsg = IDBErrorInfo::instance()->errorMsg(ERR_NOT_SUPPORTED_GROUPBY_ORDERBY_EXPRESSION, args); + continue; + } + else if (ord_item->type() == Item::CONST_ITEM && ord_item->cmp_type() == INT_RESULT) + { + // DRRTUY This section looks useless b/c there is no + // way to put constant INT into an ORDER BY list + rc = gwi.returnedCols[((Item_int*)ord_item)->val_int() - 1]->clone(); + } + else if (ord_item->type() == Item::SUBSELECT_ITEM) + { + gwi.fatalParseError = true; + } + else if ((ord_item->type() == Item::FUNC_ITEM) && + (((Item_func*)ord_item)->functype() == Item_func::COLLATE_FUNC)) + { + push_warning(gwi.thd, Sql_condition::WARN_LEVEL_NOTE, WARN_OPTION_IGNORED, + "COLLATE is ignored in ColumnStore"); + continue; + } + else + { + rc = buildReturnedColumn(ord_item, gwi, gwi.fatalParseError); + + rc = wrapIntoAggregate(rc, gwi, ord_item); + } + // @bug5501 try item_ptr if item can not be fixed. For some + // weird dml statement state, item can not be fixed but the + // infomation is available in item_ptr. + if (!rc || gwi.fatalParseError) + { + Item* item_ptr = ordercol->item_ptr; + + while (item_ptr->type() == Item::REF_ITEM) + item_ptr = *(((Item_ref*)item_ptr)->ref); + + rc = buildReturnedColumn(item_ptr, gwi, gwi.fatalParseError); + } + + if (!rc) + { + string emsg = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_ORDER_BY); gwi.parseErrorText = emsg; - setError(gwi.thd, ER_INTERNAL_ERROR, emsg, gwi); - return ERR_NOT_SUPPORTED_GROUPBY_ORDERBY_EXPRESSION; + setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, emsg, gwi); + return ER_CHECK_NOT_IMPLEMENTED; } } - // re-visit the first of ordercol list - ordercol = static_cast(order_list.first); + if (ordercol->direction == ORDER::ORDER_ASC) + rc->asc(true); + else + rc->asc(false); - for (; ordercol; ordercol = ordercol->next) + gwi.orderByCols.push_back(SRCP(rc)); + } + + // make sure columnmap, returnedcols and count(*) arg_list are not empty + TableMap::iterator tb_iter = gwi.tableMap.begin(); + + try + { + for (; tb_iter != gwi.tableMap.end(); tb_iter++) { - ReturnedColumn* rc = NULL; + if ((*tb_iter).second.first == 1) + continue; - if (ordercol->in_field_list && ordercol->counter_used) - { - rc = gwi.returnedCols[ordercol->counter - 1]->clone(); - rc->orderPos(ordercol->counter - 1); - // can not be optimized off if used in order by with counter. - // set with self derived table alias if it's derived table - gwi.returnedCols[ordercol->counter - 1]->incRefCount(); - } - else - { - Item* ord_item = *(ordercol->item); - - // ignore not_used column on order by. - if ((ord_item->type() == Item::CONST_ITEM && ord_item->cmp_type() == INT_RESULT) && - ord_item->full_name() && !strcmp(ord_item->full_name(), "Not_used")) - { - continue; - } - else if (ord_item->type() == Item::CONST_ITEM && ord_item->cmp_type() == INT_RESULT) - { - // DRRTUY This section looks useless b/c there is no - // way to put constant INT into an ORDER BY list - rc = gwi.returnedCols[((Item_int*)ord_item)->val_int() - 1]->clone(); - } - else if (ord_item->type() == Item::SUBSELECT_ITEM) - { - gwi.fatalParseError = true; - } - else if ((ord_item->type() == Item::FUNC_ITEM) && - (((Item_func*)ord_item)->functype() == Item_func::COLLATE_FUNC)) - { - push_warning(gwi.thd, Sql_condition::WARN_LEVEL_NOTE, WARN_OPTION_IGNORED, - "COLLATE is ignored in ColumnStore"); - continue; - } - else - { - rc = buildReturnedColumn(ord_item, gwi, gwi.fatalParseError); - - rc = wrapIntoAggregate(rc, gwi, ord_item); - } - // @bug5501 try item_ptr if item can not be fixed. For some - // weird dml statement state, item can not be fixed but the - // infomation is available in item_ptr. - if (!rc || gwi.fatalParseError) - { - Item* item_ptr = ordercol->item_ptr; - - while (item_ptr->type() == Item::REF_ITEM) - item_ptr = *(((Item_ref*)item_ptr)->ref); - - rc = buildReturnedColumn(item_ptr, gwi, gwi.fatalParseError); - } - - if (!rc) - { - string emsg = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_ORDER_BY); - gwi.parseErrorText = emsg; - setError(gwi.thd, ER_CHECK_NOT_IMPLEMENTED, emsg, gwi); - return ER_CHECK_NOT_IMPLEMENTED; - } - } - - if (ordercol->direction == ORDER::ORDER_ASC) - rc->asc(true); - else - rc->asc(false); - - gwi.orderByCols.push_back(SRCP(rc)); + CalpontSystemCatalog::TableAliasName tan = (*tb_iter).first; + CalpontSystemCatalog::TableName tn = make_table((*tb_iter).first.schema, (*tb_iter).first.table); + SimpleColumn* sc = getSmallestColumn(csc, tn, tan, (*tb_iter).second.second->table, gwi); + SRCP srcp(sc); + gwi.columnMap.insert(CalpontSelectExecutionPlan::ColumnMap::value_type(sc->columnName(), srcp)); + (*tb_iter).second.first = 1; } + } + catch (runtime_error& e) + { + setError(gwi.thd, ER_INTERNAL_ERROR, e.what(), gwi); + return ER_INTERNAL_ERROR; + } + catch (...) + { + string emsg = IDBErrorInfo::instance()->errorMsg(ERR_LOST_CONN_EXEMGR); + setError(gwi.thd, ER_INTERNAL_ERROR, emsg, gwi); + return ER_INTERNAL_ERROR; + } - // make sure columnmap, returnedcols and count(*) arg_list are not empty - TableMap::iterator tb_iter = gwi.tableMap.begin(); + if (!gwi.count_asterisk_list.empty() || !gwi.no_parm_func_list.empty() || gwi.returnedCols.empty()) + { + // get the smallest column from colmap + CalpontSelectExecutionPlan::ColumnMap::const_iterator iter; + int minColWidth = 0; + CalpontSystemCatalog::ColType ct; try { - for (; tb_iter != gwi.tableMap.end(); tb_iter++) + for (iter = gwi.columnMap.begin(); iter != gwi.columnMap.end(); ++iter) { - if ((*tb_iter).second.first == 1) - continue; + // should always not null + SimpleColumn* sc = dynamic_cast(iter->second.get()); - CalpontSystemCatalog::TableAliasName tan = (*tb_iter).first; - CalpontSystemCatalog::TableName tn = make_table((*tb_iter).first.schema, (*tb_iter).first.table); - SimpleColumn* sc = getSmallestColumn(csc, tn, tan, (*tb_iter).second.second->table, gwi); - SRCP srcp(sc); - gwi.columnMap.insert(CalpontSelectExecutionPlan::ColumnMap::value_type(sc->columnName(), srcp)); - (*tb_iter).second.first = 1; + if (sc && !(sc->joinInfo() & JOIN_CORRELATED)) + { + ct = csc->colType(sc->oid()); + + if (minColWidth == 0) + { + minColWidth = ct.colWidth; + minSc = iter->second; + } + else if (ct.colWidth < minColWidth) + { + minColWidth = ct.colWidth; + minSc = iter->second; + } + } } } - catch (runtime_error& e) - { - setError(gwi.thd, ER_INTERNAL_ERROR, e.what(), gwi); - return ER_INTERNAL_ERROR; - } catch (...) { string emsg = IDBErrorInfo::instance()->errorMsg(ERR_LOST_CONN_EXEMGR); @@ -8743,89 +6975,51 @@ int processOrderBy(SELECT_LEX& select_lex, return ER_INTERNAL_ERROR; } - if (!gwi.count_asterisk_list.empty() || !gwi.no_parm_func_list.empty() || gwi.returnedCols.empty()) + if (gwi.returnedCols.empty() && gwi.additionalRetCols.empty() && minSc) + gwi.returnedCols.push_back(minSc); + } + + // ORDER BY translation part + if (!isUnion && !gwi.hasWindowFunc && gwi.subSelectType == CalpontSelectExecutionPlan::MAIN_SELECT) + { { - // get the smallest column from colmap - CalpontSelectExecutionPlan::ColumnMap::const_iterator iter; - int minColWidth = 0; - CalpontSystemCatalog::ColType ct; + if (unionSel) + order_list = select_lex.master_unit()->global_parameters()->order_list; - try + ordercol = static_cast(order_list.first); + + for (; ordercol; ordercol = ordercol->next) { - for (iter = gwi.columnMap.begin(); iter != gwi.columnMap.end(); ++iter) + Item* ord_item = *(ordercol->item); + + if (ord_item->name.length) { - // should always not null - SimpleColumn* sc = dynamic_cast(iter->second.get()); - - if (sc && !(sc->joinInfo() & JOIN_CORRELATED)) + // for union order by 1 case. For unknown reason, it doesn't show in_field_list + if (ord_item->type() == Item::CONST_ITEM && ord_item->cmp_type() == INT_RESULT) + { + } + else if (ord_item->type() == Item::SUBSELECT_ITEM) + { + } + else { - ct = csc->colType(sc->oid()); - - if (minColWidth == 0) - { - minColWidth = ct.colWidth; - minSc = iter->second; - } - else if (ct.colWidth < minColWidth) - { - minColWidth = ct.colWidth; - minSc = iter->second; - } } } } - catch (...) - { - string emsg = IDBErrorInfo::instance()->errorMsg(ERR_LOST_CONN_EXEMGR); - setError(gwi.thd, ER_INTERNAL_ERROR, emsg, gwi); - return ER_INTERNAL_ERROR; - } - - if (gwi.returnedCols.empty() && gwi.additionalRetCols.empty() && minSc) - gwi.returnedCols.push_back(minSc); } - // ORDER BY translation part - if (!isUnion && !gwi.hasWindowFunc && gwi.subSelectType == CalpontSelectExecutionPlan::MAIN_SELECT) + if (gwi.orderByCols.size()) // has order by { - { - if (unionSel) - order_list = select_lex.master_unit()->global_parameters()->order_list; - - ordercol = static_cast(order_list.first); - - for (; ordercol; ordercol = ordercol->next) - { - Item* ord_item = *(ordercol->item); - - if (ord_item->name.length) - { - // for union order by 1 case. For unknown reason, it doesn't show in_field_list - if (ord_item->type() == Item::CONST_ITEM && ord_item->cmp_type() == INT_RESULT) - { - } - else if (ord_item->type() == Item::SUBSELECT_ITEM) - { - } - else - { - } - } - } - } - - if (gwi.orderByCols.size()) // has order by - { - csep->hasOrderBy(true); - // To activate LimitedOrderBy - csep->orderByThreads(get_orderby_threads(gwi.thd)); - csep->specHandlerProcessed(true); - } + csep->hasOrderBy(true); + // To activate LimitedOrderBy + csep->orderByThreads(get_orderby_threads(gwi.thd)); + csep->specHandlerProcessed(true); } + } - return 0; + return 0; } - + /*@brief Translates SELECT_LEX into CSEP */ /*********************************************************** * DESCRIPTION: @@ -8976,7 +7170,7 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i } } - if ((rc = processOrderBy(select_lex, gwi, csep, csc, minSc, isUnion, unionSel))) + if ((rc = processOrderBy(select_lex, gwi, csep, csc, minSc, isUnion, unionSel))) { CalpontSystemCatalog::removeCalpontSystemCatalog(sessionID); return rc; @@ -9066,8 +7260,7 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i gwi.select_lex = originalSelectLex; // append additionalRetCols to returnedCols gwi.returnedCols.insert(gwi.returnedCols.begin(), gwi.additionalRetCols.begin(), - gwi.additionalRetCols.end( -)); + gwi.additionalRetCols.end()); csep->groupByCols(gwi.groupByCols); csep->withRollup(withRollup); @@ -9209,17 +7402,19 @@ int cs_get_derived_plan(ha_columnstore_derived_handler* handler, THD* /*thd*/, S else if (status < 0) return status; -#ifdef DEBUG_WALK_COND - cerr << "---------------- cs_get_derived_plan EXECUTION PLAN ----------------" << endl; - cerr << *csep << endl; - cerr << "-------------- EXECUTION PLAN END --------------\n" << endl; -#endif + if (csep->traceOn()) + { + cerr << "---------------- cs_get_derived_plan EXECUTION PLAN ----------------" << endl; + cerr << *csep << endl; + cerr << "-------------- EXECUTION PLAN END --------------\n" << endl; + } // Derived table projection and filter optimization. derivedTableOptimization(&gwi, csep); return 0; } -int cs_get_select_plan(ha_columnstore_select_handler* handler, THD* /*thd*/, SCSEP& csep, gp_walk_info& gwi, + +int cs_get_select_plan(ha_columnstore_select_handler* handler, THD* thd, SCSEP& csep, gp_walk_info& gwi, bool isSelectLexUnit) { SELECT_LEX& select_lex = handler->select_lex ? *handler->select_lex : *handler->lex_unit->first_select(); @@ -9241,14 +7436,27 @@ int cs_get_select_plan(ha_columnstore_select_handler* handler, THD* /*thd*/, SCS else if (status < 0) return status; -#ifdef DEBUG_WALK_COND - cerr << "---------------- cs_get_select_plan EXECUTION PLAN ----------------" << endl; - cerr << *csep << endl; - cerr << "-------------- EXECUTION PLAN END --------------\n" << endl; -#endif + if (csep->traceOn()) + { + cerr << "---------------- cs_get_select_plan EXECUTION PLAN ----------------" << endl; + cerr << *csep << endl; + cerr << "-------------- EXECUTION PLAN END --------------\n" << endl; + } + // Derived table projection and filter optimization. derivedTableOptimization(&gwi, csep); + if (get_unstable_optimizer(thd)) + { + bool csepWasOptimized = optimizer::optimizeCSEP(*csep); + if (csep->traceOn() && csepWasOptimized) + { + cerr << "---------------- cs_get_select_plan optimized EXECUTION PLAN ----------------" << endl; + cerr << *csep << endl; + cerr << "-------------- EXECUTION PLAN END --------------\n" << endl; + } + } + return 0; } diff --git a/dbcon/mysql/ha_mcs_execplan_helpers.cpp b/dbcon/mysql/ha_mcs_execplan_helpers.cpp new file mode 100644 index 000000000..66ffa35be --- /dev/null +++ b/dbcon/mysql/ha_mcs_execplan_helpers.cpp @@ -0,0 +1,189 @@ +/* Copyright (C) 2025 MariaDB Corporation + + 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; version 2 of + the License. + + 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 GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "ha_mcs_execplan_helpers.h" +#include "constantcolumn.h" + +namespace cal_impl_if +{ +bool nonConstFunc(Item_func* ifp) +{ + if (strcasecmp(ifp->func_name(), "rand") == 0 || strcasecmp(ifp->func_name(), "sysdate") == 0 || + strcasecmp(ifp->func_name(), "idblocalpm") == 0) + return true; + + for (uint32_t i = 0; i < ifp->argument_count(); i++) + { + if (ifp->arguments()[i]->type() == Item::FUNC_ITEM && nonConstFunc(((Item_func*)ifp->arguments()[i]))) + return true; + } + + return false; +} + +/* + Create a ConstantColumn according to cmp_type(). + But do not set the time zone yet. + + Handles NULL and NOT NULL values. + + Uses a simplified logic regarding to data types: + always extracts the value through val_str(). + + Should probably be joined with the previous function, to have + a single function which can at the same time: + a. handle both NULL and NOT NULL values + b. extract values using a native val_xxx() method, + to avoid possible negative effects mentioned in the comments + to newConstantColumnNotNullUsingValNativeNoTz(). +*/ +execplan::ConstantColumn* newConstantColumnMaybeNullFromValStrNoTz(const Item* item, + const ValStrStdString& valStr, + gp_walk_info& gwi) +{ + if (valStr.isNull()) + return new execplan::ConstantColumnNull(); + + switch (item->result_type()) + { + case STRING_RESULT: return new execplan::ConstantColumnString(valStr); + case DECIMAL_RESULT: return buildDecimalColumn(item, valStr, gwi); + case TIME_RESULT: + case INT_RESULT: + case REAL_RESULT: + case ROW_RESULT: return new execplan::ConstantColumnNum(colType_MysqlToIDB(item), valStr); + } + return nullptr; +} + +// Create a ConstantColumn from a previously evaluated val_str() result, +// Supports both NULL and NOT NULL values. +// Sets the time zone according to gwi. +execplan::ConstantColumn* buildConstantColumnMaybeNullFromValStr(const Item* item, const ValStrStdString& valStr, + gp_walk_info& gwi) +{ + execplan::ConstantColumn* rc = newConstantColumnMaybeNullFromValStrNoTz(item, valStr, gwi); + if (rc) + rc->timeZone(gwi.timeZone); + return rc; +} + +// Create a ConstantColumn by calling val_str(). +// Supports both NULL and NOT NULL values. +// Sets the time zone according to gwi. + +execplan::ConstantColumn* buildConstantColumnMaybeNullUsingValStr(Item* item, gp_walk_info& gwi) +{ + return buildConstantColumnMaybeNullFromValStr(item, ValStrStdString(item), gwi); +} + +// Create a ConstantColumn for a NOT NULL expression. +// Sets the time zone according to gwi. +execplan::ConstantColumn* buildConstantColumnNotNullUsingValNative(Item* item, gp_walk_info& gwi) +{ + execplan::ConstantColumn* rc = newConstantColumnNotNullUsingValNativeNoTz(item, gwi); + if (rc) + rc->timeZone(gwi.timeZone); + return rc; +} + +/* + Create a ConstantColumn according to cmp_type(). + But do not set the time zone yet. + + Handles NOT NULL values. + + Three ways of value extraction are used depending on the data type: + 1. Using a native val_xxx(). + 2. Using val_str() with further convertion to the native representation. + 3. Using both val_str() and a native val_xxx(). + + We should eventually get rid of N2 and N3 and use N1 for all data types: + - N2 contains a redundant code for str->native conversion. + It should be replaced to an existing code (a Type_handler method call?). + - N3 performs double evalation of the value, which may cause + various negative effects (double side effects or double warnings). +*/ +execplan::ConstantColumn* newConstantColumnNotNullUsingValNativeNoTz(Item* item, gp_walk_info& gwi) +{ + DBUG_ASSERT(item->const_item()); + + switch (item->cmp_type()) + { + case INT_RESULT: + { + if (item->unsigned_flag) + return new execplan::ConstantColumnUInt((uint64_t)item->val_uint(), (int8_t)item->decimal_scale(), + (uint8_t)item->decimal_precision()); + ValStrStdString str(item); + DBUG_ASSERT(!str.isNull()); + return new execplan::ConstantColumnSInt(colType_MysqlToIDB(item), str, (int64_t)item->val_int()); + } + case STRING_RESULT: + { + // Special handling for 0xHHHH literals + if (item->type_handler() == &type_handler_hex_hybrid) + return new execplan::ConstantColumn((int64_t)item->val_int(), execplan::ConstantColumn::NUM); + ValStrStdString str(item); + DBUG_ASSERT(!str.isNull()); + return new execplan::ConstantColumnString(str); + } + case REAL_RESULT: + { + ValStrStdString str(item); + DBUG_ASSERT(!str.isNull()); + return new execplan::ConstantColumnReal(colType_MysqlToIDB(item), str, item->val_real()); + } + case DECIMAL_RESULT: + { + ValStrStdString str(item); + DBUG_ASSERT(!str.isNull()); + return buildDecimalColumn(item, str, gwi); + } + case TIME_RESULT: + { + ValStrStdString str(item); + DBUG_ASSERT(!str.isNull()); + return new execplan::ConstantColumnTemporal(colType_MysqlToIDB(item), str); + } + default: + { + gwi.fatalParseError = true; + gwi.parseErrorText = "Unknown item type"; + break; + } + } + + return nullptr; +} + +bool isSupportedAggregateWithOneConstArg(const Item_sum* item, Item** orig_args) +{ + if (item->argument_count() != 1 || !orig_args[0]->const_item()) + return false; + switch (orig_args[0]->cmp_type()) + { + case INT_RESULT: + case STRING_RESULT: + case REAL_RESULT: + case DECIMAL_RESULT: return true; + default: break; + } + return false; +} + +} // namespace cal_impl_if \ No newline at end of file diff --git a/dbcon/mysql/ha_mcs_execplan_helpers.h b/dbcon/mysql/ha_mcs_execplan_helpers.h new file mode 100644 index 000000000..178e3a45c --- /dev/null +++ b/dbcon/mysql/ha_mcs_execplan_helpers.h @@ -0,0 +1,58 @@ +/* Copyright (C) 2025 MariaDB Corporation + + 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; version 2 of + the License. + + 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 GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#pragma once + + +#define PREFER_MY_CONFIG_H +#include +#include "idb_mysql.h" + +#include "constantcolumn.h" +#include "ha_mcs_impl_if.h" + +namespace cal_impl_if +{ + +class ValStrStdString : public std::string +{ + bool mIsNull; + + public: + ValStrStdString(Item* item) + { + String val, *str = item->val_str(&val); + mIsNull = (str == nullptr); + DBUG_ASSERT(mIsNull == item->null_value); + if (!mIsNull) + assign(str->ptr(), str->length()); + } + bool isNull() const + { + return mIsNull; + } +}; + +bool nonConstFunc(Item_func* ifp); +// Note: This function might be unused currently but is kept for future compatibility. +execplan::ConstantColumn* buildConstantColumnMaybeNullFromValStr(const Item* item, const ValStrStdString& valStr, + cal_impl_if::gp_walk_info& gwi); +execplan::ConstantColumn* newConstantColumnNotNullUsingValNativeNoTz(Item* item, gp_walk_info& gwi); +bool isSupportedAggregateWithOneConstArg(const Item_sum* item, Item** orig_args); +execplan::ConstantColumn* buildConstantColumnNotNullUsingValNative(Item* item, gp_walk_info& gwi); +execplan::ConstantColumn* buildConstantColumnMaybeNullUsingValStr(Item* item, gp_walk_info& gwi); +} diff --git a/dbcon/mysql/ha_mcs_execplan_parseinfo_bits.h b/dbcon/mysql/ha_mcs_execplan_parseinfo_bits.h new file mode 100644 index 000000000..0ef458b7a --- /dev/null +++ b/dbcon/mysql/ha_mcs_execplan_parseinfo_bits.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2025 MariaDB Corporation + + 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; version 2 of + the License. + + 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 GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#pragma once + +#include + +namespace cal_impl_if +{ + const uint64_t AGG_BIT = 0x01; + const uint64_t SUB_BIT = 0x02; + const uint64_t AF_BIT = 0x04; + const uint64_t CORRELATED = 0x08; +} \ No newline at end of file diff --git a/dbcon/mysql/ha_mcs_execplan_walks.cpp b/dbcon/mysql/ha_mcs_execplan_walks.cpp new file mode 100644 index 000000000..55f66e1dc --- /dev/null +++ b/dbcon/mysql/ha_mcs_execplan_walks.cpp @@ -0,0 +1,1636 @@ +/* Copyright (C) 2025 MariaDB Corporation + + 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; version 2 of + the License. + + 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 GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "ha_mcs_execplan_helpers.h" +#include "ha_mcs_execplan_parseinfo_bits.h" +#include "ha_mcs_execplan_walks.h" +#include "ha_mcs_impl_if.h" +#include "ha_subquery.h" + +#include "constantcolumn.h" +#include "logicoperator.h" +#include "rowcolumn.h" +#include "simplefilter.h" + +namespace cal_impl_if +{ +// In certain cases, gp_walk is called recursively. When done so, +// we need to bookmark the rcWorkStack for those cases where a constant +// expression such as 1=1 is used in an if statement or function call. +// This is a seriously bad kludge for MariaDB bug 750. +// +// BM => BookMark +// HWM => HighWaterMark +class RecursionCounter +{ + private: + RecursionCounter() + { + } + + public: + RecursionCounter(cal_impl_if::gp_walk_info* gwip) : fgwip(gwip) + { + ++fgwip->recursionLevel; + + if (fgwip->recursionLevel > fgwip->recursionHWM) + { + fgwip->rcBookMarkStack.push(fgwip->rcWorkStack.size()); + fgwip->recursionHWM = fgwip->recursionLevel; + } + } + ~RecursionCounter() + { + --fgwip->recursionLevel; + + if (fgwip->recursionLevel < fgwip->recursionHWM - 1) + { + fgwip->rcBookMarkStack.pop(); + --fgwip->recursionHWM; + } + } + + cal_impl_if::gp_walk_info* fgwip; +}; + +bool isSecondArgumentConstItem(Item_func* ifp) +{ + return (ifp->argument_count() == 2 && ifp->arguments()[1]->type() == Item::CONST_ITEM); +} + +// SELECT ... WHERE NOT IN (SELECT ); +bool isNotFuncAndConstScalarSubSelect(Item_func* ifp, const std::string& funcName) +{ + return (ifp->with_subquery() && funcName == "not" && ifp->argument_count() == 1 && + ifp->arguments()[0]->type() == Item::FUNC_ITEM && + std::string(((Item_func*)ifp->arguments()[0])->func_name()) == "=" && + isSecondArgumentConstItem((Item_func*)ifp->arguments()[0])); +} + +void gp_walk(const Item* item, void* arg) +{ + cal_impl_if::gp_walk_info* gwip = static_cast(arg); + idbassert(gwip); + + // Bailout... + if (gwip->fatalParseError) + return; + + RecursionCounter r(gwip); // Increments and auto-decrements upon exit. + + Item::Type itype = item->type(); + + // Allow to process XOR(which is Item_func) like other logical operators (which are Item_cond) + if (itype == Item::FUNC_ITEM && ((Item_func*)item)->functype() == Item_func::XOR_FUNC) + itype = Item::COND_ITEM; + + switch (itype) + { + case Item::CACHE_ITEM: + { + // The item or condition is cached as per MariaDB server view but + // for InfiniDB it need to be parsed and executed. + // MCOL-1188 and MCOL-1029 + Item* orig_item = ((Item_cache*)item)->get_example(); + orig_item->traverse_cond(gp_walk, gwip, Item::POSTFIX); + break; + } + case Item::FIELD_ITEM: + { + Item_field* ifp = (Item_field*)item; + + if (ifp) + { + // XXX: this looks awfuly wrong. + execplan::SimpleColumn* scp = buildSimpleColumn(ifp, *gwip); + + if (!scp) + break; + + string aliasTableName(scp->tableAlias()); + scp->tableAlias(aliasTableName); + gwip->rcWorkStack.push(scp->clone()); + boost::shared_ptr scsp(scp); + gwip->scsp = scsp; + + gwip->funcName.clear(); + gwip->columnMap.insert( + execplan::CalpontSelectExecutionPlan::ColumnMap::value_type(string(ifp->field_name.str), scsp)); + + //@bug4636 take where clause column as dummy projection column, but only on local column. + // varbinary aggregate is not supported yet, so rule it out + if (!((scp->joinInfo() & execplan::JOIN_CORRELATED) || + scp->colType().colDataType == execplan::CalpontSystemCatalog::VARBINARY)) + { + TABLE_LIST* tmp = (ifp->cached_table ? ifp->cached_table : 0); + gwip->tableMap[execplan::make_aliastable(scp->schemaName(), scp->tableName(), scp->tableAlias(), + scp->isColumnStore())] = make_pair(1, tmp); + } + } + + break; + } + + case Item::CONST_ITEM: + { + switch (item->cmp_type()) + { + case INT_RESULT: + { + Item* non_const_item = const_cast(item); + gwip->rcWorkStack.push(buildReturnedColumn(non_const_item, *gwip, gwip->fatalParseError)); + break; + } + + case STRING_RESULT: + { + // Special handling for 0xHHHH literals + if (item->type_handler() == &type_handler_hex_hybrid) + { + Item_hex_hybrid* hip = static_cast(const_cast(item)); + gwip->rcWorkStack.push(new execplan::ConstantColumn((int64_t)hip->val_int(), execplan::ConstantColumn::NUM)); + execplan::ConstantColumn* cc = dynamic_cast(gwip->rcWorkStack.top()); + cc->timeZone(gwip->timeZone); + break; + } + + if (item->result_type() == STRING_RESULT) + { + // dangerous cast here + Item* isp = const_cast(item); + String val, *str = isp->val_str(&val); + if (str) + { + string cval; + + if (str->ptr()) + { + cval.assign(str->ptr(), str->length()); + } + + gwip->rcWorkStack.push(new execplan::ConstantColumn(cval)); + (dynamic_cast(gwip->rcWorkStack.top()))->timeZone(gwip->timeZone); + break; + } + else + { + gwip->rcWorkStack.push(new execplan::ConstantColumn("", execplan::ConstantColumn::NULLDATA)); + (dynamic_cast(gwip->rcWorkStack.top()))->timeZone(gwip->timeZone); + break; + } + + gwip->rcWorkStack.push(buildReturnedColumn(isp, *gwip, gwip->fatalParseError)); + } + break; + } + + case REAL_RESULT: + case DECIMAL_RESULT: + case TIME_RESULT: + { + Item* nonConstItem = const_cast(item); + gwip->rcWorkStack.push(buildReturnedColumn(nonConstItem, *gwip, gwip->fatalParseError)); + break; + } + + default: + { + if (gwip->condPush) + { + // push noop for unhandled item + execplan::SimpleColumn* rc = new execplan::SimpleColumn("noop"); + rc->timeZone(gwip->timeZone); + gwip->rcWorkStack.push(rc); + break; + } + + ostringstream oss; + oss << "Unhandled Item type(): " << item->type(); + gwip->parseErrorText = oss.str(); + gwip->fatalParseError = true; + break; + } + } + break; + } + case Item::NULL_ITEM: + { + if (gwip->condPush) + { + // push noop for unhandled item + execplan::SimpleColumn* rc = new execplan::SimpleColumn("noop"); + rc->timeZone(gwip->timeZone); + gwip->rcWorkStack.push(rc); + break; + } + + gwip->rcWorkStack.push(new execplan::ConstantColumn("", execplan::ConstantColumn::NULLDATA)); + (dynamic_cast(gwip->rcWorkStack.top()))->timeZone(gwip->timeZone); + break; + } + + case Item::FUNC_ITEM: + { + Item* ncitem = const_cast(item); + Item_func* ifp = static_cast(ncitem); + + string funcName = ifp->func_name(); + + if (!gwip->condPush) + { + if (!ifp->fixed()) + { + ifp->fix_fields(gwip->thd, &ncitem); + } + + // Special handling for queries of the form: + // SELECT ... WHERE col1 NOT IN (SELECT ); + if (isNotFuncAndConstScalarSubSelect(ifp, funcName)) + { + idbassert(!gwip->ptWorkStack.empty()); + execplan::ParseTree* pt = gwip->ptWorkStack.top(); + execplan::SimpleFilter* sf = dynamic_cast(pt->data()); + + if (sf) + { + boost::shared_ptr sop(new execplan::PredicateOperator("<>")); + sf->op(sop); + return; + } + } + + // Do not call buildSubselectFunc() if the subquery is a const scalar + // subselect of the form: + // (SELECT ) + // As an example: SELECT col1 FROM t1 WHERE col2 = (SELECT 2); + if ((ifp->with_subquery() && !isSecondArgumentConstItem(ifp)) || funcName == "") + { + buildSubselectFunc(ifp, gwip); + return; + } + + if (ifp->argument_count() > 0 && ifp->arguments()) + { + for (uint32_t i = 0; i < ifp->argument_count(); i++) + { + if (ifp->arguments()[i]->type() == Item::SUBSELECT_ITEM) + { + // This is probably NOT IN subquery with derived table in it. + // for some reason, MySQL has not fully optimized the plan at this point. + // noop here, and eventually MySQL will continue its optimization and get + // to rnd_init again. + if (ifp->functype() == Item_func::NOT_FUNC) + return; + + buildSubselectFunc(ifp, gwip); + return; + } + } + } + + if (ifp->functype() == Item_func::TRIG_COND_FUNC && gwip->subQuery) + { + gwip->subQuery->handleFunc(gwip, ifp); + break; + } + + // having clause null function added by MySQL + if (ifp->functype() == Item_func::ISNOTNULLTEST_FUNC) + { + // @bug 4215. remove the argument in rcWorkStack. + if (!gwip->rcWorkStack.empty()) + { + delete gwip->rcWorkStack.top(); + gwip->rcWorkStack.pop(); + } + + break; + } + } + + // try to evaluate const F&E + vector tmpVec; + uint16_t parseInfo = 0; + parse_item(ifp, tmpVec, gwip->fatalParseError, parseInfo, gwip); + + // table mode takes only one table filter + if (gwip->condPush) + { + set tableSet; + + for (uint32_t i = 0; i < tmpVec.size(); i++) + { + if (tmpVec[i]->table_name.str) + tableSet.insert(tmpVec[i]->table_name.str); + } + + if (tableSet.size() > 1) + break; + } + + if (!gwip->fatalParseError && !(parseInfo & AGG_BIT) && !(parseInfo & SUB_BIT) && !nonConstFunc(ifp) && + !(parseInfo & AF_BIT) && tmpVec.size() == 0 && ifp->functype() != Item_func::MULT_EQUAL_FUNC) + { + ValStrStdString valStr(ifp); + + execplan::ConstantColumn* cc = buildConstantColumnMaybeNullFromValStr(ifp, valStr, *gwip); + + for (uint32_t i = 0; i < ifp->argument_count() && !gwip->rcWorkStack.empty(); i++) + { + delete gwip->rcWorkStack.top(); + gwip->rcWorkStack.pop(); + } + + // bug 3137. If filter constant like 1=0, put it to ptWorkStack + // MariaDB bug 750. Breaks if compare is an argument to a function. + // if ((int32_t)gwip->rcWorkStack.size() <= + //(gwip->rcBookMarkStack.empty() + //? + // 0 + //: gwip->rcBookMarkStack.top()) + // && isPredicateFunction(ifp, gwip)) + if (isPredicateFunction(ifp, gwip)) + gwip->ptWorkStack.push(new execplan::ParseTree(cc)); + else + gwip->rcWorkStack.push(cc); + + if (!valStr.isNull()) + IDEBUG(cerr << "Const F&E " << item->full_name() << " evaluate: " << valStr << endl); + + break; + } + + execplan::ReturnedColumn* rc = NULL; + + // @bug4488. Process function for table mode also, not just vtable mode. + rc = buildFunctionColumn(ifp, *gwip, gwip->fatalParseError); + + if (gwip->fatalParseError) + { + if (gwip->clauseType == SELECT) + return; + + // @bug 2585 + if (gwip->parseErrorText.empty()) + { + logging::Message::Args args; + args.add(funcName); + gwip->parseErrorText = logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_NON_SUPPORTED_FUNCTION, args); + } + + return; + } + + // predicate operators fall in the old path + if (rc) + { + // @bug 2383. For some reason func_name() for "in" gives " IN " always + if (funcName == "between" || funcName == "in" || funcName == " IN ") + gwip->ptWorkStack.push(new execplan::ParseTree(rc)); + else + gwip->rcWorkStack.push(rc); + } + else + { + // push to pt or rc stack is handled inside the function + buildPredicateItem(ifp, gwip); + } + + break; + } + + case Item::SUM_FUNC_ITEM: + { + Item_sum* isp = (Item_sum*)item; + execplan::ReturnedColumn* rc = buildAggregateColumn(isp, *gwip); + + if (rc) + gwip->rcWorkStack.push(rc); + + break; + } + + case Item::COND_ITEM: + { + // All logical functions are handled here, most of them are Item_cond, + // but XOR (it is Item_func_boolean2) + Item_func* func = (Item_func*)item; + + enum Item_func::Functype ftype = func->functype(); + bool isOr = (ftype == Item_func::COND_OR_FUNC); + bool isXor = (ftype == Item_func::XOR_FUNC); + + List* argumentList; + List xorArgumentList; + + if (isXor) + { + for (unsigned i = 0; i < func->argument_count(); i++) + { + xorArgumentList.push_back(func->arguments()[i]); + } + + argumentList = &xorArgumentList; + } + else + { + argumentList = ((Item_cond*)item)->argument_list(); + } + + // @bug2932. if ptWorkStack contains less items than the condition's arguments, + // the missing one should be in the rcWorkStack, unless the it's subselect. + // @todo need to figure out a way to combine these two stacks while walking. + // if (gwip->ptWorkStack.size() < icp->argument_list()->elements) + { + List_iterator_fast li(*argumentList); + + while (Item* it = li++) + { + //@bug3495, @bug5865 error out non-supported OR with correlated subquery + if (isOr) + { + vector fieldVec; + uint16_t parseInfo = 0; + parse_item(it, fieldVec, gwip->fatalParseError, parseInfo, gwip); + + if (parseInfo & CORRELATED) + { + gwip->fatalParseError = true; + gwip->parseErrorText = logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_CORRELATED_SUB_OR); + return; + } + } + + if ((it->type() == Item::FIELD_ITEM || + (it->type() == Item::CONST_ITEM && + (it->cmp_type() == INT_RESULT || it->cmp_type() == DECIMAL_RESULT || + it->cmp_type() == STRING_RESULT || it->cmp_type() == REAL_RESULT)) || + it->type() == Item::NULL_ITEM || + (it->type() == Item::FUNC_ITEM && !isPredicateFunction(it, gwip))) && + !gwip->rcWorkStack.empty()) + { + gwip->ptWorkStack.push(new execplan::ParseTree(gwip->rcWorkStack.top())); + gwip->rcWorkStack.pop(); + } + } + } + + // @bug1603. MySQL's filter tree is a multi-tree grouped by operator. So more than + // two filters saved on the stack so far might belong to this operator. + uint32_t leftInStack = gwip->ptWorkStack.size() - argumentList->elements + 1; + + while (true) + { + if (gwip->ptWorkStack.size() < 2) + break; + + execplan::ParseTree* lhs = gwip->ptWorkStack.top(); + gwip->ptWorkStack.pop(); + execplan::SimpleFilter* lsf = dynamic_cast(lhs->data()); + + if (lsf && lsf->op()->data() == "noop") + { + if (isOr) + { + gwip->parseErrorText = "Unhandled item in WHERE or HAVING clause"; + gwip->fatalParseError = true; + break; + } + else + continue; + } + + execplan::ParseTree* rhs = gwip->ptWorkStack.top(); + gwip->ptWorkStack.pop(); + execplan::SimpleFilter* rsf = dynamic_cast(rhs->data()); + + if (rsf && rsf->op()->data() == "noop") + { + if (isOr) + { + gwip->parseErrorText = "Unhandled item in WHERE or HAVING clause"; + gwip->fatalParseError = true; + break; + } + else + { + delete rhs; + gwip->ptWorkStack.push(lhs); + continue; + } + } + + execplan::Operator* op = new execplan::LogicOperator(func->func_name()); + execplan::ParseTree* ptp = new execplan::ParseTree(op); + ptp->left(lhs); + ptp->right(rhs); + gwip->ptWorkStack.push(ptp); + + if (gwip->ptWorkStack.size() == leftInStack) + break; + } + + // special handling for subquery with aggregate. MySQL adds isnull function to the selected + // column. InfiniDB will remove it and set nullmatch flag if it's NOT_IN sub. + // @todo need more checking here to make sure it's not a user input OR operator + if (isOr && gwip->subQuery) + gwip->subQuery->handleFunc(gwip, func); + + break; + } + + case Item::REF_ITEM: + { + Item* col = *(((Item_ref*)item)->ref); + execplan::ReturnedColumn* rc = NULL; + // ref item is not pre-walked. force clause type to SELECT + ClauseType clauseType = gwip->clauseType; + gwip->clauseType = SELECT; + + if (col->type() != Item::COND_ITEM) + { + rc = buildReturnedColumn(col, *gwip, gwip->fatalParseError, true); + + if (col->type() == Item::FIELD_ITEM) + gwip->fatalParseError = false; + } + + execplan::SimpleColumn* sc = clauseType == HAVING ? nullptr : dynamic_cast(rc); + + if (sc) + { + boost::shared_ptr scsp(sc->clone()); + gwip->scsp = scsp; + + if (col->type() == Item::FIELD_ITEM) + { + const Item_ident* ident_field = dynamic_cast(item); + if (ident_field) + { + const auto& field_name = string(ident_field->field_name.str); + auto colMap = execplan::CalpontSelectExecutionPlan::ColumnMap::value_type(field_name, scsp); + gwip->columnMap.insert(colMap); + } + } + } + + bool cando = true; + gwip->clauseType = clauseType; + + if (rc) + { + if (((Item_ref*)item)->depended_from) + { + rc->joinInfo(rc->joinInfo() | execplan::JOIN_CORRELATED); + + if (gwip->subQuery) + gwip->subQuery->correlated(true); + + execplan::SimpleColumn* scp = dynamic_cast(rc); + + if (scp) + gwip->correlatedTbNameVec.push_back( + execplan::make_aliastable(scp->schemaName(), scp->tableName(), scp->tableAlias())); + + if (gwip->subSelectType == execplan::CalpontSelectExecutionPlan::SINGLEROW_SUBS) + rc->joinInfo(rc->joinInfo() | execplan::JOIN_SCALAR | execplan::JOIN_SEMI); + + if (gwip->subSelectType == execplan::CalpontSelectExecutionPlan::SELECT_SUBS) + rc->joinInfo(rc->joinInfo() | execplan::JOIN_SCALAR | execplan::JOIN_OUTER_SELECT); + } + + gwip->rcWorkStack.push(rc); + } + else if (col->type() == Item::FUNC_ITEM) + { + // sometimes mysql treat having filter items inconsistently. In such cases, + // which are always predicate operator, the function (gp_key>3) comes in as + // one item. + Item_func* ifp = (Item_func*)col; + + for (uint32_t i = 0; i < ifp->argument_count(); i++) + { + execplan::ReturnedColumn* operand = NULL; + + if (ifp->arguments()[i]->type() == Item::REF_ITEM) + { + Item* op = *(((Item_ref*)ifp->arguments()[i])->ref); + operand = buildReturnedColumn(op, *gwip, gwip->fatalParseError); + } + else + operand = buildReturnedColumn(ifp->arguments()[i], *gwip, gwip->fatalParseError); + + if (operand) + { + gwip->rcWorkStack.push(operand); + if (i == 0 && gwip->scsp == NULL) // first item is the WHEN LHS + { + execplan::SimpleColumn* sc = dynamic_cast(operand); + if (sc) + { + gwip->scsp.reset(sc->clone()); // We need to clone else sc gets double deleted. This code is + // rarely executed so the cost is acceptable. + } + } + } + else + { + cando = false; + break; + } + } + + if (cando) + buildPredicateItem(ifp, gwip); + } + else if (col->type() == Item::COND_ITEM) + { + gwip->ptWorkStack.push(buildParseTree(col, *gwip, gwip->fatalParseError)); + } + else if (col->type() == Item::FIELD_ITEM && gwip->clauseType == HAVING) + { + // ReturnedColumn* rc = buildAggFrmTempField(const_cast(item), *gwip); + execplan::ReturnedColumn* rc = buildReturnedColumn(const_cast(item), *gwip, gwip->fatalParseError); + if (rc) + gwip->rcWorkStack.push(rc); + + break; + } + else + { + cando = false; + } + + execplan::SimpleColumn* thisSC = dynamic_cast(rc); + if (thisSC) + { + gwip->scsp.reset(thisSC->clone()); + } + if (!rc && !cando) + { + ostringstream oss; + oss << "Unhandled Item type(): " << item->type(); + gwip->parseErrorText = oss.str(); + gwip->fatalParseError = true; + } + + break; + } + + case Item::SUBSELECT_ITEM: + { + if (gwip->condPush) // table mode + break; + + Item_subselect* sub = (Item_subselect*)item; + + if (sub->substype() == Item_subselect::EXISTS_SUBS) + { + SubQuery* orig = gwip->subQuery; + ExistsSub* existsSub = new ExistsSub(*gwip, sub); + gwip->hasSubSelect = true; + gwip->subQuery = existsSub; + gwip->ptWorkStack.push(existsSub->transform()); + // recover original + gwip->subQuery = orig; + gwip->lastSub = existsSub; + } + else if (sub->substype() == Item_subselect::IN_SUBS) + { + if (!((Item_in_subselect*)sub)->optimizer && gwip->thd->derived_tables_processing) + { + ostringstream oss; + oss << "Invalid In_optimizer: " << item->type(); + gwip->parseErrorText = oss.str(); + gwip->fatalParseError = true; + break; + } + } + + // store a dummy subselect object. the transform is handled in item_func. + execplan::SubSelect* subselect = new execplan::SubSelect(); + gwip->rcWorkStack.push(subselect); + break; + } + + case Item::ROW_ITEM: + { + Item_row* row = (Item_row*)item; + execplan::RowColumn* rowCol = new execplan::RowColumn(); + vector cols; + // temp change clause type because the elements of row column are not walked yet + gwip->clauseType = SELECT; + for (uint32_t i = 0; i < row->cols(); i++) + cols.push_back(execplan::SRCP(buildReturnedColumn(row->element_index(i), *gwip, gwip->fatalParseError))); + + gwip->clauseType = WHERE; + rowCol->columnVec(cols); + gwip->rcWorkStack.push(rowCol); + break; + } + + case Item::EXPR_CACHE_ITEM: + { + ((Item_cache_wrapper*)item)->get_orig_item()->traverse_cond(gp_walk, arg, Item::POSTFIX); + break; + } + + case Item::WINDOW_FUNC_ITEM: + { + gwip->hasWindowFunc = true; + Item_window_func* ifa = (Item_window_func*)item; + execplan::ReturnedColumn* af = buildWindowFunctionColumn(ifa, *gwip, gwip->fatalParseError); + + if (af) + gwip->rcWorkStack.push(af); + + break; + } + + case Item::COPY_STR_ITEM: printf("********** received COPY_STR_ITEM *********\n"); break; + + case Item::FIELD_AVG_ITEM: printf("********** received FIELD_AVG_ITEM *********\n"); break; + + case Item::DEFAULT_VALUE_ITEM: printf("********** received DEFAULT_VALUE_ITEM *********\n"); break; + + case Item::PROC_ITEM: printf("********** received PROC_ITEM *********\n"); break; + + case Item::FIELD_STD_ITEM: printf("********** received FIELD_STD_ITEM *********\n"); break; + + case Item::FIELD_VARIANCE_ITEM: printf("********** received FIELD_VARIANCE_ITEM *********\n"); break; + + case Item::INSERT_VALUE_ITEM: printf("********** received INSERT_VALUE_ITEM *********\n"); break; + + case Item::PARAM_ITEM: printf("********** received PARAM_ITEM *********\n"); break; + + case Item::TRIGGER_FIELD_ITEM: printf("********** received TRIGGER_FIELD_ITEM *********\n"); break; + + case Item::TYPE_HOLDER: std::cerr << "********** received TYPE_HOLDER *********" << std::endl; break; + default: + { + if (gwip->condPush) + { + // push noop for unhandled item + execplan::SimpleColumn* rc = new execplan::SimpleColumn("noop"); + rc->timeZone(gwip->timeZone); + gwip->rcWorkStack.push(rc); + break; + } + + ostringstream oss; + oss << "Unhandled Item type (2): " << item->type(); + gwip->parseErrorText = oss.str(); + gwip->fatalParseError = true; + break; + } + } + + return; +} + +/** @info this function recursivly walks an item's arguments and push all + * the involved item_fields to the passed in vector. It's used in parsing + * functions or arithmetic expressions for vtable post process. + */ +void parse_item(Item* item, vector& field_vec, bool& hasNonSupportItem, uint16_t& parseInfo, + gp_walk_info* gwi) +{ + Item::Type itype = item->type(); + + switch (itype) + { + case Item::FIELD_ITEM: + { + Item_field* ifp = static_cast(item); + field_vec.push_back(ifp); + return; + } + + case Item::SUM_FUNC_ITEM: + { + // hasAggColumn = true; + parseInfo |= AGG_BIT; + Item_sum* isp = static_cast(item); + Item** sfitempp = isp->arguments(); + + for (uint32_t i = 0; i < isp->argument_count(); i++) + parse_item(sfitempp[i], field_vec, hasNonSupportItem, parseInfo, gwi); + + break; + } + + case Item::FUNC_ITEM: + { + Item_func* isp = static_cast(item); + + if (string(isp->func_name()) == "") + { + parseInfo |= SUB_BIT; + parseInfo |= CORRELATED; + break; + } + + for (uint32_t i = 0; i < isp->argument_count(); i++) + parse_item(isp->arguments()[i], field_vec, hasNonSupportItem, parseInfo, gwi); + + break; + } + + case Item::COND_ITEM: + { + Item_cond* icp = static_cast(item); + List_iterator_fast it(*(icp->argument_list())); + Item* cond_item; + + while ((cond_item = it++)) + parse_item(cond_item, field_vec, hasNonSupportItem, parseInfo, gwi); + + break; + } + + case Item::REF_ITEM: + { + Item_ref* ref = (Item_ref*)item; + if (ref->ref_type() == Item_ref::DIRECT_REF) + { + parse_item(ref->real_item(), field_vec, hasNonSupportItem, parseInfo, gwi); + break; + } + while (true) + { + ref = (Item_ref*)item; + if ((*(ref->ref))->type() == Item::SUM_FUNC_ITEM) + { + parseInfo |= AGG_BIT; + Item_sum* isp = static_cast(*(ref->ref)); + Item** sfitempp = isp->arguments(); + + // special handling for count(*). This should not be treated as constant. + if (isSupportedAggregateWithOneConstArg(isp, sfitempp)) + { + field_vec.push_back(nullptr); // dummy + } + + for (uint32_t i = 0; i < isp->argument_count(); i++) + parse_item(sfitempp[i], field_vec, hasNonSupportItem, parseInfo, gwi); + + break; + } + else if ((*(ref->ref))->type() == Item::FIELD_ITEM) + { + // MCOL-1510. This could be a non-supported function + // argument in form of a temp_table_field, so check + // and set hasNonSupportItem if it is so. + // ReturnedColumn* rc = NULL; + // if (gwi) + // rc = buildAggFrmTempField(ref, *gwi); + + // if (!rc) + //{ + Item_field* ifp = static_cast(*(ref->ref)); + field_vec.push_back(ifp); + //} + break; + } + else if ((*(ref->ref))->type() == Item::FUNC_ITEM) + { + Item_func* isp = static_cast(*(ref->ref)); + Item** sfitempp = isp->arguments(); + + for (uint32_t i = 0; i < isp->argument_count(); i++) + parse_item(sfitempp[i], field_vec, hasNonSupportItem, parseInfo, gwi); + + break; + } + else if ((*(ref->ref))->type() == Item::CACHE_ITEM) + { + Item_cache* isp = static_cast(*(ref->ref)); + parse_item(isp->get_example(), field_vec, hasNonSupportItem, parseInfo, gwi); + break; + } + else if ((*(ref->ref))->type() == Item::REF_ITEM) + { + item = (*(ref->ref)); + continue; + } + else if ((*(ref->ref))->type() == Item::WINDOW_FUNC_ITEM) + { + parseInfo |= AF_BIT; + break; + } + else + { + cerr << "UNKNOWN REF Item" << endl; + break; + } + } + + break; + } + + case Item::SUBSELECT_ITEM: + { + parseInfo |= SUB_BIT; + Item_subselect* sub = (Item_subselect*)item; + + if (sub->is_correlated) + parseInfo |= CORRELATED; + + break; + } + + case Item::ROW_ITEM: + { + Item_row* row = (Item_row*)item; + + for (uint32_t i = 0; i < row->cols(); i++) + parse_item(row->element_index(i), field_vec, hasNonSupportItem, parseInfo, gwi); + + break; + } + + case Item::EXPR_CACHE_ITEM: + { + // item is a Item_cache_wrapper. Shouldn't get here. + // DRRTUY TODO Why + IDEBUG(std::cerr << "EXPR_CACHE_ITEM in parse_item\n" << std::endl); + gwi->fatalParseError = true; + // DRRTUY The questionable error text. I've seen + // ERR_CORRELATED_SUB_OR + string parseErrorText = logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_NON_SUPPORT_SUB_QUERY_TYPE); + setError(gwi->thd, ER_CHECK_NOT_IMPLEMENTED, parseErrorText); + break; + } + + case Item::WINDOW_FUNC_ITEM: parseInfo |= AF_BIT; break; + + default: break; + } +} + +void debug_walk(const Item* item, void* arg) +{ + switch (item->type()) + { + case Item::FIELD_ITEM: + { + Item_field* ifp = (Item_field*)item; + cerr << "FIELD_ITEM: " << (ifp->db_name.str ? ifp->db_name.str : "") << '.' << bestTableName(ifp) << '.' + << ifp->field_name.str << endl; + break; + } + case Item::CONST_ITEM: + { + switch (item->cmp_type()) + { + case INT_RESULT: + { + Item_int* iip = (Item_int*)item; + cerr << "INT_ITEM: "; + + if (iip->name.length) + cerr << iip->name.str << " (from name string)" << endl; + else + cerr << iip->val_int() << endl; + + break; + } + case STRING_RESULT: + { + Item_string* isp = (Item_string*)item; + String val, *str = isp->val_str(&val); + string valStr; + valStr.assign(str->ptr(), str->length()); + cerr << "STRING_ITEM: >" << valStr << '<' << endl; + break; + } + case REAL_RESULT: + { + cerr << "REAL_ITEM" << endl; + break; + } + case DECIMAL_RESULT: + { + cerr << "DECIMAL_ITEM" << endl; + break; + } + case TIME_RESULT: + { + String val, *str = NULL; + Item_temporal_literal* itp = (Item_temporal_literal*)item; + str = itp->val_str(&val); + cerr << "DATE ITEM: "; + + if (str) + cerr << ": (" << str->ptr() << ')' << endl; + else + cerr << ": " << endl; + + break; + } + default: + { + cerr << ": Unknown cmp_type" << endl; + break; + } + } + break; + } + case Item::FUNC_ITEM: + { + Item_func* ifp = (Item_func*)item; + Item_func_opt_neg* inp; + cerr << "FUNC_ITEM: "; + + switch (ifp->functype()) + { + case Item_func::UNKNOWN_FUNC: // 0 + cerr << ifp->func_name() << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::GT_FUNC: // 7 + cerr << '>' << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::EQ_FUNC: // 1 + cerr << '=' << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::GE_FUNC: cerr << ">=" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::LE_FUNC: cerr << "<=" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::LT_FUNC: cerr << '<' << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::NE_FUNC: cerr << "<>" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::NEG_FUNC: // 45 + cerr << "unary minus" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::IN_FUNC: // 16 + inp = (Item_func_opt_neg*)ifp; + + if (inp->negated) + cerr << "not "; + + cerr << "in" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::BETWEEN: + inp = (Item_func_opt_neg*)ifp; + + if (inp->negated) + cerr << "not "; + + cerr << "between" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::ISNULL_FUNC: // 10 + cerr << "is null" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::ISNOTNULL_FUNC: // 11 + cerr << "is not null" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::NOT_ALL_FUNC: cerr << "not_all" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::NOT_FUNC: cerr << "not_func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::TRIG_COND_FUNC: + cerr << "trig_cond_func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::ISNOTNULLTEST_FUNC: + cerr << "isnotnulltest_func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::MULT_EQUAL_FUNC: + { + cerr << "mult_equal_func:" << " (" << ifp->functype() << ")" << endl; + Item_equal* item_eq = (Item_equal*)ifp; + Item_equal_fields_iterator it(*item_eq); + Item* item; + + while ((item = it++)) + { + Field* equal_field = it.get_curr_field(); + cerr << equal_field->field_name.str << endl; + } + + break; + } + + case Item_func::EQUAL_FUNC: cerr << "equal func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::FT_FUNC: cerr << "ft func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::LIKE_FUNC: cerr << "like func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::COND_AND_FUNC: + cerr << "cond and func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::COND_OR_FUNC: cerr << "cond or func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::XOR_FUNC: cerr << "xor func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::INTERVAL_FUNC: + cerr << "interval func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_EQUALS_FUNC: + cerr << "sp equals func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_DISJOINT_FUNC: + cerr << "sp disjoint func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_INTERSECTS_FUNC: + cerr << "sp intersects func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_TOUCHES_FUNC: + cerr << "sp touches func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_CROSSES_FUNC: + cerr << "sp crosses func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_WITHIN_FUNC: + cerr << "sp within func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_CONTAINS_FUNC: + cerr << "sp contains func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_OVERLAPS_FUNC: + cerr << "sp overlaps func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_STARTPOINT: + cerr << "sp startpoint func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_ENDPOINT: + cerr << "sp endpoint func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_EXTERIORRING: + cerr << "sp exteriorring func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_POINTN: cerr << "sp pointn func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::SP_GEOMETRYN: + cerr << "sp geometryn func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_INTERIORRINGN: + cerr << "sp exteriorringn func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::SP_RELATE_FUNC: + cerr << "sp relate func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::NOW_FUNC: cerr << "now func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::SUSERVAR_FUNC: + cerr << "suservar func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::GUSERVAR_FUNC: + cerr << "guservar func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::COLLATE_FUNC: cerr << "collate func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::EXTRACT_FUNC: cerr << "extract func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::CHAR_TYPECAST_FUNC: + cerr << "char typecast func" << " (" << ifp->functype() << ")" << endl; + break; + + case Item_func::FUNC_SP: cerr << "func sp func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::UDF_FUNC: cerr << "udf func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::GSYSVAR_FUNC: cerr << "gsysvar func" << " (" << ifp->functype() << ")" << endl; break; + + case Item_func::DYNCOL_FUNC: cerr << "dyncol func" << " (" << ifp->functype() << ")" << endl; break; + + default: cerr << "type=" << ifp->functype() << endl; break; + } + + break; + } + + case Item::COND_ITEM: + { + Item_cond* icp = (Item_cond*)item; + cerr << "COND_ITEM: " << icp->func_name() << endl; + break; + } + + case Item::SUM_FUNC_ITEM: + { + Item_sum* isp = (Item_sum*)item; + char* item_name = const_cast(item->name.str); + + // MCOL-1052 This is an extended SELECT list item + if (!item_name && isp->get_arg_count() && isp->get_arg(0)->name.length) + { + item_name = const_cast(isp->get_arg(0)->name.str); + } + else if (!item_name && isp->get_arg_count() && isp->get_arg(0)->type() == Item::CONST_ITEM && + isp->get_arg(0)->cmp_type() == INT_RESULT) + { + item_name = (char*)"INT||*"; + } + else if (!item_name) + { + item_name = (char*)""; + } + + switch (isp->sum_func()) + { + case Item_sum::SUM_FUNC: cerr << "SUM_FUNC: " << item_name << endl; break; + + case Item_sum::SUM_DISTINCT_FUNC: cerr << "SUM_DISTINCT_FUNC: " << item_name << endl; break; + + case Item_sum::AVG_FUNC: cerr << "AVG_FUNC: " << item_name << endl; break; + + case Item_sum::COUNT_FUNC: cerr << "COUNT_FUNC: " << item_name << endl; break; + + case Item_sum::COUNT_DISTINCT_FUNC: cerr << "COUNT_DISTINCT_FUNC: " << item_name << endl; break; + + case Item_sum::MIN_FUNC: cerr << "MIN_FUNC: " << item_name << endl; break; + + case Item_sum::MAX_FUNC: cerr << "MAX_FUNC: " << item_name << endl; break; + + case Item_sum::UDF_SUM_FUNC: cerr << "UDAF_FUNC: " << item_name << endl; break; + + default: cerr << "SUM_FUNC_ITEM type=" << isp->sum_func() << endl; break; + } + + break; + } + + case Item::SUBSELECT_ITEM: + { + Item_subselect* sub = (Item_subselect*)item; + cerr << "SUBSELECT Item: "; + + switch (sub->substype()) + { + case Item_subselect::EXISTS_SUBS: cerr << "EXISTS"; break; + + case Item_subselect::IN_SUBS: cerr << "IN"; break; + + default: cerr << sub->substype(); break; + } + + cerr << endl; + JOIN* join = sub->get_select_lex()->join; + + if (join) + { + Item_cond* cond = static_cast(join->conds); + + if (cond) + cond->traverse_cond(debug_walk, arg, Item::POSTFIX); + } + + cerr << "Finish subselect item traversing" << endl; + break; + } + + case Item::REF_ITEM: + { + Item_ref* ref = (Item_ref*)item; + + if (ref->real_item()->type() == Item::CACHE_ITEM) + { + Item* field = ((Item_cache*)ref->real_item())->get_example(); + + if (field->type() == Item::FIELD_ITEM) + { + Item_field* ifp = (Item_field*)field; + // ifp->cached_table->select_lex->select_number gives the select level. + // could be used on alias. + // could also be used to tell correlated join (equal level). + cerr << "CACHED REF FIELD_ITEM: " << ifp->db_name.str << '.' << bestTableName(ifp) << '.' + << ifp->field_name.str << endl; + break; + } + else if (field->type() == Item::FUNC_ITEM) + { + Item_func* ifp = (Item_func*)field; + cerr << "CACHED REF FUNC_ITEM " << ifp->func_name() << endl; + } + else if (field->type() == Item::REF_ITEM) + { + Item_ref* ifr = (Item_ref*)field; + string refType; + string realType; + + switch (ifr->ref_type()) + { + case Item_ref::REF: refType = "REF"; break; + + case Item_ref::DIRECT_REF: refType = "DIRECT_REF"; break; + + case Item_ref::VIEW_REF: refType = "VIEW_REF"; break; + + case Item_ref::OUTER_REF: refType = "OUTER_REF"; break; + + case Item_ref::AGGREGATE_REF: refType = "AGGREGATE_REF"; break; + + default: refType = "UNKNOWN"; break; + } + + switch (ifr->real_type()) + { + case Item::FIELD_ITEM: + { + Item_field* ifp = (Item_field*)(*(ifr->ref)); + realType = "FIELD_ITEM "; + realType += ifp->db_name.str; + realType += '.'; + realType += bestTableName(ifp); + realType += '.'; + realType += ifp->field_name.str; + break; + } + + case Item::SUM_FUNC_ITEM: + { + Item_sum* isp = (Item_sum*)(*(ifr->ref)); + + if (isp->sum_func() == Item_sum::GROUP_CONCAT_FUNC) + realType = "GROUP_CONCAT_FUNC"; + else + realType = "SUM_FUNC_ITEM"; + + break; + } + + case Item::REF_ITEM: + // Need recursion here + realType = "REF_ITEM"; + break; + + case Item::FUNC_ITEM: + { + Item_func* ifp = (Item_func*)(*(ifr->ref)); + realType = "FUNC_ITEM "; + realType += ifp->func_name(); + break; + } + + default: + { + realType = "UNKNOWN"; + } + } + + cerr << "CACHED REF_ITEM: ref type " << refType.c_str() << " real type " << realType.c_str() + << endl; + break; + } + else + { + cerr << "REF_ITEM with CACHE_ITEM type unknown " << field->type() << endl; + } + } + else if (ref->real_item()->type() == Item::FIELD_ITEM) + { + Item_field* ifp = (Item_field*)ref->real_item(); + + // MCOL-1052 The field referenced presumable came from + // extended SELECT list. + if (!ifp->field_name.str) + { + cerr << "REF extra FIELD_ITEM: " << ifp->name.str << endl; + } + else + { + cerr << "REF FIELD_ITEM: " << ifp->db_name.str << '.' << bestTableName(ifp) << '.' + << ifp->field_name.str << endl; + } + + break; + } + else if (ref->real_item()->type() == Item::FUNC_ITEM) + { + Item_func* ifp = (Item_func*)ref->real_item(); + cerr << "REF FUNC_ITEM " << ifp->func_name() << endl; + } + else if (ref->real_item()->type() == Item::WINDOW_FUNC_ITEM) + { + Item_window_func* ifp = (Item_window_func*)ref->real_item(); + cerr << "REF WINDOW_FUNC_ITEM " << ifp->window_func()->func_name() << endl; + } + else + { + cerr << "UNKNOWN REF ITEM type " << ref->real_item()->type() << endl; + } + + break; + } + + case Item::ROW_ITEM: + { + Item_row* row = (Item_row*)item; + cerr << "ROW_ITEM: " << endl; + + for (uint32_t i = 0; i < row->cols(); i++) + debug_walk(row->element_index(i), 0); + + break; + } + + case Item::EXPR_CACHE_ITEM: + { + cerr << "Expr Cache Item" << endl; + ((Item_cache_wrapper*)item)->get_orig_item()->traverse_cond(debug_walk, arg, Item::POSTFIX); + break; + } + + case Item::CACHE_ITEM: + { + Item_cache* isp = (Item_cache*)item; + // MCOL-46 isp->val_str() can cause a call to execute a subquery. We're not set up + // to execute yet. +#if 0 + + switch (item->result_type()) + { + case STRING_RESULT: + cerr << "CACHE_STRING_ITEM" << endl; + break; + + case REAL_RESULT: + cerr << "CACHE_REAL_ITEM " << isp->val_real() << endl; + break; + + case INT_RESULT: + cerr << "CACHE_INT_ITEM " << isp->val_int() << endl; + break; + + case ROW_RESULT: + cerr << "CACHE_ROW_ITEM" << endl; + break; + + case DECIMAL_RESULT: + cerr << "CACHE_DECIMAL_ITEM " << isp->val_decimal() << endl; + break; + + default: + cerr << "CACHE_UNKNOWN_ITEM" << endl; + break; + } + +#endif + Item* field = isp->get_example(); + + if (field->type() == Item::FIELD_ITEM) + { + Item_field* ifp = (Item_field*)field; + // ifp->cached_table->select_lex->select_number gives the select level. + // could be used on alias. + // could also be used to tell correlated join (equal level). + cerr << "CACHED FIELD_ITEM: " << ifp->db_name.str << '.' << bestTableName(ifp) << '.' + << ifp->field_name.str << endl; + break; + } + else if (field->type() == Item::REF_ITEM) + { + Item_ref* ifr = (Item_ref*)field; + string refType; + string realType; + + switch (ifr->ref_type()) + { + case Item_ref::REF: refType = "REF"; break; + + case Item_ref::DIRECT_REF: refType = "DIRECT_REF"; break; + + case Item_ref::VIEW_REF: refType = "VIEW_REF"; break; + + case Item_ref::OUTER_REF: refType = "OUTER_REF"; break; + + case Item_ref::AGGREGATE_REF: refType = "AGGREGATE_REF"; break; + + default: refType = "UNKNOWN"; break; + } + + switch (ifr->real_type()) + { + case Item::FIELD_ITEM: + { + Item_field* ifp = (Item_field*)(*(ifr->ref)); + realType = "FIELD_ITEM "; + realType += ifp->db_name.str; + realType += '.'; + realType += bestTableName(ifp); + realType += '.'; + realType += ifp->field_name.str; + break; + } + + case Item::SUM_FUNC_ITEM: + { + Item_sum* isp = (Item_sum*)(*(ifr->ref)); + + if (isp->sum_func() == Item_sum::GROUP_CONCAT_FUNC) + realType = "GROUP_CONCAT_FUNC"; + else + realType = "SUM_FUNC_ITEM"; + + break; + } + + case Item::REF_ITEM: + // Need recursion here + realType = "REF_ITEM"; + break; + + case Item::FUNC_ITEM: + { + Item_func* ifp = (Item_func*)(*(ifr->ref)); + realType = "FUNC_ITEM "; + realType += ifp->func_name(); + break; + } + + default: + { + realType = "UNKNOWN"; + } + } + + cerr << "CACHE_ITEM ref type " << refType.c_str() << " real type " << realType.c_str() << endl; + break; + } + else if (field->type() == Item::FUNC_ITEM) + { + Item_func* ifp = (Item_func*)field; + cerr << "CACHE_ITEM FUNC_ITEM " << ifp->func_name() << endl; + break; + } + else + { + cerr << "CACHE_ITEM type unknown " << field->type() << endl; + } + + break; + } + + case Item::WINDOW_FUNC_ITEM: + { + Item_window_func* ifp = (Item_window_func*)item; + cerr << "Window Function Item " << ifp->window_func()->func_name() << endl; + break; + } + + case Item::NULL_ITEM: + { + cerr << "NULL item" << endl; + break; + } + + case Item::TYPE_HOLDER: + { + cerr << "TYPE_HOLDER item with cmp_type " << item->cmp_type() << endl; + break; + } + + default: + { + cerr << "UNKNOWN_ITEM type " << item->type() << endl; + break; + } + } +} + +} \ No newline at end of file diff --git a/dbcon/mysql/ha_mcs_execplan_walks.h b/dbcon/mysql/ha_mcs_execplan_walks.h new file mode 100644 index 000000000..f3efd9e3c --- /dev/null +++ b/dbcon/mysql/ha_mcs_execplan_walks.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2025 MariaDB Corporation + + 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; version 2 of + the License. + + 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 GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#pragma once + +#define PREFER_MY_CONFIG_H +#include +#include "idb_mysql.h" + +namespace cal_impl_if +{ +void debug_walk(const Item* item, void* arg); +void gp_walk(const Item* item, void* arg); +} \ No newline at end of file diff --git a/dbcon/mysql/ha_mcs_impl.cpp b/dbcon/mysql/ha_mcs_impl.cpp index d5f4925e7..797ac40c4 100644 --- a/dbcon/mysql/ha_mcs_impl.cpp +++ b/dbcon/mysql/ha_mcs_impl.cpp @@ -4248,19 +4248,6 @@ int ha_mcs_impl_pushdown_init(mcs_handler_info* handler_info, TABLE* table, bool ifs.close(); csep->unserialize(bs1); #endif - - if (ci->traceFlags & 1) - { - cerr << "---------------- EXECUTION PLAN ----------------" << endl; - cerr << *csep << endl; - cerr << "-------------- EXECUTION PLAN END --------------\n" << endl; - } - else - { - IDEBUG(cout << "---------------- EXECUTION PLAN ----------------" << endl); - IDEBUG(cerr << *csep << endl); - IDEBUG(cout << "-------------- EXECUTION PLAN END --------------\n" << endl); - } } } // end of execution plan generation diff --git a/dbcon/mysql/ha_mcs_sysvars.cpp b/dbcon/mysql/ha_mcs_sysvars.cpp index 04fdbdaed..551f1586b 100644 --- a/dbcon/mysql/ha_mcs_sysvars.cpp +++ b/dbcon/mysql/ha_mcs_sysvars.cpp @@ -224,7 +224,9 @@ static my_bool innodb_queries_use_mcs; static MYSQL_SYSVAR_BOOL(innodb_queries_use_mcs, innodb_queries_use_mcs, PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, "Direct all InnoDB-only queries into MCS via Select Handler.", NULL, NULL, FALSE); - +static MYSQL_THDVAR_BOOL(unstable_optimizer, PLUGIN_VAR_RQCMDARG, + "Apply optimizer rules after translation from SELECT_LEX/UNION", NULL, NULL, FALSE); + st_mysql_sys_var* mcs_system_variables[] = { MYSQL_SYSVAR(compression_type), MYSQL_SYSVAR(fe_conn_info_ptr), @@ -267,6 +269,7 @@ st_mysql_sys_var* mcs_system_variables[] = { MYSQL_SYSVAR(pron), MYSQL_SYSVAR(max_allowed_in_values), MYSQL_SYSVAR(innodb_queries_use_mcs), + MYSQL_SYSVAR(unstable_optimizer), NULL}; st_mysql_show_var mcs_status_variables[] = {{"columnstore_version", (char*)&cs_version, SHOW_CHAR}, @@ -663,6 +666,15 @@ void set_max_allowed_in_values(THD* thd, ulong value) THDVAR(thd, max_allowed_in_values) = value; } +bool get_unstable_optimizer(THD* thd) +{ + return (thd == NULL) ? 0 : THDVAR(thd, unstable_optimizer); +} +void set_unstable_optimizer(THD* thd, bool value) +{ + THDVAR(thd, unstable_optimizer) = value; +} + bool get_innodb_queries_uses_mcs() { return SYSVAR(innodb_queries_use_mcs); diff --git a/dbcon/mysql/ha_mcs_sysvars.h b/dbcon/mysql/ha_mcs_sysvars.h index 92612bb53..4675eb2a0 100644 --- a/dbcon/mysql/ha_mcs_sysvars.h +++ b/dbcon/mysql/ha_mcs_sysvars.h @@ -175,4 +175,7 @@ const char* get_pron(THD* thd); void set_pron(THD* thd, char* value); ulong get_max_allowed_in_values(THD* thd); -void set_max_allowed_in_values(THD* thd, ulong value); \ No newline at end of file +void set_max_allowed_in_values(THD* thd, ulong value); + +bool get_unstable_optimizer(THD* thd); +void set_unstable_optimizer(THD* thd, bool value); diff --git a/dbcon/mysql/rulebased_optimizer.cpp b/dbcon/mysql/rulebased_optimizer.cpp new file mode 100644 index 000000000..b2107c497 --- /dev/null +++ b/dbcon/mysql/rulebased_optimizer.cpp @@ -0,0 +1,252 @@ +/* Copyright (C) 2025 MariaDB Corporation + + 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; version 2 of + the License. + + 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 GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "constantcolumn.h" +#include "execplan/calpontselectexecutionplan.h" +#include "execplan/simplecolumn.h" +#include "logicoperator.h" +#include "operator.h" +#include "predicateoperator.h" +#include "simplefilter.h" +#include "rulebased_optimizer.h" + +namespace optimizer +{ + +static const std::string RewrittenSubTableAliasPrefix = "$added_sub_"; + +// Apply a list of rules to a CSEP +bool optimizeCSEPWithRules(execplan::CalpontSelectExecutionPlan& root, const std::vector& rules) +{ + bool changed = false; + for (const auto& rule : rules) + { + changed |= rule.apply(root); + } + return changed; +} + +// high level API call for optimizer +bool optimizeCSEP(execplan::CalpontSelectExecutionPlan& root) +{ + optimizer::Rule parallelCES{"parallelCES", optimizer::matchParallelCES, optimizer::applyParallelCES}; + + std::vector rules = {parallelCES}; + + return optimizeCSEPWithRules(root, rules); +} + +// Apply iteratively until CSEP is converged by rule +bool Rule::apply(execplan::CalpontSelectExecutionPlan& root) const +{ + bool changedThisRound = false; + bool hasBeenApplied = false; + do + { + changedThisRound = walk(root); + hasBeenApplied |= changedThisRound; + } while (changedThisRound && !applyOnlyOnce); + + return hasBeenApplied; +} + +// DFS walk to match CSEP and apply rules if match +bool Rule::walk(execplan::CalpontSelectExecutionPlan& csep) const +{ + bool rewrite = false; + + for (auto& table : csep.derivedTableList()) + { + auto* csepPtr = dynamic_cast(table.get()); + if (!csepPtr) + { + continue; + } + + auto& csepLocal = *csepPtr; + rewrite |= walk(csepLocal); + } + + for (auto& unionUnit : csep.unionVec()) + { + auto* unionUnitPtr = dynamic_cast(unionUnit.get()); + if (!unionUnitPtr) + { + continue; + } + + auto& unionUnitLocal = *unionUnitPtr; + rewrite |= walk(unionUnitLocal); + } + + if (matchRule(csep)) + { + applyRule(csep); + rewrite = true; + } + + return rewrite; +} + +bool tableIsInUnion(const execplan::CalpontSystemCatalog::TableAliasName& table, + execplan::CalpontSelectExecutionPlan& csep) +{ + return std::any_of(csep.unionVec().begin(), csep.unionVec().end(), + [&table](const auto& unionUnit) + { + execplan::CalpontSelectExecutionPlan* unionUnitLocal = + dynamic_cast(unionUnit.get()); + bool tableIsPresented = + std::any_of(unionUnitLocal->tableList().begin(), unionUnitLocal->tableList().end(), + [&table](const auto& unionTable) { return unionTable == table; }); + return tableIsPresented; + }); +} + +bool matchParallelCES(execplan::CalpontSelectExecutionPlan& csep) +{ + auto tables = csep.tableList(); + // This is leaf and there are no other tables at this level in neither UNION, nor derived table. + // WIP filter out CSEPs with orderBy, groupBy, having + // Filter out tables that were re-written. + return tables.size() == 1 && !tables[0].isColumnstore() && !tableIsInUnion(tables[0], csep); +} + +// This routine produces a new ParseTree that is AND(lowerBand <= column, column <= upperBand) +// TODO add engine-independent statistics-derived ranges +execplan::ParseTree* filtersWithNewRangeAddedIfNeeded(execplan::SCSEP& csep) +{ + // INV this is SimpleColumn we supply as an argument + // TODO find the suitable column using EI statistics. + auto* column = dynamic_cast(csep->returnedCols().front().get()); + assert(column); + + auto tableKeyColumnLeftOp = new execplan::SimpleColumn(*column); + tableKeyColumnLeftOp->resultType(column->resultType()); + + // TODO Nobody owns this allocation and cleanup only depends on delete in ParseTree nodes' dtors. + auto* filterColLeftOp = new execplan::ConstantColumnUInt(42ULL, 0, 0); + // set TZ + // There is a question with ownership of the const column + execplan::SOP ltOp = boost::make_shared(execplan::PredicateOperator("<=")); + ltOp->setOpType(filterColLeftOp->resultType(), tableKeyColumnLeftOp->resultType()); + ltOp->resultType(ltOp->operationType()); + + auto* sfr = new execplan::SimpleFilter(ltOp, tableKeyColumnLeftOp, filterColLeftOp); + // auto tableKeyColumn = derivedSCEP->returnedCols().front(); + auto tableKeyColumnRightOp = new execplan::SimpleColumn(*column); + tableKeyColumnRightOp->resultType(column->resultType()); + // TODO hardcoded column type and value + auto* filterColRightOp = new execplan::ConstantColumnUInt(30ULL, 0, 0); + + execplan::SOP gtOp = boost::make_shared(execplan::PredicateOperator(">=")); + gtOp->setOpType(filterColRightOp->resultType(), tableKeyColumnRightOp->resultType()); + gtOp->resultType(gtOp->operationType()); + + auto* sfl = new execplan::SimpleFilter(gtOp, tableKeyColumnRightOp, filterColRightOp); + + execplan::ParseTree* ptp = new execplan::ParseTree(new execplan::LogicOperator("and")); + ptp->right(sfr); + ptp->left(sfl); + + auto* currentFilters = csep->filters(); + if (currentFilters) + { + execplan::ParseTree* andWithExistingFilters = + new execplan::ParseTree(new execplan::LogicOperator("and"), currentFilters, ptp); + return andWithExistingFilters; + } + + return ptp; +} + +execplan::CalpontSelectExecutionPlan::SelectList makeUnionFromTable( + const size_t numberOfLegs, execplan::CalpontSelectExecutionPlan& csep) +{ + execplan::CalpontSelectExecutionPlan::SelectList unionVec; + unionVec.reserve(numberOfLegs); + for (size_t i = 0; i < numberOfLegs; ++i) + { + auto clonedCSEP = csep.cloneWORecursiveSelects(); + // Add BETWEEN based on key column range + clonedCSEP->filters(filtersWithNewRangeAddedIfNeeded(clonedCSEP)); + unionVec.push_back(clonedCSEP); + } + + return unionVec; +} + +void applyParallelCES(execplan::CalpontSelectExecutionPlan& csep) +{ + auto tables = csep.tableList(); + execplan::CalpontSelectExecutionPlan::TableList newTableList; + execplan::CalpontSelectExecutionPlan::SelectList newDerivedTableList; + execplan::CalpontSelectExecutionPlan::ReturnedColumnList newReturnedColumns; + + // ATM Must be only 1 table + for (auto& table : tables) + { + if (!table.isColumnstore()) + { + auto derivedSCEP = csep.cloneWORecursiveSelects(); + // need to add a level here + std::string tableAlias = RewrittenSubTableAliasPrefix + table.schema + "_" + table.table; + + derivedSCEP->location(execplan::CalpontSelectExecutionPlan::FROM); + derivedSCEP->subType(execplan::CalpontSelectExecutionPlan::FROM_SUBS); + derivedSCEP->derivedTbAlias(tableAlias); + + // TODO: hardcoded for now + size_t parallelFactor = 2; + // Create a copy of the current leaf CSEP with additional filters to partition the key column + auto additionalUnionVec = makeUnionFromTable(parallelFactor, csep); + derivedSCEP->unionVec().insert(derivedSCEP->unionVec().end(), additionalUnionVec.begin(), + additionalUnionVec.end()); + + size_t colPosition = 0; + // change parent to derived table columns + for (auto& rc : csep.returnedCols()) + { + auto rcCloned = boost::make_shared(*rc); + // TODO timezone and result type are not copied + // TODO add specific ctor for this functionality + rcCloned->tableName(""); + rcCloned->schemaName(""); + rcCloned->tableAlias(tableAlias); + rcCloned->colPosition(colPosition++); + rcCloned->resultType(rc->resultType()); + + newReturnedColumns.push_back(rcCloned); + } + + newDerivedTableList.push_back(derivedSCEP); + execplan::CalpontSystemCatalog::TableAliasName tn = execplan::make_aliasview("", "", tableAlias, ""); + newTableList.push_back(tn); + // Remove the filters as they were pushed down to union units + derivedSCEP->filters(nullptr); + } + } + // Remove the filters as they were pushed down to union units + csep.filters(nullptr); + // There must be no derived at this point. + csep.derivedTableList(newDerivedTableList); + // Replace table list with new table list populated with union units + csep.tableList(newTableList); + csep.returnedCols(newReturnedColumns); +} + +} // namespace optimizer diff --git a/dbcon/mysql/rulebased_optimizer.h b/dbcon/mysql/rulebased_optimizer.h new file mode 100644 index 000000000..df0fa8556 --- /dev/null +++ b/dbcon/mysql/rulebased_optimizer.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2025 MariaDB Corporation + + 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; version 2 of + the License. + + 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 GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#pragma once + +#include +#include "execplan/calpontselectexecutionplan.h" + +namespace optimizer { + +struct Rule +{ + using RuleMatcher = bool (*)(execplan::CalpontSelectExecutionPlan&); + using RuleApplier = void (*)(execplan::CalpontSelectExecutionPlan&); + + Rule(std::string&& name, RuleMatcher matchRule, RuleApplier applyRule) + : name(name), matchRule(matchRule), applyRule(applyRule) {}; + + std::string name; + RuleMatcher matchRule; + RuleApplier applyRule; + // TODO Wrap CSEP into Nodes to be able to navigate up and down the tree and remove this flag + bool applyOnlyOnce = true; + + Rule() = default; + Rule(const Rule&) = default; + Rule(Rule&&) = default; + Rule& operator=(const Rule&) = default; + Rule& operator=(Rule&&) = default; + + bool apply(execplan::CalpontSelectExecutionPlan& csep) const; + bool walk(execplan::CalpontSelectExecutionPlan& csep) const; +}; + +bool matchParallelCES(execplan::CalpontSelectExecutionPlan& csep); +void applyParallelCES(execplan::CalpontSelectExecutionPlan& csep); +bool optimizeCSEP(execplan::CalpontSelectExecutionPlan& root); + +} \ No newline at end of file diff --git a/mysql-test/columnstore/1pmonly/t/mcol4652-cpimport-sets-wide-decimals-ranges.test b/mysql-test/columnstore/1pmonly/t/mcol4652-cpimport-sets-wide-decimals-ranges.test index 9eeb068f1..00c901f8e 100644 --- a/mysql-test/columnstore/1pmonly/t/mcol4652-cpimport-sets-wide-decimals-ranges.test +++ b/mysql-test/columnstore/1pmonly/t/mcol4652-cpimport-sets-wide-decimals-ranges.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcol4652; diff --git a/mysql-test/columnstore/1pmonly/t/mcs201_calshowpartitions_function.test b/mysql-test/columnstore/1pmonly/t/mcs201_calshowpartitions_function.test index b2f50ec39..f9f2e8c89 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs201_calshowpartitions_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs201_calshowpartitions_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs201_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs202_caldisablepartitions_function.test b/mysql-test/columnstore/1pmonly/t/mcs202_caldisablepartitions_function.test index a7b055b92..83c447e3e 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs202_caldisablepartitions_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs202_caldisablepartitions_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs202_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs203_calenablepartitions_function.test b/mysql-test/columnstore/1pmonly/t/mcs203_calenablepartitions_function.test index 777dcd29e..543c8aef4 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs203_calenablepartitions_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs203_calenablepartitions_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs203_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs204_caldroppartitions_function.test b/mysql-test/columnstore/1pmonly/t/mcs204_caldroppartitions_function.test index a2c626abd..70c36af24 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs204_caldroppartitions_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs204_caldroppartitions_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs204_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs208_idbPartition_function.test b/mysql-test/columnstore/1pmonly/t/mcs208_idbPartition_function.test index 939b08682..2102a459e 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs208_idbPartition_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs208_idbPartition_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs208_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs209_idbDBRoot_function.test b/mysql-test/columnstore/1pmonly/t/mcs209_idbDBRoot_function.test index b7b381215..d8088cf46 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs209_idbDBRoot_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs209_idbDBRoot_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs209_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs210_idbPm_function.test b/mysql-test/columnstore/1pmonly/t/mcs210_idbPm_function.test index 683acb519..118fa9271 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs210_idbPm_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs210_idbPm_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs210_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs214_idbExtentRelativeRid_function.test b/mysql-test/columnstore/1pmonly/t/mcs214_idbExtentRelativeRid_function.test index 3799c855a..dce101885 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs214_idbExtentRelativeRid_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs214_idbExtentRelativeRid_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs214_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs215_idbSegment_function.test b/mysql-test/columnstore/1pmonly/t/mcs215_idbSegment_function.test index 927c93c89..eb30ae1b8 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs215_idbSegment_function.test +++ b/mysql-test/columnstore/1pmonly/t/mcs215_idbSegment_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs215_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs4009_autopilot_partition_management.test b/mysql-test/columnstore/1pmonly/t/mcs4009_autopilot_partition_management.test index bfacdf3f1..074cd1e1b 100755 --- a/mysql-test/columnstore/1pmonly/t/mcs4009_autopilot_partition_management.test +++ b/mysql-test/columnstore/1pmonly/t/mcs4009_autopilot_partition_management.test @@ -4,6 +4,7 @@ # Author: Daniel Lee, daniel.lee@mariadb.com # -------------------------------------------------------------- # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4009_db; diff --git a/mysql-test/columnstore/1pmonly/t/mcs7000_version_buffer.test b/mysql-test/columnstore/1pmonly/t/mcs7000_version_buffer.test index db4b43de5..265e121e3 100644 --- a/mysql-test/columnstore/1pmonly/t/mcs7000_version_buffer.test +++ b/mysql-test/columnstore/1pmonly/t/mcs7000_version_buffer.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs7000_db; diff --git a/mysql-test/columnstore/autopilot/r/mcs4125_function_CNX_LAST_DAY_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4125_function_CNX_LAST_DAY_DS_maxscale.result new file mode 100644 index 000000000..526ca8707 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4125_function_CNX_LAST_DAY_DS_maxscale.result @@ -0,0 +1,25 @@ +USE autopilot; +select cidx, CDATE, LAST_DAY(CDATE) from datatypetestm order by cidx; +cidx CDATE LAST_DAY(CDATE) +1 1997-01-01 1997-01-31 +select cidx, CDATETIME, LAST_DAY(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME LAST_DAY(CDATETIME) +1 1997-01-01 00:00:00 1997-01-31 +select cidx, CTIME, LAST_DAY(CTIME) from datatypetestm order by cidx; +cidx CTIME LAST_DAY(CTIME) +1 13:00:00 REPLACEDVALUE +select cidx, LAST_DAY('2009-02-28') from datatypetestm order by cidx; +cidx LAST_DAY('2009-02-28') +1 2009-02-28 +select cidx, LAST_DAY('2009-07-04') from datatypetestm order by cidx; +cidx LAST_DAY('2009-07-04') +1 2009-07-31 +select cidx, LAST_DAY('2010-02-31') from datatypetestm order by cidx; +cidx LAST_DAY('2010-02-31') +1 NULL +select cidx, CDATE from datatypetestm where LAST_DAY(CDATE) <> 0 order by cidx; +cidx CDATE +1 1997-01-01 +select cidx, CDATETIME from datatypetestm where LAST_DAY(CDATETIME) <> 0 order by cidx; +cidx CDATETIME +1 1997-01-01 00:00:00 diff --git a/mysql-test/columnstore/autopilot/r/mcs4154_function_CNX_MICROSECOND_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4154_function_CNX_MICROSECOND_DS_maxscale.result new file mode 100644 index 000000000..12f7654f3 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4154_function_CNX_MICROSECOND_DS_maxscale.result @@ -0,0 +1,22 @@ +USE autopilot; +select cidx, CDATE, MICROSECOND(CDATE) from datatypetestm order by cidx; +cidx CDATE MICROSECOND(CDATE) +1 1997-01-01 0 +select cidx, CDATETIME, MICROSECOND(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME MICROSECOND(CDATETIME) +1 1997-01-01 00:00:00 0 +select cidx, CTIME, MICROSECOND(CTIME) from datatypetestm order by cidx; +cidx CTIME MICROSECOND(CTIME) +1 13:00:00 0 +select cidx, MICROSECOND('2011-05-01') from datatypetestm order by cidx; +cidx MICROSECOND('2011-05-01') +1 0 +select cidx, MICROSECOND('2011-05-01 13:58:22.123456') from datatypetestm order by cidx; +cidx MICROSECOND('2011-05-01 13:58:22.123456') +1 123456 +select cidx, CDATE from datatypetestm where MICROSECOND(CDATE) <> 0 order by cidx; +cidx CDATE +select cidx, CDATETIME from datatypetestm where MICROSECOND(CDATETIME) <> 0 order by cidx; +cidx CDATETIME +select cidx, CTIME from datatypetestm where MICROSECOND(CTIME) <> 0 order by cidx; +cidx CTIME diff --git a/mysql-test/columnstore/autopilot/r/mcs4162_function_CNX_MONTHNAME_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4162_function_CNX_MONTHNAME_DS_maxscale.result new file mode 100644 index 000000000..f0ee6d4e6 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4162_function_CNX_MONTHNAME_DS_maxscale.result @@ -0,0 +1,23 @@ +USE autopilot; +select cidx, CDATE, MONTHNAME(CDATE) from datatypetestm order by cidx; +cidx CDATE MONTHNAME(CDATE) +1 1997-01-01 January +select cidx, CDATETIME, MONTHNAME(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME MONTHNAME(CDATETIME) +1 1997-01-01 00:00:00 January +select cidx, CTIME, MONTHNAME(CTIME) from datatypetestm order by cidx; +cidx CTIME MONTHNAME(CTIME) +1 13:00:00 REPLACEDVALUE +select cidx, MONTHNAME('2009-02-28') from datatypetestm order by cidx; +cidx MONTHNAME('2009-02-28') +1 February +select cidx, MONTHNAME('2009-07-04') from datatypetestm order by cidx; +cidx MONTHNAME('2009-07-04') +1 July +select cidx, MONTHNAME('2010-02-31') from datatypetestm order by cidx; +cidx MONTHNAME('2010-02-31') +1 NULL +select cidx, CDATE from datatypetestm where MONTHNAME(CDATE) <> 0 order by cidx; +cidx CDATE +select cidx, CDATETIME from datatypetestm where MONTHNAME(CDATETIME) <> 0 order by cidx; +cidx CDATETIME diff --git a/mysql-test/columnstore/autopilot/r/mcs4164_function_CNX_NULLIF_NM_Archived_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4164_function_CNX_NULLIF_NM_Archived_maxscale.result new file mode 100644 index 000000000..5bbaf2395 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4164_function_CNX_NULLIF_NM_Archived_maxscale.result @@ -0,0 +1,897 @@ +USE autopilot; +select cidx, CBIGINT, NULLIF(CBIGINT,CBIGINT) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CBIGINT) +1 -72036854775806 NULL +select cidx, CBIGINT, NULLIF(CBIGINT,CINTEGER) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CINTEGER) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CDOUBLE) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CDOUBLE) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CDECIMAL9_2) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,1) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,1) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,3.14) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,3.14) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CCHAR4) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CCHAR4) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CDATE) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CDATE) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,NULL) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,NULL) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,'HELLO WORLD') +1 -72036854775806 -72036854775806 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CBIGINT) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CINTEGER) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CDOUBLE) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CDECIMAL9_2) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,1) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,1) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,3.14) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,3.14) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CCHAR4) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CDATE) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,NULL) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,NULL) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,'HELLO WORLD') +1 -9 -9 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CBIGINT) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CINTEGER) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CDOUBLE) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CDECIMAL9_2) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,1) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,1) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,3.14) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,3.14) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CCHAR4) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CDATE) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,NULL) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,NULL) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,'HELLO WORLD') +1 -999 -999 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CBIGINT) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CINTEGER) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CDOUBLE) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CDECIMAL9_2) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,1) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,1) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,3.14) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,3.14) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CCHAR4) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CDATE) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,NULL) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,NULL) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,'HELLO WORLD') +1 -9.99 -9.99 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CBIGINT) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CINTEGER) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CDOUBLE) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CDECIMAL9_2) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,1) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,1) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,3.14) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,3.14) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CCHAR4) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CDATE) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,NULL) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,NULL) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,'HELLO WORLD') +1 -999 -999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CBIGINT) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CINTEGER) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CDOUBLE) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CDECIMAL9_2) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,1) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,1) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,3.14) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,3.14) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CCHAR4) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CDATE) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,NULL) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,NULL) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,'HELLO WORLD') +1 -999999 -999999 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CBIGINT) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CINTEGER) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CDOUBLE) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CDECIMAL9_2) +1 -9999.99 NULL +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,1) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,1) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,3.14) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,3.14) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CCHAR4) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CDATE) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,NULL) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,NULL) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,'HELLO WORLD') +1 -9999.99 -9999.99 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CBIGINT) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CINTEGER) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CDOUBLE) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CDECIMAL9_2) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,1) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,1) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,3.14) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,3.14) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CCHAR4) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CDATE) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,NULL) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,NULL) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,'HELLO WORLD') +1 -9999999 -9999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CBIGINT) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CINTEGER) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CDOUBLE) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CDECIMAL9_2) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,1) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,1) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,3.14) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,3.14) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CCHAR4) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CDATE) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,NULL) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,NULL) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,'HELLO WORLD') +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CBIGINT) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CINTEGER) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CDOUBLE) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CDECIMAL9_2) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,1) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,1) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,3.14) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,3.14) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CCHAR4) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CDATE) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,NULL) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,NULL) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,'HELLO WORLD') +1 -99999999999.99 -99999999999.99 +select cidx, CINTEGER, NULLIF(CINTEGER,CBIGINT) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CBIGINT) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CINTEGER) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CINTEGER) +1 -7483646 NULL +select cidx, CINTEGER, NULLIF(CINTEGER,CDOUBLE) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CDOUBLE) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CDECIMAL9_2) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,1) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,1) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,3.14) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,3.14) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CCHAR4) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CCHAR4) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CDATE) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CDATE) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,NULL) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,NULL) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,'HELLO WORLD') from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,'HELLO WORLD') +1 -7483646 -7483646 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CBIGINT) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CBIGINT) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CINTEGER) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CINTEGER) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDOUBLE) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CDOUBLE) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CDECIMAL9_2) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,1) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,1) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,3.14) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,3.14) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CCHAR4) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CCHAR4) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDATE) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CDATE) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,NULL) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,NULL) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,'HELLO WORLD') +1 -766 -766 +select cidx, CTINYINT, NULLIF(CTINYINT,CBIGINT) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CBIGINT) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CINTEGER) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CINTEGER) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CDOUBLE) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CDOUBLE) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CDECIMAL9_2) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,1) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,1) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,3.14) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,3.14) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CCHAR4) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CCHAR4) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CDATE) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CDATE) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,NULL) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,NULL) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,'HELLO WORLD') +1 -26 -26 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CBIGINT) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CBIGINT) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CINTEGER) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CINTEGER) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDOUBLE) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CDOUBLE) +1 -1.797693231e108 NULL +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CDECIMAL9_2) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,1) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,1) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,3.14) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,3.14) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CCHAR4) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CCHAR4) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDATE) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CDATE) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,NULL) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,NULL) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,'HELLO WORLD') +1 -1.797693231e108 -1.797693231e108 +select cidx, CFLOAT, NULLIF(CFLOAT,CBIGINT) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CBIGINT) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CINTEGER) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CINTEGER) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CDOUBLE) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CDOUBLE) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CDECIMAL9_2) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,1) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,1) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,3.14) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,3.14) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CCHAR4) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CCHAR4) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CDATE) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CDATE) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,NULL) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,NULL) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,'HELLO WORLD') +1 -3.40287e18 -3.40287e18 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CBIGINT) <> 0 order by cidx; +cidx CBIGINT +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CINTEGER) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CDOUBLE) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CDECIMAL9_2) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,1) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,3.14) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CCHAR4) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CDATE) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,NULL) <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,'HELLO WORLD') <> 0 order by cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,1) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,3.14) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CDATE) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,NULL) <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,1) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,3.14) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CDATE) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,NULL) <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,1) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,3.14) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CDATE) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,NULL) <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,1) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,3.14) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CDATE) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,NULL) <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,1) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,3.14) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CDATE) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,NULL) <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL9_2 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,1) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,3.14) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CDATE) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,NULL) <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,1) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,3.14) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CDATE) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,NULL) <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,1) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,3.14) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CDATE) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,NULL) <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CBIGINT) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CINTEGER) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CDOUBLE) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CDECIMAL9_2) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,1) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,3.14) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CCHAR4) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CDATE) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,NULL) <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,'HELLO WORLD') <> 0 order by cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CBIGINT) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CINTEGER) <> 0 order by cidx; +cidx CINTEGER +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CDOUBLE) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CDECIMAL9_2) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,1) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,3.14) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CCHAR4) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CDATE) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,NULL) <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,'HELLO WORLD') <> 0 order by cidx; +cidx CINTEGER +1 -7483646 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CBIGINT) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CINTEGER) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CDOUBLE) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CDECIMAL9_2) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,1) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,3.14) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CCHAR4) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CDATE) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,NULL) <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,'HELLO WORLD') <> 0 order by cidx; +cidx CSMALLINT +1 -766 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CBIGINT) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CINTEGER) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CDOUBLE) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CDECIMAL9_2) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,1) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,3.14) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CCHAR4) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CDATE) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,NULL) <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,'HELLO WORLD') <> 0 order by cidx; +cidx CTINYINT +1 -26 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CBIGINT) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CINTEGER) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CDOUBLE) <> 0 order by cidx; +cidx CDOUBLE +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CDECIMAL9_2) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,1) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,3.14) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CCHAR4) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CDATE) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,NULL) <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,'HELLO WORLD') <> 0 order by cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CBIGINT) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CINTEGER) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CDOUBLE) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CDECIMAL9_2) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,1) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,3.14) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CCHAR4) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CDATE) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,NULL) <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,'HELLO WORLD') <> 0 order by cidx; +cidx CFLOAT +1 -3.40287e18 diff --git a/mysql-test/columnstore/autopilot/r/mcs4220_function_CNX_TIME_TO_SEC_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4220_function_CNX_TIME_TO_SEC_DS_maxscale.result new file mode 100644 index 000000000..905617197 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4220_function_CNX_TIME_TO_SEC_DS_maxscale.result @@ -0,0 +1,26 @@ +USE autopilot; +select cidx, CDATE, TIME_TO_SEC(CDATE) from datatypetestm order by cidx; +cidx CDATE TIME_TO_SEC(CDATE) +1 1997-01-01 0 +select cidx, CDATETIME, TIME_TO_SEC(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME TIME_TO_SEC(CDATETIME) +1 1997-01-01 00:00:00 0 +select cidx, CTIME, TIME_TO_SEC(CTIME) from datatypetestm order by cidx; +cidx CTIME TIME_TO_SEC(CTIME) +1 13:00:00 46800 +select cidx, TIME_TO_SEC('22:23:00') from datatypetestm order by cidx; +cidx TIME_TO_SEC('22:23:00') +1 80580 +select cidx, TIME_TO_SEC('00:39:38') from datatypetestm order by cidx; +cidx TIME_TO_SEC('00:39:38') +1 2378 +select cidx, TIME_TO_SEC('22:23:49 999999') from datatypetestm order by cidx; +cidx TIME_TO_SEC('22:23:49 999999') +1 NULL +select cidx, CDATE from datatypetestm where TIME_TO_SEC(CDATE) <> 0 order by cidx; +cidx CDATE +select cidx, CDATETIME from datatypetestm where TIME_TO_SEC(CDATETIME) <> 0 order by cidx; +cidx CDATETIME +select cidx, CTIME from datatypetestm where TIME_TO_SEC(CTIME) <> 0 order by cidx; +cidx CTIME +1 13:00:00 diff --git a/mysql-test/columnstore/autopilot/r/mcs4350_function_CNXPP_LAST_DAY_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4350_function_CNXPP_LAST_DAY_DS_maxscale.result new file mode 100644 index 000000000..323a010ee --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4350_function_CNXPP_LAST_DAY_DS_maxscale.result @@ -0,0 +1,25 @@ +USE autopilot; +select cidx, CDATE, LAST_DAY(CDATE) from datatypetestm order by cidx; +cidx CDATE LAST_DAY(CDATE) +1 1997-01-01 1997-01-31 +select cidx, CDATETIME, LAST_DAY(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME LAST_DAY(CDATETIME) +1 1997-01-01 00:00:00 1997-01-31 +select cidx, CTIME, LAST_DAY(CTIME) from datatypetestm order by cidx; +cidx CTIME LAST_DAY(CTIME) +1 13:00:00 REPLACEDVALUE +select cidx, LAST_DAY('2009-02-28') from datatypetestm order by cidx; +cidx LAST_DAY('2009-02-28') +1 2009-02-28 +select cidx, LAST_DAY('2009-07-04') from datatypetestm order by cidx; +cidx LAST_DAY('2009-07-04') +1 2009-07-31 +select cidx, LAST_DAY('2010-02-31') from datatypetestm order by cidx; +cidx LAST_DAY('2010-02-31') +1 NULL +select cidx, CDATE from datatypetestm order by LAST_DAY(CDATE), cidx; +cidx CDATE +1 1997-01-01 +select cidx, CDATETIME from datatypetestm order by LAST_DAY(CDATETIME), cidx; +cidx CDATETIME +1 1997-01-01 00:00:00 diff --git a/mysql-test/columnstore/autopilot/r/mcs4379_function_CNXPP_MICROSECOND_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4379_function_CNXPP_MICROSECOND_DS_maxscale.result new file mode 100644 index 000000000..2f5f69a36 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4379_function_CNXPP_MICROSECOND_DS_maxscale.result @@ -0,0 +1,25 @@ +USE autopilot; +select cidx, CDATE, MICROSECOND(CDATE) from datatypetestm order by cidx; +cidx CDATE MICROSECOND(CDATE) +1 1997-01-01 0 +select cidx, CDATETIME, MICROSECOND(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME MICROSECOND(CDATETIME) +1 1997-01-01 00:00:00 0 +select cidx, CTIME, MICROSECOND(CTIME) from datatypetestm order by cidx; +cidx CTIME MICROSECOND(CTIME) +1 13:00:00 0 +select cidx, MICROSECOND('2011-05-01') from datatypetestm order by cidx; +cidx MICROSECOND('2011-05-01') +1 0 +select cidx, MICROSECOND('2011-05-01 13:58:22.123456') from datatypetestm order by cidx; +cidx MICROSECOND('2011-05-01 13:58:22.123456') +1 123456 +select cidx, CDATE from datatypetestm order by MICROSECOND(CDATE), cidx; +cidx CDATE +1 1997-01-01 +select cidx, CDATETIME from datatypetestm order by MICROSECOND(CDATETIME), cidx; +cidx CDATETIME +1 1997-01-01 00:00:00 +select cidx, CTIME from datatypetestm order by MICROSECOND(CTIME), cidx; +cidx CTIME +1 13:00:00 diff --git a/mysql-test/columnstore/autopilot/r/mcs4387_function_CNXPP_MONTHNAME_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4387_function_CNXPP_MONTHNAME_DS_maxscale.result new file mode 100644 index 000000000..ced940980 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4387_function_CNXPP_MONTHNAME_DS_maxscale.result @@ -0,0 +1,25 @@ +USE autopilot; +select cidx, CDATE, MONTHNAME(CDATE) from datatypetestm order by cidx; +cidx CDATE MONTHNAME(CDATE) +1 1997-01-01 January +select cidx, CDATETIME, MONTHNAME(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME MONTHNAME(CDATETIME) +1 1997-01-01 00:00:00 January +select cidx, CTIME, MONTHNAME(CTIME) from datatypetestm order by cidx; +cidx CTIME MONTHNAME(CTIME) +1 13:00:00 REPLACEDVALUE +select cidx, MONTHNAME('2009-02-28') from datatypetestm order by cidx; +cidx MONTHNAME('2009-02-28') +1 February +select cidx, MONTHNAME('2009-07-04') from datatypetestm order by cidx; +cidx MONTHNAME('2009-07-04') +1 July +select cidx, MONTHNAME('2010-02-31') from datatypetestm order by cidx; +cidx MONTHNAME('2010-02-31') +1 NULL +select cidx, CDATE from datatypetestm order by MONTHNAME(CDATE), cidx; +cidx CDATE +1 1997-01-01 +select cidx, CDATETIME from datatypetestm order by MONTHNAME(CDATETIME), cidx; +cidx CDATETIME +1 1997-01-01 00:00:00 diff --git a/mysql-test/columnstore/autopilot/r/mcs4389_function_CNXPP_NULLIF_NM_Archived_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4389_function_CNXPP_NULLIF_NM_Archived_maxscale.result new file mode 100644 index 000000000..2225347ba --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4389_function_CNXPP_NULLIF_NM_Archived_maxscale.result @@ -0,0 +1,901 @@ +USE autopilot; +select cidx, CBIGINT, NULLIF(CBIGINT,CBIGINT) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CBIGINT) +1 -72036854775806 NULL +select cidx, CBIGINT, NULLIF(CBIGINT,CINTEGER) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CINTEGER) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CDOUBLE) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CDOUBLE) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CDECIMAL9_2) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,1) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,1) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,3.14) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,3.14) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CCHAR4) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CCHAR4) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,CDATE) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,CDATE) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,NULL) from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,NULL) +1 -72036854775806 -72036854775806 +select cidx, CBIGINT, NULLIF(CBIGINT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CBIGINT NULLIF(CBIGINT,'HELLO WORLD') +1 -72036854775806 -72036854775806 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CBIGINT) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CINTEGER) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CDOUBLE) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CDECIMAL9_2) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,1) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,1) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,3.14) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,3.14) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CCHAR4) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,CDATE) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,NULL) from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,NULL) +1 -9 -9 +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL1 NULLIF(CDECIMAL1,'HELLO WORLD') +1 -9 -9 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CBIGINT) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CINTEGER) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CDOUBLE) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CDECIMAL9_2) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,1) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,1) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,3.14) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,3.14) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CCHAR4) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,CDATE) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,NULL) from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,NULL) +1 -999 -999 +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL4 NULLIF(CDECIMAL4,'HELLO WORLD') +1 -999 -999 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CBIGINT) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CINTEGER) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CDOUBLE) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CDECIMAL9_2) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,1) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,1) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,3.14) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,3.14) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CCHAR4) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,CDATE) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,NULL) from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,NULL) +1 -9.99 -9.99 +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL4_2 NULLIF(CDECIMAL4_2,'HELLO WORLD') +1 -9.99 -9.99 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CBIGINT) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CINTEGER) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CDOUBLE) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CDECIMAL9_2) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,1) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,1) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,3.14) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,3.14) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CCHAR4) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,CDATE) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,NULL) from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,NULL) +1 -999 -999 +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL5 NULLIF(CDECIMAL5,'HELLO WORLD') +1 -999 -999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CBIGINT) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CINTEGER) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CDOUBLE) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CDECIMAL9_2) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,1) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,1) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,3.14) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,3.14) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CCHAR4) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,CDATE) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,NULL) from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,NULL) +1 -999999 -999999 +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL9 NULLIF(CDECIMAL9,'HELLO WORLD') +1 -999999 -999999 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CBIGINT) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CINTEGER) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CDOUBLE) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CDECIMAL9_2) +1 -9999.99 NULL +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,1) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,1) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,3.14) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,3.14) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CCHAR4) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,CDATE) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,NULL) from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,NULL) +1 -9999.99 -9999.99 +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL9_2 NULLIF(CDECIMAL9_2,'HELLO WORLD') +1 -9999.99 -9999.99 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CBIGINT) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CINTEGER) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CDOUBLE) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CDECIMAL9_2) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,1) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,1) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,3.14) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,3.14) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CCHAR4) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,CDATE) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,NULL) from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,NULL) +1 -9999999 -9999999 +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL10 NULLIF(CDECIMAL10,'HELLO WORLD') +1 -9999999 -9999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CBIGINT) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CINTEGER) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CDOUBLE) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CDECIMAL9_2) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,1) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,1) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,3.14) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,3.14) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CCHAR4) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,CDATE) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,NULL) from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,NULL) +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL18 NULLIF(CDECIMAL18,'HELLO WORLD') +1 -9999999999999 -9999999999999 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CBIGINT) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CBIGINT) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CINTEGER) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CINTEGER) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDOUBLE) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CDOUBLE) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CDECIMAL9_2) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,1) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,1) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,3.14) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,3.14) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CCHAR4) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CCHAR4) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDATE) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,CDATE) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,NULL) from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,NULL) +1 -99999999999.99 -99999999999.99 +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDECIMAL18_2 NULLIF(CDECIMAL18_2,'HELLO WORLD') +1 -99999999999.99 -99999999999.99 +select cidx, CINTEGER, NULLIF(CINTEGER,CBIGINT) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CBIGINT) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CINTEGER) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CINTEGER) +1 -7483646 NULL +select cidx, CINTEGER, NULLIF(CINTEGER,CDOUBLE) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CDOUBLE) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CDECIMAL9_2) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,1) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,1) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,3.14) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,3.14) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CCHAR4) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CCHAR4) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,CDATE) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,CDATE) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,NULL) from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,NULL) +1 -7483646 -7483646 +select cidx, CINTEGER, NULLIF(CINTEGER,'HELLO WORLD') from datatypetestm order by cidx; +cidx CINTEGER NULLIF(CINTEGER,'HELLO WORLD') +1 -7483646 -7483646 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CBIGINT) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CBIGINT) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CINTEGER) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CINTEGER) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDOUBLE) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CDOUBLE) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CDECIMAL9_2) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,1) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,1) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,3.14) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,3.14) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CCHAR4) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CCHAR4) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDATE) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,CDATE) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,NULL) from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,NULL) +1 -766 -766 +select cidx, CSMALLINT, NULLIF(CSMALLINT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CSMALLINT NULLIF(CSMALLINT,'HELLO WORLD') +1 -766 -766 +select cidx, CTINYINT, NULLIF(CTINYINT,CBIGINT) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CBIGINT) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CINTEGER) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CINTEGER) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CDOUBLE) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CDOUBLE) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CDECIMAL9_2) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,1) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,1) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,3.14) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,3.14) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CCHAR4) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CCHAR4) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,CDATE) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,CDATE) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,NULL) from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,NULL) +1 -26 -26 +select cidx, CTINYINT, NULLIF(CTINYINT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CTINYINT NULLIF(CTINYINT,'HELLO WORLD') +1 -26 -26 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CBIGINT) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CBIGINT) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CINTEGER) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CINTEGER) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDOUBLE) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CDOUBLE) +1 -1.797693231e108 NULL +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CDECIMAL9_2) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,1) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,1) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,3.14) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,3.14) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CCHAR4) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CCHAR4) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDATE) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,CDATE) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,NULL) from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,NULL) +1 -1.797693231e108 -1.797693231e108 +select cidx, CDOUBLE, NULLIF(CDOUBLE,'HELLO WORLD') from datatypetestm order by cidx; +cidx CDOUBLE NULLIF(CDOUBLE,'HELLO WORLD') +1 -1.797693231e108 -1.797693231e108 +select cidx, CFLOAT, NULLIF(CFLOAT,CBIGINT) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CBIGINT) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CINTEGER) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CINTEGER) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CDOUBLE) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CDOUBLE) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CDECIMAL9_2) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CDECIMAL9_2) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,1) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,1) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,3.14) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,3.14) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CCHAR4) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CCHAR4) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,CDATE) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,CDATE) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,NULL) from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,NULL) +1 -3.40287e18 -3.40287e18 +select cidx, CFLOAT, NULLIF(CFLOAT,'HELLO WORLD') from datatypetestm order by cidx; +cidx CFLOAT NULLIF(CFLOAT,'HELLO WORLD') +1 -3.40287e18 -3.40287e18 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CBIGINT), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CINTEGER), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CDOUBLE), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CDECIMAL9_2), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,1), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,3.14), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CCHAR4), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CDATE), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,NULL), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,'HELLO WORLD'), cidx; +cidx CBIGINT +1 -72036854775806 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CBIGINT), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CINTEGER), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CDOUBLE), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CDECIMAL9_2), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,1), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,3.14), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CCHAR4), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CDATE), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,NULL), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,'HELLO WORLD'), cidx; +cidx CDECIMAL1 +1 -9 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CBIGINT), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CINTEGER), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CDOUBLE), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CDECIMAL9_2), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,1), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,3.14), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CCHAR4), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CDATE), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,NULL), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,'HELLO WORLD'), cidx; +cidx CDECIMAL4 +1 -999 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CBIGINT), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CINTEGER), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CDOUBLE), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CDECIMAL9_2), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,1), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,3.14), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CCHAR4), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CDATE), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,NULL), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,'HELLO WORLD'), cidx; +cidx CDECIMAL4_2 +1 -9.99 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CBIGINT), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CINTEGER), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CDOUBLE), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CDECIMAL9_2), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,1), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,3.14), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CCHAR4), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CDATE), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,NULL), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,'HELLO WORLD'), cidx; +cidx CDECIMAL5 +1 -999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CBIGINT), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CINTEGER), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CDOUBLE), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CDECIMAL9_2), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,1), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,3.14), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CCHAR4), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CDATE), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,NULL), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,'HELLO WORLD'), cidx; +cidx CDECIMAL9 +1 -999999 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CBIGINT), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CINTEGER), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CDOUBLE), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CDECIMAL9_2), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,1), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,3.14), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CCHAR4), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CDATE), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,NULL), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,'HELLO WORLD'), cidx; +cidx CDECIMAL9_2 +1 -9999.99 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CBIGINT), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CINTEGER), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CDOUBLE), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CDECIMAL9_2), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,1), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,3.14), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CCHAR4), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CDATE), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,NULL), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,'HELLO WORLD'), cidx; +cidx CDECIMAL10 +1 -9999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CBIGINT), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CINTEGER), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CDOUBLE), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CDECIMAL9_2), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,1), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,3.14), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CCHAR4), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CDATE), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,NULL), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,'HELLO WORLD'), cidx; +cidx CDECIMAL18 +1 -9999999999999 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CBIGINT), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CINTEGER), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CDOUBLE), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CDECIMAL9_2), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,1), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,3.14), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CCHAR4), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CDATE), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,NULL), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,'HELLO WORLD'), cidx; +cidx CDECIMAL18_2 +1 -99999999999.99 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CBIGINT), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CINTEGER), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CDOUBLE), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CDECIMAL9_2), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,1), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,3.14), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CCHAR4), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CDATE), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,NULL), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,'HELLO WORLD'), cidx; +cidx CINTEGER +1 -7483646 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CBIGINT), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CINTEGER), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CDOUBLE), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CDECIMAL9_2), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,1), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,3.14), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CCHAR4), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CDATE), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,NULL), cidx; +cidx CSMALLINT +1 -766 +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,'HELLO WORLD'), cidx; +cidx CSMALLINT +1 -766 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CBIGINT), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CINTEGER), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CDOUBLE), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CDECIMAL9_2), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,1), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,3.14), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CCHAR4), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CDATE), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,NULL), cidx; +cidx CTINYINT +1 -26 +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,'HELLO WORLD'), cidx; +cidx CTINYINT +1 -26 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CBIGINT), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CINTEGER), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CDOUBLE), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CDECIMAL9_2), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,1), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,3.14), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CCHAR4), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CDATE), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,NULL), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,'HELLO WORLD'), cidx; +cidx CDOUBLE +1 -1.797693231e108 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CBIGINT), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CINTEGER), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CDOUBLE), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CDECIMAL9_2), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,1), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,3.14), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CCHAR4), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CDATE), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,NULL), cidx; +cidx CFLOAT +1 -3.40287e18 +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,'HELLO WORLD'), cidx; +cidx CFLOAT +1 -3.40287e18 diff --git a/mysql-test/columnstore/autopilot/r/mcs4445_function_CNXPP_TIME_TO_SEC_DS_maxscale.result b/mysql-test/columnstore/autopilot/r/mcs4445_function_CNXPP_TIME_TO_SEC_DS_maxscale.result new file mode 100644 index 000000000..8c62e52a6 --- /dev/null +++ b/mysql-test/columnstore/autopilot/r/mcs4445_function_CNXPP_TIME_TO_SEC_DS_maxscale.result @@ -0,0 +1,28 @@ +USE autopilot; +select cidx, CDATE, TIME_TO_SEC(CDATE) from datatypetestm order by cidx; +cidx CDATE TIME_TO_SEC(CDATE) +1 1997-01-01 0 +select cidx, CDATETIME, TIME_TO_SEC(CDATETIME) from datatypetestm order by cidx; +cidx CDATETIME TIME_TO_SEC(CDATETIME) +1 1997-01-01 00:00:00 0 +select cidx, CTIME, TIME_TO_SEC(CTIME) from datatypetestm order by cidx; +cidx CTIME TIME_TO_SEC(CTIME) +1 13:00:00 46800 +select cidx, TIME_TO_SEC('22:23:00') from datatypetestm order by cidx; +cidx TIME_TO_SEC('22:23:00') +1 80580 +select cidx, TIME_TO_SEC('00:39:38') from datatypetestm order by cidx; +cidx TIME_TO_SEC('00:39:38') +1 2378 +select cidx, TIME_TO_SEC('22:23:49 999999') from datatypetestm order by cidx; +cidx TIME_TO_SEC('22:23:49 999999') +1 NULL +select cidx, CDATE from datatypetestm order by TIME_TO_SEC(CDATE), cidx; +cidx CDATE +1 1997-01-01 +select cidx, CDATETIME from datatypetestm order by TIME_TO_SEC(CDATETIME), cidx; +cidx CDATETIME +1 1997-01-01 00:00:00 +select cidx, CTIME from datatypetestm order by TIME_TO_SEC(CTIME), cidx; +cidx CTIME +1 13:00:00 diff --git a/mysql-test/columnstore/autopilot/t/mcs4004_autopilot_batchInsert_ldi.test b/mysql-test/columnstore/autopilot/t/mcs4004_autopilot_batchInsert_ldi.test index 4d6c27ed8..81356dcef 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4004_autopilot_batchInsert_ldi.test +++ b/mysql-test/columnstore/autopilot/t/mcs4004_autopilot_batchInsert_ldi.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4004_db; diff --git a/mysql-test/columnstore/autopilot/t/mcs4005_autopilot_add_drop_columns.test b/mysql-test/columnstore/autopilot/t/mcs4005_autopilot_add_drop_columns.test index 861ed85c7..1b2a311bb 100755 --- a/mysql-test/columnstore/autopilot/t/mcs4005_autopilot_add_drop_columns.test +++ b/mysql-test/columnstore/autopilot/t/mcs4005_autopilot_add_drop_columns.test @@ -4,6 +4,7 @@ # Author: Daniel Lee, daniel.lee@mariadb.com # -------------------------------------------------------------- # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4005_db; diff --git a/mysql-test/columnstore/autopilot/t/mcs4006_autopilot_create_dbt3_database_1m.test b/mysql-test/columnstore/autopilot/t/mcs4006_autopilot_create_dbt3_database_1m.test index fe537e167..148281e16 100755 --- a/mysql-test/columnstore/autopilot/t/mcs4006_autopilot_create_dbt3_database_1m.test +++ b/mysql-test/columnstore/autopilot/t/mcs4006_autopilot_create_dbt3_database_1m.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4006_db; diff --git a/mysql-test/columnstore/autopilot/t/mcs4007_autopilot_dbt3_performance_queries_1g.test b/mysql-test/columnstore/autopilot/t/mcs4007_autopilot_dbt3_performance_queries_1g.test index eb7560ad6..1a106a2d6 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4007_autopilot_dbt3_performance_queries_1g.test +++ b/mysql-test/columnstore/autopilot/t/mcs4007_autopilot_dbt3_performance_queries_1g.test @@ -8,6 +8,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4007_db; diff --git a/mysql-test/columnstore/autopilot/t/mcs4008_autopilot_sanity_test.test b/mysql-test/columnstore/autopilot/t/mcs4008_autopilot_sanity_test.test index 81f9d4dea..0ce02a580 100755 --- a/mysql-test/columnstore/autopilot/t/mcs4008_autopilot_sanity_test.test +++ b/mysql-test/columnstore/autopilot/t/mcs4008_autopilot_sanity_test.test @@ -4,6 +4,7 @@ # Author: Daniel Lee, daniel.lee@mariadb.com # -------------------------------------------------------------- # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4008_db; diff --git a/mysql-test/columnstore/autopilot/t/mcs4010_autopilot_cross_engine_join.test b/mysql-test/columnstore/autopilot/t/mcs4010_autopilot_cross_engine_join.test index bbceec2ad..4649a4d2f 100755 --- a/mysql-test/columnstore/autopilot/t/mcs4010_autopilot_cross_engine_join.test +++ b/mysql-test/columnstore/autopilot/t/mcs4010_autopilot_cross_engine_join.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4010_db; diff --git a/mysql-test/columnstore/autopilot/t/mcs4011_autopilot_query_stats.test b/mysql-test/columnstore/autopilot/t/mcs4011_autopilot_query_stats.test index 0387834af..d08529bd5 100755 --- a/mysql-test/columnstore/autopilot/t/mcs4011_autopilot_query_stats.test +++ b/mysql-test/columnstore/autopilot/t/mcs4011_autopilot_query_stats.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs4011_db; diff --git a/mysql-test/columnstore/autopilot/t/mcs4125_function_CNX_LAST_DAY_DS.test b/mysql-test/columnstore/autopilot/t/mcs4125_function_CNX_LAST_DAY_DS.test index c4902fa20..0cee52caa 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4125_function_CNX_LAST_DAY_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4125_function_CNX_LAST_DAY_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4125_function_CNX_LAST_DAY_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4125_function_CNX_LAST_DAY_DS_maxscale.test new file mode 100644 index 000000000..0dd87f552 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4125_function_CNX_LAST_DAY_DS_maxscale.test @@ -0,0 +1,23 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, LAST_DAY(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, LAST_DAY(CDATETIME) from datatypetestm order by cidx; +--replace_column 3 REPLACEDVALUE +select cidx, CTIME, LAST_DAY(CTIME) from datatypetestm order by cidx; +select cidx, LAST_DAY('2009-02-28') from datatypetestm order by cidx; +select cidx, LAST_DAY('2009-07-04') from datatypetestm order by cidx; +select cidx, LAST_DAY('2010-02-31') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm where LAST_DAY(CDATE) <> 0 order by cidx; +select cidx, CDATETIME from datatypetestm where LAST_DAY(CDATETIME) <> 0 order by cidx; +#select cidx, CTIME from datatypetestm where LAST_DAY(CTIME) <> 0 order by cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4154_function_CNX_MICROSECOND_DS.test b/mysql-test/columnstore/autopilot/t/mcs4154_function_CNX_MICROSECOND_DS.test index 6f04ab5e1..387078d3e 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4154_function_CNX_MICROSECOND_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4154_function_CNX_MICROSECOND_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4154_function_CNX_MICROSECOND_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4154_function_CNX_MICROSECOND_DS_maxscale.test new file mode 100644 index 000000000..c9b000043 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4154_function_CNX_MICROSECOND_DS_maxscale.test @@ -0,0 +1,21 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, MICROSECOND(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, MICROSECOND(CDATETIME) from datatypetestm order by cidx; +select cidx, CTIME, MICROSECOND(CTIME) from datatypetestm order by cidx; +select cidx, MICROSECOND('2011-05-01') from datatypetestm order by cidx; +select cidx, MICROSECOND('2011-05-01 13:58:22.123456') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm where MICROSECOND(CDATE) <> 0 order by cidx; +select cidx, CDATETIME from datatypetestm where MICROSECOND(CDATETIME) <> 0 order by cidx; +select cidx, CTIME from datatypetestm where MICROSECOND(CTIME) <> 0 order by cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4162_function_CNX_MONTHNAME_DS.test b/mysql-test/columnstore/autopilot/t/mcs4162_function_CNX_MONTHNAME_DS.test index 3592d3fc9..35a4dbfeb 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4162_function_CNX_MONTHNAME_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4162_function_CNX_MONTHNAME_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4162_function_CNX_MONTHNAME_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4162_function_CNX_MONTHNAME_DS_maxscale.test new file mode 100644 index 000000000..582416369 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4162_function_CNX_MONTHNAME_DS_maxscale.test @@ -0,0 +1,23 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, MONTHNAME(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, MONTHNAME(CDATETIME) from datatypetestm order by cidx; +--replace_column 3 REPLACEDVALUE +select cidx, CTIME, MONTHNAME(CTIME) from datatypetestm order by cidx; +select cidx, MONTHNAME('2009-02-28') from datatypetestm order by cidx; +select cidx, MONTHNAME('2009-07-04') from datatypetestm order by cidx; +select cidx, MONTHNAME('2010-02-31') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm where MONTHNAME(CDATE) <> 0 order by cidx; +select cidx, CDATETIME from datatypetestm where MONTHNAME(CDATETIME) <> 0 order by cidx; +#select cidx, CTIME from datatypetestm where MONTHNAME(CTIME) <> 0 order by cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4164_function_CNX_NULLIF_NM_Archived.test b/mysql-test/columnstore/autopilot/t/mcs4164_function_CNX_NULLIF_NM_Archived.test index 8c37f09ff..93e455cea 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4164_function_CNX_NULLIF_NM_Archived.test +++ b/mysql-test/columnstore/autopilot/t/mcs4164_function_CNX_NULLIF_NM_Archived.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4164_function_CNX_NULLIF_NM_Archived_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4164_function_CNX_NULLIF_NM_Archived_maxscale.test new file mode 100644 index 000000000..c1c92d5e3 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4164_function_CNX_NULLIF_NM_Archived_maxscale.test @@ -0,0 +1,313 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CBIGINT, NULLIF(CBIGINT,CBIGINT) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CINTEGER) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,1) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,3.14) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CCHAR4) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CDATE) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,NULL) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,1) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,1) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,1) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,1) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,1) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,1) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,1) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,1) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,1) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CBIGINT) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CINTEGER) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CDOUBLE) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,1) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,3.14) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CCHAR4) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CDATE) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,NULL) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CBIGINT) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CINTEGER) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,1) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,3.14) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CCHAR4) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDATE) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,NULL) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CBIGINT) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CINTEGER) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,1) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,3.14) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CCHAR4) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CDATE) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,NULL) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CBIGINT) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CINTEGER) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,1) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,3.14) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CCHAR4) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDATE) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,NULL) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CBIGINT) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CINTEGER) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,1) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,3.14) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CCHAR4) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CDATE) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,NULL) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CBIGINT) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CINTEGER) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CDOUBLE) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,1) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,3.14) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CCHAR4) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,CDATE) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,NULL) <> 0 order by cidx; +select cidx, CBIGINT from datatypetestm where NULLIF(CBIGINT,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,1) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,3.14) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,NULL) <> 0 order by cidx; +select cidx, CDECIMAL1 from datatypetestm where NULLIF(CDECIMAL1,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,1) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,3.14) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,NULL) <> 0 order by cidx; +select cidx, CDECIMAL4 from datatypetestm where NULLIF(CDECIMAL4,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,1) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,3.14) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,NULL) <> 0 order by cidx; +select cidx, CDECIMAL4_2 from datatypetestm where NULLIF(CDECIMAL4_2,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,1) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,3.14) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,NULL) <> 0 order by cidx; +select cidx, CDECIMAL5 from datatypetestm where NULLIF(CDECIMAL5,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,1) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,3.14) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,NULL) <> 0 order by cidx; +select cidx, CDECIMAL9 from datatypetestm where NULLIF(CDECIMAL9,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,1) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,3.14) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,NULL) <> 0 order by cidx; +select cidx, CDECIMAL9_2 from datatypetestm where NULLIF(CDECIMAL9_2,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,1) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,3.14) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,NULL) <> 0 order by cidx; +select cidx, CDECIMAL10 from datatypetestm where NULLIF(CDECIMAL10,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,1) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,3.14) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,NULL) <> 0 order by cidx; +select cidx, CDECIMAL18 from datatypetestm where NULLIF(CDECIMAL18,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CBIGINT) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CINTEGER) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CDOUBLE) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,1) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,3.14) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CCHAR4) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,CDATE) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,NULL) <> 0 order by cidx; +select cidx, CDECIMAL18_2 from datatypetestm where NULLIF(CDECIMAL18_2,'HELLO WORLD') <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CBIGINT) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CINTEGER) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CDOUBLE) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,1) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,3.14) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CCHAR4) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,CDATE) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,NULL) <> 0 order by cidx; +select cidx, CINTEGER from datatypetestm where NULLIF(CINTEGER,'HELLO WORLD') <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CBIGINT) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CINTEGER) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CDOUBLE) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,1) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,3.14) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CCHAR4) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,CDATE) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,NULL) <> 0 order by cidx; +select cidx, CSMALLINT from datatypetestm where NULLIF(CSMALLINT,'HELLO WORLD') <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CBIGINT) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CINTEGER) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CDOUBLE) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,1) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,3.14) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CCHAR4) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,CDATE) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,NULL) <> 0 order by cidx; +select cidx, CTINYINT from datatypetestm where NULLIF(CTINYINT,'HELLO WORLD') <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CBIGINT) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CINTEGER) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CDOUBLE) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,1) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,3.14) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CCHAR4) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,CDATE) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,NULL) <> 0 order by cidx; +select cidx, CDOUBLE from datatypetestm where NULLIF(CDOUBLE,'HELLO WORLD') <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CBIGINT) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CINTEGER) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CDOUBLE) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CDECIMAL9_2) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,1) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,3.14) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CCHAR4) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,CDATE) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,NULL) <> 0 order by cidx; +select cidx, CFLOAT from datatypetestm where NULLIF(CFLOAT,'HELLO WORLD') <> 0 order by cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4220_function_CNX_TIME_TO_SEC_DS.test b/mysql-test/columnstore/autopilot/t/mcs4220_function_CNX_TIME_TO_SEC_DS.test index b47b7aac8..94cd600e3 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4220_function_CNX_TIME_TO_SEC_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4220_function_CNX_TIME_TO_SEC_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4220_function_CNX_TIME_TO_SEC_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4220_function_CNX_TIME_TO_SEC_DS_maxscale.test new file mode 100644 index 000000000..f804aed2d --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4220_function_CNX_TIME_TO_SEC_DS_maxscale.test @@ -0,0 +1,22 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, TIME_TO_SEC(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, TIME_TO_SEC(CDATETIME) from datatypetestm order by cidx; +select cidx, CTIME, TIME_TO_SEC(CTIME) from datatypetestm order by cidx; +select cidx, TIME_TO_SEC('22:23:00') from datatypetestm order by cidx; +select cidx, TIME_TO_SEC('00:39:38') from datatypetestm order by cidx; +select cidx, TIME_TO_SEC('22:23:49 999999') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm where TIME_TO_SEC(CDATE) <> 0 order by cidx; +select cidx, CDATETIME from datatypetestm where TIME_TO_SEC(CDATETIME) <> 0 order by cidx; +select cidx, CTIME from datatypetestm where TIME_TO_SEC(CTIME) <> 0 order by cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4350_function_CNXPP_LAST_DAY_DS.test b/mysql-test/columnstore/autopilot/t/mcs4350_function_CNXPP_LAST_DAY_DS.test index 85ceff2b1..b3c2ebf11 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4350_function_CNXPP_LAST_DAY_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4350_function_CNXPP_LAST_DAY_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4350_function_CNXPP_LAST_DAY_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4350_function_CNXPP_LAST_DAY_DS_maxscale.test new file mode 100644 index 000000000..1b8fc71f4 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4350_function_CNXPP_LAST_DAY_DS_maxscale.test @@ -0,0 +1,23 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, LAST_DAY(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, LAST_DAY(CDATETIME) from datatypetestm order by cidx; +--replace_column 3 REPLACEDVALUE +select cidx, CTIME, LAST_DAY(CTIME) from datatypetestm order by cidx; +select cidx, LAST_DAY('2009-02-28') from datatypetestm order by cidx; +select cidx, LAST_DAY('2009-07-04') from datatypetestm order by cidx; +select cidx, LAST_DAY('2010-02-31') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm order by LAST_DAY(CDATE), cidx; +select cidx, CDATETIME from datatypetestm order by LAST_DAY(CDATETIME), cidx; +#select cidx, CTIME from datatypetestm order by LAST_DAY(CTIME), cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4379_function_CNXPP_MICROSECOND_DS.test b/mysql-test/columnstore/autopilot/t/mcs4379_function_CNXPP_MICROSECOND_DS.test index 83293bd8c..a6b011083 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4379_function_CNXPP_MICROSECOND_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4379_function_CNXPP_MICROSECOND_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4379_function_CNXPP_MICROSECOND_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4379_function_CNXPP_MICROSECOND_DS_maxscale.test new file mode 100644 index 000000000..48c9829b7 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4379_function_CNXPP_MICROSECOND_DS_maxscale.test @@ -0,0 +1,21 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, MICROSECOND(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, MICROSECOND(CDATETIME) from datatypetestm order by cidx; +select cidx, CTIME, MICROSECOND(CTIME) from datatypetestm order by cidx; +select cidx, MICROSECOND('2011-05-01') from datatypetestm order by cidx; +select cidx, MICROSECOND('2011-05-01 13:58:22.123456') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm order by MICROSECOND(CDATE), cidx; +select cidx, CDATETIME from datatypetestm order by MICROSECOND(CDATETIME), cidx; +select cidx, CTIME from datatypetestm order by MICROSECOND(CTIME), cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4387_function_CNXPP_MONTHNAME_DS.test b/mysql-test/columnstore/autopilot/t/mcs4387_function_CNXPP_MONTHNAME_DS.test index fe2fdbb15..3fa26697e 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4387_function_CNXPP_MONTHNAME_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4387_function_CNXPP_MONTHNAME_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4387_function_CNXPP_MONTHNAME_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4387_function_CNXPP_MONTHNAME_DS_maxscale.test new file mode 100644 index 000000000..bdcf1c982 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4387_function_CNXPP_MONTHNAME_DS_maxscale.test @@ -0,0 +1,23 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, MONTHNAME(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, MONTHNAME(CDATETIME) from datatypetestm order by cidx; +--replace_column 3 REPLACEDVALUE +select cidx, CTIME, MONTHNAME(CTIME) from datatypetestm order by cidx; +select cidx, MONTHNAME('2009-02-28') from datatypetestm order by cidx; +select cidx, MONTHNAME('2009-07-04') from datatypetestm order by cidx; +select cidx, MONTHNAME('2010-02-31') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm order by MONTHNAME(CDATE), cidx; +select cidx, CDATETIME from datatypetestm order by MONTHNAME(CDATETIME), cidx; +#select cidx, CTIME from datatypetestm order by MONTHNAME(CTIME), cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4389_function_CNXPP_NULLIF_NM_Archived.test b/mysql-test/columnstore/autopilot/t/mcs4389_function_CNXPP_NULLIF_NM_Archived.test index 26e63f6ae..335dae861 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4389_function_CNXPP_NULLIF_NM_Archived.test +++ b/mysql-test/columnstore/autopilot/t/mcs4389_function_CNXPP_NULLIF_NM_Archived.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4389_function_CNXPP_NULLIF_NM_Archived_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4389_function_CNXPP_NULLIF_NM_Archived_maxscale.test new file mode 100644 index 000000000..6a5432e91 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4389_function_CNXPP_NULLIF_NM_Archived_maxscale.test @@ -0,0 +1,313 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CBIGINT, NULLIF(CBIGINT,CBIGINT) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CINTEGER) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,1) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,3.14) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CCHAR4) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,CDATE) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,NULL) from datatypetestm order by cidx; +select cidx, CBIGINT, NULLIF(CBIGINT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,1) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL1, NULLIF(CDECIMAL1,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,1) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL4, NULLIF(CDECIMAL4,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,1) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL4_2, NULLIF(CDECIMAL4_2,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,1) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL5, NULLIF(CDECIMAL5,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,1) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL9, NULLIF(CDECIMAL9,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,1) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL9_2, NULLIF(CDECIMAL9_2,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,1) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL10, NULLIF(CDECIMAL10,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,1) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL18, NULLIF(CDECIMAL18,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CBIGINT) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CINTEGER) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,1) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,3.14) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CCHAR4) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,CDATE) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,NULL) from datatypetestm order by cidx; +select cidx, CDECIMAL18_2, NULLIF(CDECIMAL18_2,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CBIGINT) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CINTEGER) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CDOUBLE) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,1) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,3.14) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CCHAR4) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,CDATE) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,NULL) from datatypetestm order by cidx; +select cidx, CINTEGER, NULLIF(CINTEGER,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CBIGINT) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CINTEGER) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,1) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,3.14) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CCHAR4) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,CDATE) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,NULL) from datatypetestm order by cidx; +select cidx, CSMALLINT, NULLIF(CSMALLINT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CBIGINT) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CINTEGER) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,1) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,3.14) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CCHAR4) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,CDATE) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,NULL) from datatypetestm order by cidx; +select cidx, CTINYINT, NULLIF(CTINYINT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CBIGINT) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CINTEGER) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDOUBLE) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,1) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,3.14) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CCHAR4) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,CDATE) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,NULL) from datatypetestm order by cidx; +select cidx, CDOUBLE, NULLIF(CDOUBLE,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CBIGINT) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CINTEGER) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CDOUBLE) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CDECIMAL9_2) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,1) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,3.14) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CCHAR4) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,CDATE) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,NULL) from datatypetestm order by cidx; +select cidx, CFLOAT, NULLIF(CFLOAT,'HELLO WORLD') from datatypetestm order by cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CBIGINT), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CINTEGER), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CDOUBLE), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CDECIMAL9_2), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,1), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,3.14), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CCHAR4), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,CDATE), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,NULL), cidx; +select cidx, CBIGINT from datatypetestm order by NULLIF(CBIGINT,'HELLO WORLD'), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CBIGINT), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CINTEGER), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CDOUBLE), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CDECIMAL9_2), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,1), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,3.14), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CCHAR4), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,CDATE), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,NULL), cidx; +select cidx, CDECIMAL1 from datatypetestm order by NULLIF(CDECIMAL1,'HELLO WORLD'), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CBIGINT), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CINTEGER), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CDOUBLE), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CDECIMAL9_2), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,1), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,3.14), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CCHAR4), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,CDATE), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,NULL), cidx; +select cidx, CDECIMAL4 from datatypetestm order by NULLIF(CDECIMAL4,'HELLO WORLD'), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CBIGINT), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CINTEGER), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CDOUBLE), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CDECIMAL9_2), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,1), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,3.14), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CCHAR4), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,CDATE), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,NULL), cidx; +select cidx, CDECIMAL4_2 from datatypetestm order by NULLIF(CDECIMAL4_2,'HELLO WORLD'), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CBIGINT), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CINTEGER), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CDOUBLE), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CDECIMAL9_2), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,1), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,3.14), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CCHAR4), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,CDATE), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,NULL), cidx; +select cidx, CDECIMAL5 from datatypetestm order by NULLIF(CDECIMAL5,'HELLO WORLD'), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CBIGINT), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CINTEGER), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CDOUBLE), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CDECIMAL9_2), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,1), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,3.14), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CCHAR4), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,CDATE), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,NULL), cidx; +select cidx, CDECIMAL9 from datatypetestm order by NULLIF(CDECIMAL9,'HELLO WORLD'), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CBIGINT), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CINTEGER), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CDOUBLE), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CDECIMAL9_2), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,1), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,3.14), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CCHAR4), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,CDATE), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,NULL), cidx; +select cidx, CDECIMAL9_2 from datatypetestm order by NULLIF(CDECIMAL9_2,'HELLO WORLD'), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CBIGINT), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CINTEGER), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CDOUBLE), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CDECIMAL9_2), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,1), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,3.14), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CCHAR4), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,CDATE), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,NULL), cidx; +select cidx, CDECIMAL10 from datatypetestm order by NULLIF(CDECIMAL10,'HELLO WORLD'), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CBIGINT), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CINTEGER), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CDOUBLE), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CDECIMAL9_2), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,1), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,3.14), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CCHAR4), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,CDATE), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,NULL), cidx; +select cidx, CDECIMAL18 from datatypetestm order by NULLIF(CDECIMAL18,'HELLO WORLD'), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CBIGINT), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CINTEGER), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CDOUBLE), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CDECIMAL9_2), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,1), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,3.14), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CCHAR4), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,CDATE), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,NULL), cidx; +select cidx, CDECIMAL18_2 from datatypetestm order by NULLIF(CDECIMAL18_2,'HELLO WORLD'), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CBIGINT), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CINTEGER), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CDOUBLE), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CDECIMAL9_2), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,1), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,3.14), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CCHAR4), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,CDATE), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,NULL), cidx; +select cidx, CINTEGER from datatypetestm order by NULLIF(CINTEGER,'HELLO WORLD'), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CBIGINT), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CINTEGER), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CDOUBLE), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CDECIMAL9_2), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,1), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,3.14), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CCHAR4), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,CDATE), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,NULL), cidx; +select cidx, CSMALLINT from datatypetestm order by NULLIF(CSMALLINT,'HELLO WORLD'), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CBIGINT), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CINTEGER), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CDOUBLE), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CDECIMAL9_2), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,1), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,3.14), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CCHAR4), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,CDATE), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,NULL), cidx; +select cidx, CTINYINT from datatypetestm order by NULLIF(CTINYINT,'HELLO WORLD'), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CBIGINT), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CINTEGER), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CDOUBLE), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CDECIMAL9_2), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,1), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,3.14), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CCHAR4), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,CDATE), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,NULL), cidx; +select cidx, CDOUBLE from datatypetestm order by NULLIF(CDOUBLE,'HELLO WORLD'), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CBIGINT), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CINTEGER), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CDOUBLE), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CDECIMAL9_2), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,1), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,3.14), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CCHAR4), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,CDATE), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,NULL), cidx; +select cidx, CFLOAT from datatypetestm order by NULLIF(CFLOAT,'HELLO WORLD'), cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs4445_function_CNXPP_TIME_TO_SEC_DS.test b/mysql-test/columnstore/autopilot/t/mcs4445_function_CNXPP_TIME_TO_SEC_DS.test index 9c3e67138..3ff33635c 100644 --- a/mysql-test/columnstore/autopilot/t/mcs4445_function_CNXPP_TIME_TO_SEC_DS.test +++ b/mysql-test/columnstore/autopilot/t/mcs4445_function_CNXPP_TIME_TO_SEC_DS.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/autopilot/t/mcs4445_function_CNXPP_TIME_TO_SEC_DS_maxscale.test b/mysql-test/columnstore/autopilot/t/mcs4445_function_CNXPP_TIME_TO_SEC_DS_maxscale.test new file mode 100644 index 000000000..ab7525955 --- /dev/null +++ b/mysql-test/columnstore/autopilot/t/mcs4445_function_CNXPP_TIME_TO_SEC_DS_maxscale.test @@ -0,0 +1,22 @@ +# -------------------------------------------------------------- # +# Test case migrated from Autopilot functions test suite +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE autopilot; +# +select cidx, CDATE, TIME_TO_SEC(CDATE) from datatypetestm order by cidx; +select cidx, CDATETIME, TIME_TO_SEC(CDATETIME) from datatypetestm order by cidx; +select cidx, CTIME, TIME_TO_SEC(CTIME) from datatypetestm order by cidx; +select cidx, TIME_TO_SEC('22:23:00') from datatypetestm order by cidx; +select cidx, TIME_TO_SEC('00:39:38') from datatypetestm order by cidx; +select cidx, TIME_TO_SEC('22:23:49 999999') from datatypetestm order by cidx; +select cidx, CDATE from datatypetestm order by TIME_TO_SEC(CDATE), cidx; +select cidx, CDATETIME from datatypetestm order by TIME_TO_SEC(CDATETIME), cidx; +select cidx, CTIME from datatypetestm order by TIME_TO_SEC(CTIME), cidx; +--enable_warnings diff --git a/mysql-test/columnstore/autopilot/t/mcs6721_json_JSON_ARRAY.test b/mysql-test/columnstore/autopilot/t/mcs6721_json_JSON_ARRAY.test index 1670af8ef..c0a196da9 100644 --- a/mysql-test/columnstore/autopilot/t/mcs6721_json_JSON_ARRAY.test +++ b/mysql-test/columnstore/autopilot/t/mcs6721_json_JSON_ARRAY.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE autopilot; # diff --git a/mysql-test/columnstore/basic/r/MCOL-5744-utf8-in-ddl.result b/mysql-test/columnstore/basic/r/MCOL-5744-utf8-in-ddl.result index dfd4742cd..97a184f2e 100644 --- a/mysql-test/columnstore/basic/r/MCOL-5744-utf8-in-ddl.result +++ b/mysql-test/columnstore/basic/r/MCOL-5744-utf8-in-ddl.result @@ -1,5 +1,6 @@ DROP DATABASE IF EXISTS MCOL5744; CREATE DATABASE MCOL5744; +USE MCOL5744; SET old_mode=''; CREATE TABLE t(x text CHARACTER SET utf8 COLLATE utf8_general_ci) ENGINE=COLUMNSTORE; SHOW CREATE TABLE t; diff --git a/mysql-test/columnstore/basic/r/MCOL-5744-utf8-in-ddl_maxscale.result b/mysql-test/columnstore/basic/r/MCOL-5744-utf8-in-ddl_maxscale.result new file mode 100644 index 000000000..0d59e20a1 --- /dev/null +++ b/mysql-test/columnstore/basic/r/MCOL-5744-utf8-in-ddl_maxscale.result @@ -0,0 +1,19 @@ +DROP DATABASE IF EXISTS MCOL5744; +CREATE DATABASE MCOL5744; +SET old_mode=''; +CREATE TABLE t(x text CHARACTER SET utf8 COLLATE utf8_general_ci) ENGINE=COLUMNSTORE; +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `x` text DEFAULT NULL +) ENGINE=Columnstore DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci +DROP TABLE t; +SET old_mode='UTF8_IS_UTF8MB3'; +CREATE TABLE t(x text CHARACTER SET utf8 COLLATE utf8_general_ci) ENGINE=COLUMNSTORE; +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `x` text DEFAULT NULL +) ENGINE=Columnstore DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci +DROP TABLE t; +DROP DATABASE MCOL5744; diff --git a/mysql-test/columnstore/basic/r/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.result b/mysql-test/columnstore/basic/r/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.result index 07db35568..a7e29c42a 100644 --- a/mysql-test/columnstore/basic/r/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.result +++ b/mysql-test/columnstore/basic/r/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.result @@ -13,3 +13,6 @@ COUNT(*) SELECT COUNT(*) FROM (SELECT * FROM t2 UNION ALL SELECT * FROM t1 PARTITION (p0)) tt; COUNT(*) 20 +REVOKE ALL PRIVILEGES ON *.* FROM 'cejuser'@'localhost'; +DROP USER 'cejuser'@'localhost'; +DROP DATABASE MCOL5886; diff --git a/mysql-test/columnstore/basic/r/analyze_table.result b/mysql-test/columnstore/basic/r/analyze_table.result index 65fd380e0..08d8031e0 100644 --- a/mysql-test/columnstore/basic/r/analyze_table.result +++ b/mysql-test/columnstore/basic/r/analyze_table.result @@ -3,23 +3,29 @@ CREATE DATABASE analyze_table_db; USE analyze_table_db; create table t1 (a int, b int, c int) engine=columnstore; insert into t1 values (1, 2, 3), (2, 2, 2), (2, 3, 4); -analyze table t1; +analyze table t1 PERSISTENT FOR ALL; Table Op Msg_type Msg_text +analyze_table_db.t1 analyze status Engine-independent statistics collected analyze_table_db.t1 analyze status OK create table t2 (a int, b double) engine=columnstore; insert into t2 values (2, 3), (3, 4); -analyze table t2; +analyze table t2 PERSISTENT FOR ALL; Table Op Msg_type Msg_text +analyze_table_db.t2 analyze status Engine-independent statistics collected analyze_table_db.t2 analyze status OK create table t3 (a varchar(25)) engine=columnstore; insert into t3 values ("a"), ("b"); -analyze table t3; +analyze table t3 PERSISTENT FOR ALL; Table Op Msg_type Msg_text +analyze_table_db.t3 analyze status Engine-independent statistics collected analyze_table_db.t3 analyze status OK -analyze table t1, t2, t3; +analyze table t1, t2, t3 PERSISTENT FOR ALL; Table Op Msg_type Msg_text +analyze_table_db.t1 analyze status Engine-independent statistics collected analyze_table_db.t1 analyze status OK +analyze_table_db.t2 analyze status Engine-independent statistics collected analyze_table_db.t2 analyze status OK +analyze_table_db.t3 analyze status Engine-independent statistics collected analyze_table_db.t3 analyze status OK DROP TABLE t1; DROP TABLE t2; diff --git a/mysql-test/columnstore/basic/r/mcol-5005.result b/mysql-test/columnstore/basic/r/mcol-5005.result index 19a5b7a3e..e70fa3623 100644 --- a/mysql-test/columnstore/basic/r/mcol-5005.result +++ b/mysql-test/columnstore/basic/r/mcol-5005.result @@ -58,7 +58,8 @@ t4 CREATE TABLE `t4` ( `a` varchar(15) DEFAULT NULL ) ENGINE=Columnstore DEFAULT CHARSET=latin2 COLLATE=latin2_general_ci SELECT `schema`, tablename, columnname, charsetnum FROM calpontsys.syscolumn -WHERE `schema`='mcol5005' AND tablename in ('t1', 't2', 't3', 't4'); +WHERE `schema`='mcol5005' AND tablename in ('t1', 't2', 't3', 't4') +ORDER BY tablename, columnname, charsetnum; schema tablename columnname charsetnum mcol5005 t1 a 227 mcol5005 t1 b 33 diff --git a/mysql-test/columnstore/basic/r/mcol641-aggregate.result b/mysql-test/columnstore/basic/r/mcol641-aggregate.result index 97f74000b..bf2ec4f80 100644 --- a/mysql-test/columnstore/basic/r/mcol641-aggregate.result +++ b/mysql-test/columnstore/basic/r/mcol641-aggregate.result @@ -497,3 +497,4 @@ DROP TABLE cs2; DROP TABLE cs3; DROP TABLE cs4; DROP TABLE cs5; +DROP DATABASE test_mcol641_aggregate; diff --git a/mysql-test/columnstore/basic/r/mcol641-create.result b/mysql-test/columnstore/basic/r/mcol641-create.result index 50560b968..52e1ef005 100644 --- a/mysql-test/columnstore/basic/r/mcol641-create.result +++ b/mysql-test/columnstore/basic/r/mcol641-create.result @@ -11,7 +11,17 @@ CREATE TABLE cs3(d1 DECIMAL(38) UNSIGNED ZEROFILL, d2 DECIMAL(38,10) UNSIGNED ZE Warnings: Warning 1618 ZEROFILL is ignored in ColumnStore CREATE TABLE cs4(d1 DECIMAL(18), d2 DECIMAL(18,10), d3 DECIMAL(18,18)) ENGINE=columnstore; -SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_name = 'cs1' OR table_name = 'cs2' OR table_name = 'cs3' OR table_name = 'cs4' ORDER BY table_name,column_name ASC; +SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_name = 'cs1' OR table_name = 'cs2' OR table_name = 'cs3' OR table_name = 'cs4' +ORDER BY +TABLE_SCHEMA, +TABLE_NAME, +COLUMN_NAME, +DATA_TYPE, +COLUMN_LENGTH, +COLUMN_POSITION, +COLUMN_DEFAULT, +NUMERIC_PRECISION, +NUMERIC_SCALE; TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE COLUMN_LENGTH COLUMN_POSITION COLUMN_DEFAULT NUMERIC_PRECISION NUMERIC_SCALE test_mcol641_create cs1 d1 decimal 16 0 NULL 38 0 test_mcol641_create cs1 d2 decimal 16 1 NULL 38 10 @@ -40,7 +50,17 @@ ALTER TABLE cs2 ADD COLUMN (d5 DECIMAL(38,5), d6 DECIMAL(35,15)); ERROR 42000: The storage engine for the table doesn't support Multiple actions in alter table statement is currently not supported by Columnstore. ALTER TABLE cs3 MODIFY d1 DECIMAL(38) SIGNED; ERROR HY000: Internal error: CAL0001: Alter table Failed: Altertable: Error in the action type -SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_schema = 'test_mcol641_create' ORDER BY table_name,column_name ASC; +SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_schema = 'test_mcol641_create' +ORDER BY +TABLE_SCHEMA, +TABLE_NAME, +COLUMN_NAME, +DATA_TYPE, +COLUMN_LENGTH, +COLUMN_POSITION, +COLUMN_DEFAULT, +NUMERIC_PRECISION, +NUMERIC_SCALE; TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE COLUMN_LENGTH COLUMN_POSITION COLUMN_DEFAULT NUMERIC_PRECISION NUMERIC_SCALE test_mcol641_create cs1 d1 decimal 16 0 NULL 38 0 test_mcol641_create cs1 d2 decimal 16 1 NULL 38 10 diff --git a/mysql-test/columnstore/basic/r/mcs10_drop_db_table.result b/mysql-test/columnstore/basic/r/mcs10_drop_db_table.result index 655070bda..b1e8acc10 100644 --- a/mysql-test/columnstore/basic/r/mcs10_drop_db_table.result +++ b/mysql-test/columnstore/basic/r/mcs10_drop_db_table.result @@ -62,8 +62,6 @@ DROP TABLE IF EXISTS mcs10_db2.t_columnstore1; USE mcs10_db1; CREATE TABLE t_columnstore1 (id int) engine=columnstore; CREATE TABLE t_columnstore2 (id int) engine=columnstore; -connect addconroot1, localhost, root,,; -connect addconroot2, localhost, root,,; connection addconroot1; DROP TABLE mcs10_db1.t_columnstore1; connection addconroot2; diff --git a/mysql-test/columnstore/basic/r/mcs117_create_utf8_maxscale.result b/mysql-test/columnstore/basic/r/mcs117_create_utf8_maxscale.result new file mode 100644 index 000000000..1007dcd30 --- /dev/null +++ b/mysql-test/columnstore/basic/r/mcs117_create_utf8_maxscale.result @@ -0,0 +1,39 @@ +set names utf8; +DROP DATABASE IF EXISTS mcs117_db; +CREATE DATABASE имя_базы_в_кодировке_утф8_длиной_больше_чем_45; +USE имя_базы_в_кодировке_утф8_длиной_больше_чем_45; +SELECT DATABASE(); +DATABASE() +имя_базы_в_кодировке_утф8_длиной_больше_чем_45 +CREATE DATABASE mcs117_db; +USE mcs117_db; +SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.schemata +WHERE schema_name='имя_базы_в_кодировке_утф8_длиной_больше_чем_45'; +SCHEMA_NAME +имя_базы_в_кодировке_утф8_длиной_больше_чем_45 +DROP DATABASE имя_базы_в_кодировке_утф8_длиной_больше_чем_45; +CREATE TABLE имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 +( +имя_поля_в_кодировке_утф8_длиной_больше_чем_45 INT +)ENGINE=Columnstore; +SHOW CREATE TABLE имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48; +Table Create Table +имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 CREATE TABLE `имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48` ( + `имя_поля_в_кодировке_утф8_длиной_больше_чем_45` int(11) DEFAULT NULL +) ENGINE=Columnstore DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci +CREATE VIEW имя_вью_кодировке_утф8_длиной_больше_чем_42 AS SELECT * FROM имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48; +SHOW CREATE VIEW имя_вью_кодировке_утф8_длиной_больше_чем_42; +View Create View character_set_client collation_connection +имя_вью_кодировке_утф8_длиной_больше_чем_42 CREATE ALGORITHM=UNDEFINED DEFINER=`testUser`@`%` SQL SECURITY DEFINER VIEW `имя_вью_кодировке_утф8_длиной_больше_чем_42` AS select `имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48`.`имя_поля_в_кодировке_утф8_длиной_больше_чем_45` AS `имя_поля_в_кодировке_утф8_длиной_больше_чем_45` from `имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48` utf8mb3 utf8mb3_general_ci +select TABLE_NAME from information_schema.tables where table_schema='mcs117_db' order by 1; +TABLE_NAME +имя_вью_кодировке_утф8_длиной_больше_чем_42 +имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 +select COLUMN_NAME from information_schema.columns where table_schema='mcs117_db' order by 1; +COLUMN_NAME +имя_поля_в_кодировке_утф8_длиной_больше_чем_45 +имя_поля_в_кодировке_утф8_длиной_больше_чем_45 +select TABLE_NAME from information_schema.views where table_schema='mcs117_db' order by 1; +TABLE_NAME +имя_вью_кодировке_утф8_длиной_больше_чем_42 +DROP DATABASE mcs117_db; diff --git a/mysql-test/columnstore/basic/r/mcs11_show_db_table.result b/mysql-test/columnstore/basic/r/mcs11_show_db_table.result index a6085be2a..d703e01f4 100644 --- a/mysql-test/columnstore/basic/r/mcs11_show_db_table.result +++ b/mysql-test/columnstore/basic/r/mcs11_show_db_table.result @@ -40,8 +40,6 @@ SHOW TABLES IN mcs11_db2; Tables_in_mcs11_db2 t1 t2 -connect addconroot1, localhost, root,,; -connect addconroot2, localhost, root,,; connection addconroot1; SHOW DATABASES LIKE 'mcs11%'; Database (mcs11%) diff --git a/mysql-test/columnstore/basic/r/mcs12_alter_table.result b/mysql-test/columnstore/basic/r/mcs12_alter_table.result index 62a91fe61..086f05143 100644 --- a/mysql-test/columnstore/basic/r/mcs12_alter_table.result +++ b/mysql-test/columnstore/basic/r/mcs12_alter_table.result @@ -114,8 +114,6 @@ new_i c i2 2 b 22 DROP TABLE t1; CREATE TABLE t1 (i INTEGER) ENGINE=Columnstore; -connect addconroot1, localhost, root,,; -connect addconroot2, localhost, root,,; connection addconroot1; SHOW CREATE TABLE mcs12_db1.t1; Table Create Table diff --git a/mysql-test/columnstore/basic/r/mcs13_alter_table_negative.result b/mysql-test/columnstore/basic/r/mcs13_alter_table_negative.result index 02d6be8fd..2ce6f1013 100644 --- a/mysql-test/columnstore/basic/r/mcs13_alter_table_negative.result +++ b/mysql-test/columnstore/basic/r/mcs13_alter_table_negative.result @@ -38,8 +38,6 @@ ALTER TABLE t1 ADD PRIMARY KEY pk(c1); ERROR 42000: Too many keys specified; max 0 keys allowed ALTER TABLE t1 DROP KEY k1; ERROR 42000: Can't DROP INDEX `k1`; check that it exists -connect addconroot1, localhost, root,,; -connect addconroot2, localhost, root,,; connection addconroot1; ALTER TABLE mcs13_db1.t1 CHANGE c1 c2 INVALIDDATATYPE; ERROR HY000: Unknown data type: 'INVALIDDATATYPE' @@ -60,3 +58,4 @@ a c1 disconnect addconroot1; disconnect addconroot2; DROP DATABASE mcs13_db1; +DROP DATABASE mcs13_db2; diff --git a/mysql-test/columnstore/basic/r/mcs14_truncate_table.result b/mysql-test/columnstore/basic/r/mcs14_truncate_table.result index 835d89b28..82b23a0d5 100644 --- a/mysql-test/columnstore/basic/r/mcs14_truncate_table.result +++ b/mysql-test/columnstore/basic/r/mcs14_truncate_table.result @@ -65,8 +65,6 @@ CREATE TABLE t1 (id INT) ENGINE=Columnstore; INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5); CREATE TABLE t2 LIKE t1; INSERT INTO t2 SELECT * FROM t1; -connect addconroot1, localhost, root,,; -connect addconroot2, localhost, root,,; connection addconroot1; TRUNCATE mcs14_db1.t1; connection addconroot2; diff --git a/mysql-test/columnstore/basic/r/mcs170_session_functions_maxscale.result b/mysql-test/columnstore/basic/r/mcs170_session_functions_maxscale.result new file mode 100644 index 000000000..18e1d00cc --- /dev/null +++ b/mysql-test/columnstore/basic/r/mcs170_session_functions_maxscale.result @@ -0,0 +1,23 @@ +SET default_storage_engine=Columnstore; +DROP DATABASE IF EXISTS mcs170_db; +CREATE DATABASE mcs170_db; +USE mcs170_db; +SELECT CONNECTION_ID() > 0; +CONNECTION_ID() > 0 +1 +SELECT CURRENT_USER(); +CURRENT_USER() +testUser@% +SELECT USER(); +USER() +testUser@max +SELECT SESSION_USER(); +SESSION_USER() +testUser@max +SELECT SYSTEM_USER(); +SYSTEM_USER() +testUser@max +SELECT DATABASE(); +DATABASE() +mcs170_db +DROP DATABASE mcs170_db; diff --git a/mysql-test/columnstore/basic/r/mcs19_grant_revoke.result b/mysql-test/columnstore/basic/r/mcs19_grant_revoke.result index b342d3a92..9a7880b83 100644 --- a/mysql-test/columnstore/basic/r/mcs19_grant_revoke.result +++ b/mysql-test/columnstore/basic/r/mcs19_grant_revoke.result @@ -23,8 +23,6 @@ SHOW GRANTS FOR 'user1'@'localhost'; Grants for user1@localhost GRANT USAGE ON *.* TO `user1`@`localhost` IDENTIFIED BY PASSWORD '*CB386B3062EFB295ED40F6A5B1A8CFE300642E38' GRANT CREATE, SELECT, INSERT ON mcs19_db.* TO 'user1'@'localhost'; -connect conn1, localhost, user1, Vagrant1|0000001,; -connect conn2, localhost, user1, Vagrant1|0000001,; connection conn1; SELECT USER(); USER() @@ -43,7 +41,7 @@ SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `col` int(11) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci +) ENGINE=InnoDB INSERT INTO t1 VALUES(1); SELECT * FROM t1; col diff --git a/mysql-test/columnstore/basic/r/mcs229_data_compression_type.result b/mysql-test/columnstore/basic/r/mcs229_data_compression_type.result index 2b54b6977..b9803b8cf 100644 --- a/mysql-test/columnstore/basic/r/mcs229_data_compression_type.result +++ b/mysql-test/columnstore/basic/r/mcs229_data_compression_type.result @@ -37,16 +37,16 @@ t2 CREATE TABLE `t2` ( `t2_DATE` date DEFAULT NULL, `t2_TIME` time DEFAULT NULL ) ENGINE=Columnstore DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci -SELECT `schema`, tablename, columnname, compressiontype FROM calpontsys.syscolumn WHERE `schema`='mcs229_db' ORDER BY 2; +SELECT `schema`, tablename, columnname, compressiontype FROM calpontsys.syscolumn WHERE `schema`='mcs229_db' ORDER BY 2,3,4; schema tablename columnname compressiontype +mcs229_db t1 t1_date 2 +mcs229_db t1 t1_decimal 2 mcs229_db t1 t1_int 2 mcs229_db t1 t1_text 2 -mcs229_db t1 t1_date 2 mcs229_db t1 t1_time 2 -mcs229_db t1 t1_decimal 2 mcs229_db t2 t2_date 2 +mcs229_db t2 t2_decimal 2 mcs229_db t2 t2_int 2 mcs229_db t2 t2_text 2 mcs229_db t2 t2_time 2 -mcs229_db t2 t2_decimal 2 DROP DATABASE mcs229_db; diff --git a/mysql-test/columnstore/basic/t/MCOL-5572-autoincrement-filtering.test b/mysql-test/columnstore/basic/t/MCOL-5572-autoincrement-filtering.test index 513d41df7..462157f6e 100644 --- a/mysql-test/columnstore/basic/t/MCOL-5572-autoincrement-filtering.test +++ b/mysql-test/columnstore/basic/t/MCOL-5572-autoincrement-filtering.test @@ -1,4 +1,12 @@ +if ($MASTER_MYPORT) +{ + # Running without --extern + --skip Only works with --extern (will work without extern when cleanup issues are fixed) +} + --source ../include/have_columnstore.inc +--source ../include/functions.inc +--source ../include/syscatalog_mysql.sql SET default_storage_engine=columnstore; diff --git a/mysql-test/columnstore/basic/t/MCOL-5744-utf8-in-ddl.test b/mysql-test/columnstore/basic/t/MCOL-5744-utf8-in-ddl.test index a8d0eb9a5..d7f83fe25 100644 --- a/mysql-test/columnstore/basic/t/MCOL-5744-utf8-in-ddl.test +++ b/mysql-test/columnstore/basic/t/MCOL-5744-utf8-in-ddl.test @@ -1,8 +1,13 @@ +--source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + --disable_warnings DROP DATABASE IF EXISTS MCOL5744; --enable_warnings +--source ../include/charset.inc CREATE DATABASE MCOL5744; +USE MCOL5744; SET old_mode=''; diff --git a/mysql-test/columnstore/basic/t/MCOL-5744-utf8-in-ddl_maxscale.test b/mysql-test/columnstore/basic/t/MCOL-5744-utf8-in-ddl_maxscale.test new file mode 100644 index 000000000..4fc349088 --- /dev/null +++ b/mysql-test/columnstore/basic/t/MCOL-5744-utf8-in-ddl_maxscale.test @@ -0,0 +1,22 @@ +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc + +--disable_warnings +DROP DATABASE IF EXISTS MCOL5744; +--enable_warnings + +CREATE DATABASE MCOL5744; + +SET old_mode=''; + +CREATE TABLE t(x text CHARACTER SET utf8 COLLATE utf8_general_ci) ENGINE=COLUMNSTORE; +SHOW CREATE TABLE t; +DROP TABLE t; + +SET old_mode='UTF8_IS_UTF8MB3'; + +CREATE TABLE t(x text CHARACTER SET utf8 COLLATE utf8_general_ci) ENGINE=COLUMNSTORE; +SHOW CREATE TABLE t; +DROP TABLE t; + +DROP DATABASE MCOL5744; diff --git a/mysql-test/columnstore/basic/t/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.opt b/mysql-test/columnstore/basic/t/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.opt new file mode 100644 index 000000000..ba0d1d133 --- /dev/null +++ b/mysql-test/columnstore/basic/t/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.opt @@ -0,0 +1,2 @@ +--skip-partition=0 +--skip-sequence=0 diff --git a/mysql-test/columnstore/basic/t/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.test b/mysql-test/columnstore/basic/t/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.test index 64ff80efa..2320e5848 100644 --- a/mysql-test/columnstore/basic/t/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.test +++ b/mysql-test/columnstore/basic/t/MCOL-5886-use-of-partitioned-tables-in-crossengine-steps.test @@ -1,11 +1,20 @@ +-- source ../include/have_columnstore.inc +--source include/have_innodb.inc --disable_warnings DROP DATABASE IF EXISTS MCOL5886; --enable_warnings CREATE DATABASE MCOL5886; USE MCOL5886; +if (!$MASTER_MYPORT) +{ + # Running with --extern + let $MASTER_MYPORT=`SELECT @@port`; +} + --exec $MCS_MCSSETCONFIG CrossEngineSupport User 'cejuser' --exec $MCS_MCSSETCONFIG CrossEngineSupport Password 'Vagrant1|0000001' +--exec $MCS_MCSSETCONFIG CrossEngineSupport Port $MASTER_MYPORT --disable_warnings CREATE USER IF NOT EXISTS'cejuser'@'localhost' IDENTIFIED BY 'Vagrant1|0000001'; @@ -21,4 +30,6 @@ CREATE TABLE IF NOT EXISTS t2 ( a DECIMAL(12, 2), b int ) ENGINE=COLUMNSTORE; SELECT COUNT(*) FROM (SELECT * FROM t1 PARTITION (p0)) tt; SELECT COUNT(*) FROM (SELECT * FROM t2 UNION ALL SELECT * FROM t1 PARTITION (p0)) tt; - +REVOKE ALL PRIVILEGES ON *.* FROM 'cejuser'@'localhost'; +DROP USER 'cejuser'@'localhost'; +DROP DATABASE MCOL5886; diff --git a/mysql-test/columnstore/basic/t/analyze_table.test b/mysql-test/columnstore/basic/t/analyze_table.test index 217b24920..a65ec3711 100644 --- a/mysql-test/columnstore/basic/t/analyze_table.test +++ b/mysql-test/columnstore/basic/t/analyze_table.test @@ -9,18 +9,18 @@ USE analyze_table_db; create table t1 (a int, b int, c int) engine=columnstore; insert into t1 values (1, 2, 3), (2, 2, 2), (2, 3, 4); -analyze table t1; +analyze table t1 PERSISTENT FOR ALL; create table t2 (a int, b double) engine=columnstore; insert into t2 values (2, 3), (3, 4); -analyze table t2; +analyze table t2 PERSISTENT FOR ALL; create table t3 (a varchar(25)) engine=columnstore; insert into t3 values ("a"), ("b"); -analyze table t3; +analyze table t3 PERSISTENT FOR ALL; -analyze table t1, t2, t3; +analyze table t1, t2, t3 PERSISTENT FOR ALL; DROP TABLE t1; DROP TABLE t2; diff --git a/mysql-test/columnstore/basic/t/cal_named_udfs.test b/mysql-test/columnstore/basic/t/cal_named_udfs.test index f127716d2..bd03af5bc 100644 --- a/mysql-test/columnstore/basic/t/cal_named_udfs.test +++ b/mysql-test/columnstore/basic/t/cal_named_udfs.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source ../include/functions.inc --disable_warnings DROP DATABASE IF EXISTS cal_test_db; @@ -23,3 +24,4 @@ select calgetsqlcount(); DROP TABLE t1; DROP DATABASE cal_test_db; +--source ../include/drop_functions.inc diff --git a/mysql-test/columnstore/basic/t/ctype_cmp_char1_latin1_swedish_ci.test b/mysql-test/columnstore/basic/t/ctype_cmp_char1_latin1_swedish_ci.test index 01d1ca583..b81d5cd7e 100644 --- a/mysql-test/columnstore/basic/t/ctype_cmp_char1_latin1_swedish_ci.test +++ b/mysql-test/columnstore/basic/t/ctype_cmp_char1_latin1_swedish_ci.test @@ -1,4 +1,5 @@ --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --source ctype_cmp_combinations.inc --source ctype_cmp_create.inc diff --git a/mysql-test/columnstore/basic/t/func_json_quote.test b/mysql-test/columnstore/basic/t/func_json_quote.test index cf08dae8e..8f87df9f4 100644 --- a/mysql-test/columnstore/basic/t/func_json_quote.test +++ b/mysql-test/columnstore/basic/t/func_json_quote.test @@ -1,4 +1,6 @@ --source ../include/have_columnstore.inc +--source ../include/charset.inc + --disable_warnings DROP DATABASE IF EXISTS json_quote_db; diff --git a/mysql-test/columnstore/basic/t/func_sec_to_time.test b/mysql-test/columnstore/basic/t/func_sec_to_time.test index e9524a639..e51506658 100644 --- a/mysql-test/columnstore/basic/t/func_sec_to_time.test +++ b/mysql-test/columnstore/basic/t/func_sec_to_time.test @@ -1,4 +1,5 @@ --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --source ../include/combinations.myisam-columnstore.inc --echo # diff --git a/mysql-test/columnstore/basic/t/mcol-5005.test b/mysql-test/columnstore/basic/t/mcol-5005.test index 1cbca1eb1..fde196e9f 100644 --- a/mysql-test/columnstore/basic/t/mcol-5005.test +++ b/mysql-test/columnstore/basic/t/mcol-5005.test @@ -4,6 +4,7 @@ # --source ../include/have_columnstore.inc --source include/have_innodb.inc +--source ../include/charset.inc # # If the calpontsys database does not exist, let's create it. @@ -52,7 +53,8 @@ SHOW CREATE TABLE t3; SHOW CREATE TABLE t4; SELECT `schema`, tablename, columnname, charsetnum FROM calpontsys.syscolumn -WHERE `schema`='mcol5005' AND tablename in ('t1', 't2', 't3', 't4'); +WHERE `schema`='mcol5005' AND tablename in ('t1', 't2', 't3', 't4') +ORDER BY tablename, columnname, charsetnum; DROP DATABASE mcol5005; diff --git a/mysql-test/columnstore/basic/t/mcol641-aggregate.test b/mysql-test/columnstore/basic/t/mcol641-aggregate.test index fb0203088..642287152 100644 --- a/mysql-test/columnstore/basic/t/mcol641-aggregate.test +++ b/mysql-test/columnstore/basic/t/mcol641-aggregate.test @@ -221,3 +221,4 @@ DROP TABLE cs2; DROP TABLE cs3; DROP TABLE cs4; DROP TABLE cs5; +DROP DATABASE test_mcol641_aggregate; diff --git a/mysql-test/columnstore/basic/t/mcol641-create.test b/mysql-test/columnstore/basic/t/mcol641-create.test index 89b6c1f25..ee1f23e35 100644 --- a/mysql-test/columnstore/basic/t/mcol641-create.test +++ b/mysql-test/columnstore/basic/t/mcol641-create.test @@ -19,7 +19,17 @@ CREATE TABLE cs2(d1 DECIMAL(38) SIGNED, d2 DECIMAL(38,10) SIGNED, d3 DECIMAL(38, #This must raise a warning CREATE TABLE cs3(d1 DECIMAL(38) UNSIGNED ZEROFILL, d2 DECIMAL(38,10) UNSIGNED ZEROFILL, d3 DECIMAL(38,38) UNSIGNED ZEROFILL) ENGINE=columnstore; CREATE TABLE cs4(d1 DECIMAL(18), d2 DECIMAL(18,10), d3 DECIMAL(18,18)) ENGINE=columnstore; -SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_name = 'cs1' OR table_name = 'cs2' OR table_name = 'cs3' OR table_name = 'cs4' ORDER BY table_name,column_name ASC; +SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_name = 'cs1' OR table_name = 'cs2' OR table_name = 'cs3' OR table_name = 'cs4' +ORDER BY +TABLE_SCHEMA, +TABLE_NAME, +COLUMN_NAME, +DATA_TYPE, +COLUMN_LENGTH, +COLUMN_POSITION, +COLUMN_DEFAULT, +NUMERIC_PRECISION, +NUMERIC_SCALE; ALTER TABLE cs1 DROP COLUMN d4; ALTER TABLE cs1 ADD COLUMN d7 DECIMAL(38,37); @@ -34,7 +44,17 @@ ALTER TABLE cs2 ADD COLUMN (d5 DECIMAL(38,5), d6 DECIMAL(35,15)); # Bug. This must work fine. --error 1815 ALTER TABLE cs3 MODIFY d1 DECIMAL(38) SIGNED; -SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_schema = 'test_mcol641_create' ORDER BY table_name,column_name ASC; +SELECT TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_LENGTH,COLUMN_POSITION,COLUMN_DEFAULT,NUMERIC_PRECISION,NUMERIC_SCALE FROM information_schema.columnstore_columns WHERE table_schema = 'test_mcol641_create' +ORDER BY +TABLE_SCHEMA, +TABLE_NAME, +COLUMN_NAME, +DATA_TYPE, +COLUMN_LENGTH, +COLUMN_POSITION, +COLUMN_DEFAULT, +NUMERIC_PRECISION, +NUMERIC_SCALE; # This must return an error --error 1815 diff --git a/mysql-test/columnstore/basic/t/mcol641-insert.opt b/mysql-test/columnstore/basic/t/mcol641-insert.opt new file mode 100644 index 000000000..0b781d76f --- /dev/null +++ b/mysql-test/columnstore/basic/t/mcol641-insert.opt @@ -0,0 +1 @@ +--secure-file-priv='' diff --git a/mysql-test/columnstore/basic/t/mcol641-insert.test b/mysql-test/columnstore/basic/t/mcol641-insert.test index 7b6aae841..d9f51526a 100644 --- a/mysql-test/columnstore/basic/t/mcol641-insert.test +++ b/mysql-test/columnstore/basic/t/mcol641-insert.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcol641_insert_db; diff --git a/mysql-test/columnstore/basic/t/mcol_2000.test b/mysql-test/columnstore/basic/t/mcol_2000.test index 42e9c5e0e..5dc47ad55 100644 --- a/mysql-test/columnstore/basic/t/mcol_2000.test +++ b/mysql-test/columnstore/basic/t/mcol_2000.test @@ -4,6 +4,7 @@ -- source ../include/have_columnstore.inc -- source include/have_innodb.inc +--source ../include/charset.inc -- disable_warnings drop database if exists test_mcol2000; diff --git a/mysql-test/columnstore/basic/t/mcs102_ldi_transform_csv.test b/mysql-test/columnstore/basic/t/mcs102_ldi_transform_csv.test index 1490893e8..0772e48c1 100755 --- a/mysql-test/columnstore/basic/t/mcs102_ldi_transform_csv.test +++ b/mysql-test/columnstore/basic/t/mcs102_ldi_transform_csv.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR= `SELECT @@datadir`; diff --git a/mysql-test/columnstore/basic/t/mcs103_ldi_fields_enclosed_by.test b/mysql-test/columnstore/basic/t/mcs103_ldi_fields_enclosed_by.test index 81ddf530d..6fc5f1ac6 100755 --- a/mysql-test/columnstore/basic/t/mcs103_ldi_fields_enclosed_by.test +++ b/mysql-test/columnstore/basic/t/mcs103_ldi_fields_enclosed_by.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR= `SELECT @@datadir`; diff --git a/mysql-test/columnstore/basic/t/mcs104_ldi_fields_escaped_by.test b/mysql-test/columnstore/basic/t/mcs104_ldi_fields_escaped_by.test index fbaff61f2..75f0769b8 100755 --- a/mysql-test/columnstore/basic/t/mcs104_ldi_fields_escaped_by.test +++ b/mysql-test/columnstore/basic/t/mcs104_ldi_fields_escaped_by.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR= `SELECT @@datadir`; diff --git a/mysql-test/columnstore/basic/t/mcs105_ldi_lines_terminated_by.test b/mysql-test/columnstore/basic/t/mcs105_ldi_lines_terminated_by.test index cd0b4c9af..1a4b9c61d 100755 --- a/mysql-test/columnstore/basic/t/mcs105_ldi_lines_terminated_by.test +++ b/mysql-test/columnstore/basic/t/mcs105_ldi_lines_terminated_by.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR= `SELECT @@datadir`; diff --git a/mysql-test/columnstore/basic/t/mcs106_ldi_ignore_rows.test b/mysql-test/columnstore/basic/t/mcs106_ldi_ignore_rows.test index 79d799558..ee984177e 100755 --- a/mysql-test/columnstore/basic/t/mcs106_ldi_ignore_rows.test +++ b/mysql-test/columnstore/basic/t/mcs106_ldi_ignore_rows.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR= `SELECT @@datadir`; diff --git a/mysql-test/columnstore/basic/t/mcs10_drop_db_table.test b/mysql-test/columnstore/basic/t/mcs10_drop_db_table.test index 2699ead99..8cc8c15f3 100644 --- a/mysql-test/columnstore/basic/t/mcs10_drop_db_table.test +++ b/mysql-test/columnstore/basic/t/mcs10_drop_db_table.test @@ -3,6 +3,8 @@ # -- source ../include/have_columnstore.inc -- source include/have_innodb.inc +-- source ../include/check_maxscale.inc + --disable_warnings DROP DATABASE IF EXISTS mcs10_db1; @@ -68,8 +70,18 @@ DROP TABLE IF EXISTS mcs10_db2.t_columnstore1; USE mcs10_db1; CREATE TABLE t_columnstore1 (id int) engine=columnstore; CREATE TABLE t_columnstore2 (id int) engine=columnstore; -connect (addconroot1, localhost, root,,); -connect (addconroot2, localhost, root,,); +--disable_query_log +if ($maxscale == 1) +{ + connect(addconroot1, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); + connect(addconroot2, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); +} +if ($maxscale == 0) +{ + connect (addconroot1, localhost, root,,); + connect (addconroot2, localhost, root,,); +} +--enable_query_log connection addconroot1; DROP TABLE mcs10_db1.t_columnstore1; connection addconroot2; diff --git a/mysql-test/columnstore/basic/t/mcs114_comments.test b/mysql-test/columnstore/basic/t/mcs114_comments.test index ad7406d16..8e4e1fe9c 100644 --- a/mysql-test/columnstore/basic/t/mcs114_comments.test +++ b/mysql-test/columnstore/basic/t/mcs114_comments.test @@ -2,6 +2,7 @@ # Test comments # Author: Bharath, bharath.bokka@mariadb.com # +--source ../include/only_10.6.inc -- source ../include/have_columnstore.inc --disable_warnings diff --git a/mysql-test/columnstore/basic/t/mcs117_create_utf8.test b/mysql-test/columnstore/basic/t/mcs117_create_utf8.test index 6b40b3b61..3f7894408 100644 --- a/mysql-test/columnstore/basic/t/mcs117_create_utf8.test +++ b/mysql-test/columnstore/basic/t/mcs117_create_utf8.test @@ -3,6 +3,8 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +-- source ../include/detect_maxscale.inc +--source ../include/charset.inc set names utf8; diff --git a/mysql-test/columnstore/basic/t/mcs117_create_utf8_maxscale.test b/mysql-test/columnstore/basic/t/mcs117_create_utf8_maxscale.test new file mode 100644 index 000000000..b04312d38 --- /dev/null +++ b/mysql-test/columnstore/basic/t/mcs117_create_utf8_maxscale.test @@ -0,0 +1,44 @@ +# +# Test UTF8 names +# Author: Bharath, bharath.bokka@mariadb.com +# +-- source ../include/have_columnstore.inc +-- source ../include/detect_no_maxscale.inc + +set names utf8; + +--disable_warnings +DROP DATABASE IF EXISTS mcs117_db; +--enable_warnings + +CREATE DATABASE имя_базы_в_кодировке_утф8_длиной_больше_чем_45; +USE имя_базы_в_кодировке_утф8_длиной_больше_чем_45; +SELECT DATABASE(); + +CREATE DATABASE mcs117_db; +USE mcs117_db; + +SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.schemata +WHERE schema_name='имя_базы_в_кодировке_утф8_длиной_больше_чем_45'; + +DROP DATABASE имя_базы_в_кодировке_утф8_длиной_больше_чем_45; + +CREATE TABLE имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 +( + имя_поля_в_кодировке_утф8_длиной_больше_чем_45 INT +)ENGINE=Columnstore; + +--replace_regex /( COLLATE=latin1_swedish_ci)// +SHOW CREATE TABLE имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48; + +CREATE VIEW имя_вью_кодировке_утф8_длиной_больше_чем_42 AS SELECT * FROM имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48; +SHOW CREATE VIEW имя_вью_кодировке_утф8_длиной_больше_чем_42; + +select TABLE_NAME from information_schema.tables where table_schema='mcs117_db' order by 1; + +select COLUMN_NAME from information_schema.columns where table_schema='mcs117_db' order by 1; + +select TABLE_NAME from information_schema.views where table_schema='mcs117_db' order by 1; + +# Clean UP +DROP DATABASE mcs117_db; diff --git a/mysql-test/columnstore/basic/t/mcs11_show_db_table.test b/mysql-test/columnstore/basic/t/mcs11_show_db_table.test index 3d7fb8756..c0948a830 100644 --- a/mysql-test/columnstore/basic/t/mcs11_show_db_table.test +++ b/mysql-test/columnstore/basic/t/mcs11_show_db_table.test @@ -1,8 +1,12 @@ # #This test verifies show databases and tables with engine=columnstore. # +--source ../include/disable_11.4.inc -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc -- source include/have_innodb.inc +-- source ../include/check_maxscale.inc + --disable_warnings DROP DATABASE IF EXISTS mcs11_db1; @@ -41,8 +45,18 @@ SHOW TABLES; SHOW TABLES IN mcs11_db2; # Test from parallel connections -connect (addconroot1, localhost, root,,); -connect (addconroot2, localhost, root,,); +--disable_query_log +if ($maxscale == 1) +{ + connect(addconroot1, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); + connect(addconroot2, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); +} +if ($maxscale == 0) +{ + connect (addconroot1, localhost, root,,); + connect (addconroot2, localhost, root,,); +} +--enable_query_log connection addconroot1; --sorted_result SHOW DATABASES LIKE 'mcs11%'; diff --git a/mysql-test/columnstore/basic/t/mcs12_alter_table.test b/mysql-test/columnstore/basic/t/mcs12_alter_table.test index f1f67b5f8..dd8dda7fa 100644 --- a/mysql-test/columnstore/basic/t/mcs12_alter_table.test +++ b/mysql-test/columnstore/basic/t/mcs12_alter_table.test @@ -1,8 +1,11 @@ # # Test ALTER TABLE schemas in various possible ways. # +--source ../include/disable_11.4.inc -- source ../include/have_columnstore.inc -- source include/have_innodb.inc +-- source ../include/check_maxscale.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs12_db1; @@ -67,8 +70,18 @@ DROP TABLE t1; CREATE TABLE t1 (i INTEGER) ENGINE=Columnstore; # Test from parallel connections -connect (addconroot1, localhost, root,,); -connect (addconroot2, localhost, root,,); +--disable_query_log +if ($maxscale == 1) +{ + connect(addconroot1, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); + connect(addconroot2, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); +} +if ($maxscale == 0) +{ + connect (addconroot1, localhost, root,,); + connect (addconroot2, localhost, root,,); +} +--enable_query_log connection addconroot1; --replace_regex /( COLLATE=latin1_swedish_ci)// SHOW CREATE TABLE mcs12_db1.t1; diff --git a/mysql-test/columnstore/basic/t/mcs13_alter_table_negative.test b/mysql-test/columnstore/basic/t/mcs13_alter_table_negative.test index 436fd6535..52d08f77c 100644 --- a/mysql-test/columnstore/basic/t/mcs13_alter_table_negative.test +++ b/mysql-test/columnstore/basic/t/mcs13_alter_table_negative.test @@ -2,6 +2,8 @@ # Test ALTER TABLE schemas in various negative scenarios. # -- source ../include/have_columnstore.inc +-- source ../include/check_maxscale.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs13_db1; @@ -54,8 +56,18 @@ ALTER TABLE t1 ADD PRIMARY KEY pk(c1); ALTER TABLE t1 DROP KEY k1; # Test from parallel connections -connect (addconroot1, localhost, root,,); -connect (addconroot2, localhost, root,,); +--disable_query_log +if ($maxscale == 1) +{ + connect(addconroot1, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); + connect(addconroot2, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); +} +if ($maxscale == 0) +{ + connect (addconroot1, localhost, root,,); + connect (addconroot2, localhost, root,,); +} +--enable_query_log connection addconroot1; --error 4161 ALTER TABLE mcs13_db1.t1 CHANGE c1 c2 INVALIDDATATYPE; @@ -71,6 +83,7 @@ disconnect addconroot2; --disable_warnings DROP DATABASE mcs13_db1; +DROP DATABASE mcs13_db2; --enable_warnings # diff --git a/mysql-test/columnstore/basic/t/mcs14_truncate_table.test b/mysql-test/columnstore/basic/t/mcs14_truncate_table.test index ad143d68d..58903bf7f 100644 --- a/mysql-test/columnstore/basic/t/mcs14_truncate_table.test +++ b/mysql-test/columnstore/basic/t/mcs14_truncate_table.test @@ -3,6 +3,8 @@ # -- source ../include/have_columnstore.inc -- source include/have_innodb.inc +-- source ../include/check_maxscale.inc + --disable_warnings DROP DATABASE IF EXISTS mcs14_db1; @@ -68,8 +70,18 @@ CREATE TABLE t2 LIKE t1; INSERT INTO t2 SELECT * FROM t1; # Test from parallel connections -connect (addconroot1, localhost, root,,); -connect (addconroot2, localhost, root,,); +--disable_query_log +if ($maxscale == 1) +{ + connect(addconroot1, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); + connect(addconroot2, 127.0.0.1, testUser, 'ct570c3521fCCR#ef',,4006); +} +if ($maxscale == 0) +{ + connect (addconroot1, localhost, root,,); + connect (addconroot2, localhost, root,,); +} +--enable_query_log connection addconroot1; TRUNCATE mcs14_db1.t1; connection addconroot2; diff --git a/mysql-test/columnstore/basic/t/mcs169_bin_functions.test b/mysql-test/columnstore/basic/t/mcs169_bin_functions.test index e8722e85f..7c10c3ace 100644 --- a/mysql-test/columnstore/basic/t/mcs169_bin_functions.test +++ b/mysql-test/columnstore/basic/t/mcs169_bin_functions.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs169_db; diff --git a/mysql-test/columnstore/basic/t/mcs170_session_functions.test b/mysql-test/columnstore/basic/t/mcs170_session_functions.test index 210f172bb..27bd33471 100644 --- a/mysql-test/columnstore/basic/t/mcs170_session_functions.test +++ b/mysql-test/columnstore/basic/t/mcs170_session_functions.test @@ -3,6 +3,8 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + SET default_storage_engine=Columnstore; diff --git a/mysql-test/columnstore/basic/t/mcs170_session_functions_maxscale.test b/mysql-test/columnstore/basic/t/mcs170_session_functions_maxscale.test new file mode 100644 index 000000000..dbf198748 --- /dev/null +++ b/mysql-test/columnstore/basic/t/mcs170_session_functions_maxscale.test @@ -0,0 +1,26 @@ +# +# Test Session functions +# Author: Bharath, bharath.bokka@mariadb.com +# +-- source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc + + +SET default_storage_engine=Columnstore; + +--disable_warnings +DROP DATABASE IF EXISTS mcs170_db; +--enable_warnings + +CREATE DATABASE mcs170_db; +USE mcs170_db; + +SELECT CONNECTION_ID() > 0; +SELECT CURRENT_USER(); +SELECT USER(); +SELECT SESSION_USER(); +SELECT SYSTEM_USER(); +SELECT DATABASE(); + +# Clean UP +DROP DATABASE mcs170_db; diff --git a/mysql-test/columnstore/basic/t/mcs171_null_functions.test b/mysql-test/columnstore/basic/t/mcs171_null_functions.test index 6f814dd36..997678a13 100644 --- a/mysql-test/columnstore/basic/t/mcs171_null_functions.test +++ b/mysql-test/columnstore/basic/t/mcs171_null_functions.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs171_db; diff --git a/mysql-test/columnstore/basic/t/mcs173_coalesce_function.test b/mysql-test/columnstore/basic/t/mcs173_coalesce_function.test index 8a8df2c0e..424d447ea 100644 --- a/mysql-test/columnstore/basic/t/mcs173_coalesce_function.test +++ b/mysql-test/columnstore/basic/t/mcs173_coalesce_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs173_db; diff --git a/mysql-test/columnstore/basic/t/mcs174_case_function.test b/mysql-test/columnstore/basic/t/mcs174_case_function.test index 72afc4e7c..774461e89 100644 --- a/mysql-test/columnstore/basic/t/mcs174_case_function.test +++ b/mysql-test/columnstore/basic/t/mcs174_case_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs174_db; diff --git a/mysql-test/columnstore/basic/t/mcs175_convert_functions.test b/mysql-test/columnstore/basic/t/mcs175_convert_functions.test index f6e7c34c5..8d2830532 100644 --- a/mysql-test/columnstore/basic/t/mcs175_convert_functions.test +++ b/mysql-test/columnstore/basic/t/mcs175_convert_functions.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs175_db; diff --git a/mysql-test/columnstore/basic/t/mcs176_if_function.test b/mysql-test/columnstore/basic/t/mcs176_if_function.test index 6add1bffe..1889804dc 100644 --- a/mysql-test/columnstore/basic/t/mcs176_if_function.test +++ b/mysql-test/columnstore/basic/t/mcs176_if_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs176_db; diff --git a/mysql-test/columnstore/basic/t/mcs178_adddate_function.test b/mysql-test/columnstore/basic/t/mcs178_adddate_function.test index 71d278b50..d788f9bbb 100644 --- a/mysql-test/columnstore/basic/t/mcs178_adddate_function.test +++ b/mysql-test/columnstore/basic/t/mcs178_adddate_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs178_db; diff --git a/mysql-test/columnstore/basic/t/mcs179_addtime_function.test b/mysql-test/columnstore/basic/t/mcs179_addtime_function.test index 9fa1372b7..4081c3d98 100644 --- a/mysql-test/columnstore/basic/t/mcs179_addtime_function.test +++ b/mysql-test/columnstore/basic/t/mcs179_addtime_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs179_db; diff --git a/mysql-test/columnstore/basic/t/mcs180_ascii_function.test b/mysql-test/columnstore/basic/t/mcs180_ascii_function.test index b39ad622c..2904cd22e 100644 --- a/mysql-test/columnstore/basic/t/mcs180_ascii_function.test +++ b/mysql-test/columnstore/basic/t/mcs180_ascii_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs180_db; diff --git a/mysql-test/columnstore/basic/t/mcs181_between_and.test b/mysql-test/columnstore/basic/t/mcs181_between_and.test index a11282789..6a949a261 100644 --- a/mysql-test/columnstore/basic/t/mcs181_between_and.test +++ b/mysql-test/columnstore/basic/t/mcs181_between_and.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs181_db; diff --git a/mysql-test/columnstore/basic/t/mcs182_char_length_function.test b/mysql-test/columnstore/basic/t/mcs182_char_length_function.test index b46523fe8..a1de4382e 100644 --- a/mysql-test/columnstore/basic/t/mcs182_char_length_function.test +++ b/mysql-test/columnstore/basic/t/mcs182_char_length_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs182_db; diff --git a/mysql-test/columnstore/basic/t/mcs183_date_function.test b/mysql-test/columnstore/basic/t/mcs183_date_function.test index 322ffdc29..1a937f4c2 100644 --- a/mysql-test/columnstore/basic/t/mcs183_date_function.test +++ b/mysql-test/columnstore/basic/t/mcs183_date_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs183_db; diff --git a/mysql-test/columnstore/basic/t/mcs184_day_function.test b/mysql-test/columnstore/basic/t/mcs184_day_function.test index 74fcd3837..d23b3d4ea 100644 --- a/mysql-test/columnstore/basic/t/mcs184_day_function.test +++ b/mysql-test/columnstore/basic/t/mcs184_day_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs184_db; diff --git a/mysql-test/columnstore/basic/t/mcs185_dayname_function.test b/mysql-test/columnstore/basic/t/mcs185_dayname_function.test index 65f8bcbbb..4c0a61314 100644 --- a/mysql-test/columnstore/basic/t/mcs185_dayname_function.test +++ b/mysql-test/columnstore/basic/t/mcs185_dayname_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs185_db; diff --git a/mysql-test/columnstore/basic/t/mcs186_dayofyear_function.test b/mysql-test/columnstore/basic/t/mcs186_dayofyear_function.test index 9e0b2c274..afa475c38 100644 --- a/mysql-test/columnstore/basic/t/mcs186_dayofyear_function.test +++ b/mysql-test/columnstore/basic/t/mcs186_dayofyear_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs186_db; diff --git a/mysql-test/columnstore/basic/t/mcs187_dayofmonth_function.test b/mysql-test/columnstore/basic/t/mcs187_dayofmonth_function.test index bcd51b27a..4686b7480 100644 --- a/mysql-test/columnstore/basic/t/mcs187_dayofmonth_function.test +++ b/mysql-test/columnstore/basic/t/mcs187_dayofmonth_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs187_db; diff --git a/mysql-test/columnstore/basic/t/mcs19_grant_revoke.test b/mysql-test/columnstore/basic/t/mcs19_grant_revoke.test index 8ad56181c..4ae71180d 100644 --- a/mysql-test/columnstore/basic/t/mcs19_grant_revoke.test +++ b/mysql-test/columnstore/basic/t/mcs19_grant_revoke.test @@ -4,6 +4,8 @@ # -- source ../include/have_columnstore.inc -- source include/have_innodb.inc +-- source ../include/check_maxscale.inc +--source ../include/charset.inc SET default_storage_engine=InnoDB; @@ -29,10 +31,17 @@ GRANT CREATE, SELECT, INSERT ON mcs19_db.* TO 'user1'@'localhost'; --disable_query_log GRANT ALL ON test.* TO 'user1'@'localhost'; +if ($maxscale == 1) +{ + connect(conn1, 127.0.0.1, user1, Vagrant1|0000001,,4006); + connect(conn2, 127.0.0.1, user1, Vagrant1|0000001,,4006); +} +if ($maxscale == 0) +{ + connect(conn1, localhost, user1, Vagrant1|0000001,); + connect(conn2, localhost, user1, Vagrant1|0000001,); +} --enable_query_log -connect(conn1, localhost, user1, Vagrant1|0000001,); -connect(conn2, localhost, user1, Vagrant1|0000001,); - connection conn1; SELECT USER(); SHOW GRANTS FOR 'user1'@'localhost'; @@ -41,7 +50,7 @@ USE mcs19_db; --error ER_DBACCESS_DENIED_ERROR CREATE DATABASE mcs19_db1; CREATE TABLE t1(col INT) ENGINE=InnoDB; ---replace_regex /( COLLATE=latin1_swedish_ci)// +--replace_regex /(\ DEFAULT CHARSET(.*))// SHOW CREATE TABLE t1; INSERT INTO t1 VALUES(1); SELECT * FROM t1; diff --git a/mysql-test/columnstore/basic/t/mcs1_create_table_data_types.test b/mysql-test/columnstore/basic/t/mcs1_create_table_data_types.test index e0e630333..167c65d8f 100644 --- a/mysql-test/columnstore/basic/t/mcs1_create_table_data_types.test +++ b/mysql-test/columnstore/basic/t/mcs1_create_table_data_types.test @@ -2,7 +2,9 @@ # Test CREATE TABLE with all data types supported in Columnstore # Author: Bharath, bharath.bokka@mariadb.com # +--source ../include/disable_11.4.inc -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs1_db; diff --git a/mysql-test/columnstore/basic/t/mcs211_idbExtentId_function.test b/mysql-test/columnstore/basic/t/mcs211_idbExtentId_function.test index 09b676e30..97d4d5a3f 100644 --- a/mysql-test/columnstore/basic/t/mcs211_idbExtentId_function.test +++ b/mysql-test/columnstore/basic/t/mcs211_idbExtentId_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs211_db; diff --git a/mysql-test/columnstore/basic/t/mcs212_idbExtentMax_function.test b/mysql-test/columnstore/basic/t/mcs212_idbExtentMax_function.test index af0e28b59..ed1d6d85c 100644 --- a/mysql-test/columnstore/basic/t/mcs212_idbExtentMax_function.test +++ b/mysql-test/columnstore/basic/t/mcs212_idbExtentMax_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs212_db; diff --git a/mysql-test/columnstore/basic/t/mcs213_idbExtentMin_function.test b/mysql-test/columnstore/basic/t/mcs213_idbExtentMin_function.test index 6f19f7c3e..fefccb568 100644 --- a/mysql-test/columnstore/basic/t/mcs213_idbExtentMin_function.test +++ b/mysql-test/columnstore/basic/t/mcs213_idbExtentMin_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs213_db; diff --git a/mysql-test/columnstore/basic/t/mcs216_idbSegmentDir_function.test b/mysql-test/columnstore/basic/t/mcs216_idbSegmentDir_function.test index ec3a48419..303deafc8 100644 --- a/mysql-test/columnstore/basic/t/mcs216_idbSegmentDir_function.test +++ b/mysql-test/columnstore/basic/t/mcs216_idbSegmentDir_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs216_db; diff --git a/mysql-test/columnstore/basic/t/mcs229_data_compression_type.test b/mysql-test/columnstore/basic/t/mcs229_data_compression_type.test index b3af73432..8e4e60ff3 100644 --- a/mysql-test/columnstore/basic/t/mcs229_data_compression_type.test +++ b/mysql-test/columnstore/basic/t/mcs229_data_compression_type.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc # # If the calpontsys database does not exist, let's create it. @@ -49,7 +50,7 @@ CREATE TABLE t2 --replace_regex /( COLLATE=latin1_swedish_ci)// SHOW CREATE TABLE t2; -SELECT `schema`, tablename, columnname, compressiontype FROM calpontsys.syscolumn WHERE `schema`='mcs229_db' ORDER BY 2; +SELECT `schema`, tablename, columnname, compressiontype FROM calpontsys.syscolumn WHERE `schema`='mcs229_db' ORDER BY 2,3,4; # Clean UP DROP DATABASE mcs229_db; diff --git a/mysql-test/columnstore/basic/t/mcs22_insert_ignore.test b/mysql-test/columnstore/basic/t/mcs22_insert_ignore.test index b0120cf5e..8e15e1b6f 100644 --- a/mysql-test/columnstore/basic/t/mcs22_insert_ignore.test +++ b/mysql-test/columnstore/basic/t/mcs22_insert_ignore.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # -- source ../include/have_columnstore.inc +--source include/have_innodb.inc --disable_warnings DROP DATABASE IF EXISTS mcs22_db; diff --git a/mysql-test/columnstore/basic/t/mcs271_substring_index_function.test b/mysql-test/columnstore/basic/t/mcs271_substring_index_function.test index 9ae4e0409..478b73def 100644 --- a/mysql-test/columnstore/basic/t/mcs271_substring_index_function.test +++ b/mysql-test/columnstore/basic/t/mcs271_substring_index_function.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs271_db; diff --git a/mysql-test/columnstore/basic/t/mcs28_load_data_local_infile.test b/mysql-test/columnstore/basic/t/mcs28_load_data_local_infile.test index ff994d78c..6ab41785a 100755 --- a/mysql-test/columnstore/basic/t/mcs28_load_data_local_infile.test +++ b/mysql-test/columnstore/basic/t/mcs28_load_data_local_infile.test @@ -3,6 +3,8 @@ # Author: Susil, susil.behera@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs28_db1; diff --git a/mysql-test/columnstore/basic/t/mcs29_load_data_local_infile_negative.test b/mysql-test/columnstore/basic/t/mcs29_load_data_local_infile_negative.test index 3923f74b9..514c5fc76 100755 --- a/mysql-test/columnstore/basic/t/mcs29_load_data_local_infile_negative.test +++ b/mysql-test/columnstore/basic/t/mcs29_load_data_local_infile_negative.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs29_db1; diff --git a/mysql-test/columnstore/basic/t/mcs45_write_crossengine_join.test b/mysql-test/columnstore/basic/t/mcs45_write_crossengine_join.test index 2ebaadbc9..f3ab5ec94 100644 --- a/mysql-test/columnstore/basic/t/mcs45_write_crossengine_join.test +++ b/mysql-test/columnstore/basic/t/mcs45_write_crossengine_join.test @@ -2,6 +2,7 @@ # Update and Delete using Cross engine join # Author: Bharath, bharath.bokka@mariadb.com # +--source ../include/disable_11.4.inc -- source include/have_innodb.inc -- source ../include/have_columnstore.inc diff --git a/mysql-test/columnstore/basic/t/mcs47_cpimport_central_loc_sin_source.test b/mysql-test/columnstore/basic/t/mcs47_cpimport_central_loc_sin_source.test index 613dfb88b..e31f97e7c 100644 --- a/mysql-test/columnstore/basic/t/mcs47_cpimport_central_loc_sin_source.test +++ b/mysql-test/columnstore/basic/t/mcs47_cpimport_central_loc_sin_source.test @@ -8,6 +8,7 @@ if (!$MYSQL_TEST_ROOT){ } -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs47_db; diff --git a/mysql-test/columnstore/basic/t/mcs50_cpimport_stdin.test b/mysql-test/columnstore/basic/t/mcs50_cpimport_stdin.test index adb9d3b3b..4f22be8e6 100644 --- a/mysql-test/columnstore/basic/t/mcs50_cpimport_stdin.test +++ b/mysql-test/columnstore/basic/t/mcs50_cpimport_stdin.test @@ -8,6 +8,7 @@ if (!$MYSQL_TEST_ROOT){ } -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs50_db; diff --git a/mysql-test/columnstore/basic/t/mcs51_cpimport_select_from.test b/mysql-test/columnstore/basic/t/mcs51_cpimport_select_from.test index 00ba6ce8d..84d70a107 100644 --- a/mysql-test/columnstore/basic/t/mcs51_cpimport_select_from.test +++ b/mysql-test/columnstore/basic/t/mcs51_cpimport_select_from.test @@ -8,6 +8,7 @@ if (!$MYSQL_TEST_ROOT){ } -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc -- source include/have_innodb.inc --disable_warnings diff --git a/mysql-test/columnstore/basic/t/mcs55_cpimport_binary_source.test b/mysql-test/columnstore/basic/t/mcs55_cpimport_binary_source.test index 993e0fdba..aa5f7e978 100644 --- a/mysql-test/columnstore/basic/t/mcs55_cpimport_binary_source.test +++ b/mysql-test/columnstore/basic/t/mcs55_cpimport_binary_source.test @@ -8,6 +8,7 @@ if (!$MYSQL_TEST_ROOT){ } -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs55_db; diff --git a/mysql-test/columnstore/basic/t/mcs5_create_table_from_other_tables.test b/mysql-test/columnstore/basic/t/mcs5_create_table_from_other_tables.test index c08c3aed3..acf966a28 100644 --- a/mysql-test/columnstore/basic/t/mcs5_create_table_from_other_tables.test +++ b/mysql-test/columnstore/basic/t/mcs5_create_table_from_other_tables.test @@ -3,6 +3,7 @@ # -- source ../include/have_columnstore.inc -- source include/have_innodb.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs5_db; diff --git a/mysql-test/columnstore/basic/t/mcs67_ldi_datafile_separators.test b/mysql-test/columnstore/basic/t/mcs67_ldi_datafile_separators.test index ff4bef139..23ac68456 100644 --- a/mysql-test/columnstore/basic/t/mcs67_ldi_datafile_separators.test +++ b/mysql-test/columnstore/basic/t/mcs67_ldi_datafile_separators.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs67_db; diff --git a/mysql-test/columnstore/basic/t/mcs68_cpimport_datafile_separators.test b/mysql-test/columnstore/basic/t/mcs68_cpimport_datafile_separators.test index 907f09014..e22913d11 100644 --- a/mysql-test/columnstore/basic/t/mcs68_cpimport_datafile_separators.test +++ b/mysql-test/columnstore/basic/t/mcs68_cpimport_datafile_separators.test @@ -8,6 +8,7 @@ if (!$MYSQL_TEST_ROOT){ } -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS mcs68_db; diff --git a/mysql-test/columnstore/basic/t/mcs74_check_constraint.test b/mysql-test/columnstore/basic/t/mcs74_check_constraint.test index f1620cdc2..e25e9cf5c 100644 --- a/mysql-test/columnstore/basic/t/mcs74_check_constraint.test +++ b/mysql-test/columnstore/basic/t/mcs74_check_constraint.test @@ -3,6 +3,7 @@ # Author: Bharath, bharath.bokka@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs74_db; diff --git a/mysql-test/columnstore/basic/t/mcs7_create_table_with_metadata.test b/mysql-test/columnstore/basic/t/mcs7_create_table_with_metadata.test index dabd48eb0..3e511991a 100644 --- a/mysql-test/columnstore/basic/t/mcs7_create_table_with_metadata.test +++ b/mysql-test/columnstore/basic/t/mcs7_create_table_with_metadata.test @@ -2,6 +2,7 @@ #Test CREATE TABLE with metadata # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs7_db; diff --git a/mysql-test/columnstore/basic/t/mcs88_import_export_csv.test b/mysql-test/columnstore/basic/t/mcs88_import_export_csv.test index 2c0ba7c26..daeaf4bbb 100644 --- a/mysql-test/columnstore/basic/t/mcs88_import_export_csv.test +++ b/mysql-test/columnstore/basic/t/mcs88_import_export_csv.test @@ -3,6 +3,7 @@ # Author: Susil, susil.behera@mariadb.com # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR= `SELECT @@datadir`; diff --git a/mysql-test/columnstore/basic/t/mcs8_create_table_with_constraints.test b/mysql-test/columnstore/basic/t/mcs8_create_table_with_constraints.test index d5ef1fcf1..4144423d0 100644 --- a/mysql-test/columnstore/basic/t/mcs8_create_table_with_constraints.test +++ b/mysql-test/columnstore/basic/t/mcs8_create_table_with_constraints.test @@ -2,6 +2,7 @@ #Test CREATE TABLE with all supported constraints in Columnstore # -- source ../include/have_columnstore.inc +--source ../include/charset.inc --disable_warnings DROP DATABASE IF EXISTS mcs8_db; diff --git a/mysql-test/columnstore/basic/t/mcs98_moda_function.test b/mysql-test/columnstore/basic/t/mcs98_moda_function.test index 5d70bf61a..9b02a79a2 100644 --- a/mysql-test/columnstore/basic/t/mcs98_moda_function.test +++ b/mysql-test/columnstore/basic/t/mcs98_moda_function.test @@ -4,6 +4,7 @@ # # Test MODA with various numeric types -- source ../include/have_columnstore.inc +--source ../include/functions.inc --disable_warnings DROP DATABASE IF EXISTS mcs98_db; --enable_warnings @@ -100,4 +101,4 @@ SELECT moda(floor(rl)) FROM t2; SELECT t, moda(tu) 'q1' FROM t2 GROUP BY t HAVING moda(tu) > 5; # Clean UP DROP DATABASE mcs98_db; - +--source ../include/drop_functions.inc diff --git a/mysql-test/columnstore/basic/t/mcs_named_udfs.test b/mysql-test/columnstore/basic/t/mcs_named_udfs.test index d8ab21388..00ca03aa5 100644 --- a/mysql-test/columnstore/basic/t/mcs_named_udfs.test +++ b/mysql-test/columnstore/basic/t/mcs_named_udfs.test @@ -1,4 +1,6 @@ -- source ../include/have_columnstore.inc +--source ../include/functions.inc + --disable_warnings DROP DATABASE IF EXISTS cal_test_db; @@ -23,3 +25,4 @@ select mcslastinsertid("t1"); DROP TABLE t1; DROP DATABASE cal_test_db; +--source ../include/drop_functions.inc diff --git a/mysql-test/columnstore/basic/t/std_aggregate_columnstore.test b/mysql-test/columnstore/basic/t/std_aggregate_columnstore.test index fdc90fba9..8b9598504 100644 --- a/mysql-test/columnstore/basic/t/std_aggregate_columnstore.test +++ b/mysql-test/columnstore/basic/t/std_aggregate_columnstore.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS std_test_db; diff --git a/mysql-test/columnstore/basic/t/std_aggregate_window_columnstore.test b/mysql-test/columnstore/basic/t/std_aggregate_window_columnstore.test index 874095076..17405588b 100644 --- a/mysql-test/columnstore/basic/t/std_aggregate_window_columnstore.test +++ b/mysql-test/columnstore/basic/t/std_aggregate_window_columnstore.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS std_test_db; diff --git a/mysql-test/columnstore/basic/t/unsigned_aggregate.test b/mysql-test/columnstore/basic/t/unsigned_aggregate.test index 14c068991..e45fb4e4d 100644 --- a/mysql-test/columnstore/basic/t/unsigned_aggregate.test +++ b/mysql-test/columnstore/basic/t/unsigned_aggregate.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS unsigned_aggregate_db; diff --git a/mysql-test/columnstore/basic/t/unsigned_joins.test b/mysql-test/columnstore/basic/t/unsigned_joins.test index 9accb2be0..9d60f0b4b 100644 --- a/mysql-test/columnstore/basic/t/unsigned_joins.test +++ b/mysql-test/columnstore/basic/t/unsigned_joins.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS unsigned_joins_db; diff --git a/mysql-test/columnstore/bugfixes/MCOL-5776-GROUP-BY-HAVING-functions-use.opt b/mysql-test/columnstore/bugfixes/MCOL-5776-GROUP-BY-HAVING-functions-use.opt new file mode 100644 index 000000000..02b69515b --- /dev/null +++ b/mysql-test/columnstore/bugfixes/MCOL-5776-GROUP-BY-HAVING-functions-use.opt @@ -0,0 +1,3 @@ +--skip-partition=0 +--skip-sequence=0 + diff --git a/mysql-test/columnstore/bugfixes/MCOL-5776-GROUP-BY-HAVING-functions-use.test b/mysql-test/columnstore/bugfixes/MCOL-5776-GROUP-BY-HAVING-functions-use.test index 129bfcbc2..0edfd7823 100644 --- a/mysql-test/columnstore/bugfixes/MCOL-5776-GROUP-BY-HAVING-functions-use.test +++ b/mysql-test/columnstore/bugfixes/MCOL-5776-GROUP-BY-HAVING-functions-use.test @@ -1,3 +1,7 @@ +--source ../include/have_columnstore.inc +--source include/have_innodb.inc +--source ../include/functions.inc + --disable_warnings DROP DATABASE IF EXISTS MCOL5776; --enable_warnings @@ -99,3 +103,4 @@ INSERT INTO t(k) VALUES (1), (2), (2), (3), (3), (4), (4),(4),(4),(4),(995), (NU SELECT k + k a FROM t GROUP BY a HAVING a >= 8; DROP DATABASE MCOL5776; +--source ../include/drop_functions.inc diff --git a/mysql-test/columnstore/bugfixes/mcol-4740.test b/mysql-test/columnstore/bugfixes/mcol-4740.test index 85075fd99..b950908cb 100644 --- a/mysql-test/columnstore/bugfixes/mcol-4740.test +++ b/mysql-test/columnstore/bugfixes/mcol-4740.test @@ -1,7 +1,7 @@ # # MCOL-4740 UPDATE involving multi-tables returns wrong "Rows matched" # - +--source ../include/disable_11.4.inc --source ../include/have_columnstore.inc --disable_warnings @@ -79,4 +79,4 @@ SET main.status = 1; SELECT status FROM test1; -DROP DATABASE mcol_4740; \ No newline at end of file +DROP DATABASE mcol_4740; diff --git a/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.result b/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.result index c9e2db639..778ef7959 100644 --- a/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.result +++ b/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.result @@ -10,3 +10,4 @@ LOAD DATA LOCAL infile 'MTR_SUITE_DIR/../std_data/mcol-4741-part-2-empty-strings SELECT COUNT(*) FROM t WHERE x='val'; COUNT(*) 2 +DROP DATABASE IF EXISTS db4741; diff --git a/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.test b/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.test index 06cc2abdd..c57fbbb98 100644 --- a/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.test +++ b/mysql-test/columnstore/bugfixes/mcol-4741-strings-ranges-are-unsigned.test @@ -1,3 +1,5 @@ +--source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc --disable_warnings DROP DATABASE IF EXISTS db4741; --enable_warnings @@ -14,4 +16,4 @@ SELECT COUNT(*) FROM t WHERE x='val'; --eval LOAD DATA LOCAL infile '$MTR_SUITE_DIR/../std_data/mcol-4741-part-2-empty-strings.txt' INTO TABLE t SELECT COUNT(*) FROM t WHERE x='val'; - +DROP DATABASE IF EXISTS db4741; diff --git a/mysql-test/columnstore/bugfixes/mcol-4786.opt b/mysql-test/columnstore/bugfixes/mcol-4786.opt new file mode 100644 index 000000000..bedbaf7de --- /dev/null +++ b/mysql-test/columnstore/bugfixes/mcol-4786.opt @@ -0,0 +1 @@ +--skip-sequence=0 diff --git a/mysql-test/columnstore/bugfixes/mcol-4931.test b/mysql-test/columnstore/bugfixes/mcol-4931.test index eafcc3ceb..5a5c509cf 100644 --- a/mysql-test/columnstore/bugfixes/mcol-4931.test +++ b/mysql-test/columnstore/bugfixes/mcol-4931.test @@ -7,6 +7,7 @@ if (!$MYSQL_TEST_ROOT){ } --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR=`SELECT @@datadir`; diff --git a/mysql-test/columnstore/bugfixes/mcol-5074.result b/mysql-test/columnstore/bugfixes/mcol-5074.result index 772bf7a21..87c51361d 100644 --- a/mysql-test/columnstore/bugfixes/mcol-5074.result +++ b/mysql-test/columnstore/bugfixes/mcol-5074.result @@ -32,3 +32,4 @@ Partner 5 2021-12-11 2 NULL NULL NULL Person Focal Group 4 2021-12-11 NULL NULL NULL 4 PFG 4 2021-12-11 NULL NULL NULL NULL Retail 4 2021-12-12 NULL 1 NULL NULL +DROP DATABASE mcol_5074_db; diff --git a/mysql-test/columnstore/bugfixes/mcol-5074.test b/mysql-test/columnstore/bugfixes/mcol-5074.test index aed1ff750..9ec6e6535 100644 --- a/mysql-test/columnstore/bugfixes/mcol-5074.test +++ b/mysql-test/columnstore/bugfixes/mcol-5074.test @@ -41,3 +41,4 @@ select case when da.mtn = 'Person Focal Group' then count( acct_id) end as PFG_active_accounts from accnt da group by mtn, accts, act_created_dt order by mtn; +DROP DATABASE mcol_5074_db; diff --git a/mysql-test/columnstore/bugfixes/mcol-5480.test b/mysql-test/columnstore/bugfixes/mcol-5480.test index 48fa79464..37de6bb1c 100644 --- a/mysql-test/columnstore/bugfixes/mcol-5480.test +++ b/mysql-test/columnstore/bugfixes/mcol-5480.test @@ -2,8 +2,9 @@ # MCOL-5480 LDI loads values incorrectly for MEDIUMINT, TIME and TIMESTAMP # when cpimport is used for batch insert # - +--source ../include/disable_11.4.inc --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc let $DATADIR=`SELECT @@datadir`; diff --git a/mysql-test/columnstore/bugfixes/mcol-5669.result b/mysql-test/columnstore/bugfixes/mcol-5669.result index 661bd51c2..10cb76216 100644 --- a/mysql-test/columnstore/bugfixes/mcol-5669.result +++ b/mysql-test/columnstore/bugfixes/mcol-5669.result @@ -111,3 +111,5 @@ di_source_id brand_sku_id adjusted_dtm is_sit sit_uom sales_uom_daily_average 5304 1004 2024-01-01 1 0.2434 0.00000000 5389 1004 2024-01-01 1 0.2074 0.00000000 DROP DATABASE mcol_5669; +REVOKE ALL PRIVILEGES ON *.* FROM 'cejuser'@'localhost'; +DROP USER 'cejuser'@'localhost'; diff --git a/mysql-test/columnstore/bugfixes/mcol-5669.test b/mysql-test/columnstore/bugfixes/mcol-5669.test index 70f1b21d5..c40e987f7 100644 --- a/mysql-test/columnstore/bugfixes/mcol-5669.test +++ b/mysql-test/columnstore/bugfixes/mcol-5669.test @@ -1,3 +1,4 @@ +--source ../include/disable_11.4.inc --source include/have_innodb.inc --source ../include/have_columnstore.inc --disable_warnings @@ -110,3 +111,5 @@ INSERT INTO `zzz_999999` VALUES ('2023-12-18',5298,684963,1004,1,1,2166,1.000),( ) as z; DROP DATABASE mcol_5669; +REVOKE ALL PRIVILEGES ON *.* FROM 'cejuser'@'localhost'; +DROP USER 'cejuser'@'localhost'; diff --git a/mysql-test/columnstore/bugfixes/mcol_4465.test b/mysql-test/columnstore/bugfixes/mcol_4465.test index 59f078ca1..6339eced9 100644 --- a/mysql-test/columnstore/bugfixes/mcol_4465.test +++ b/mysql-test/columnstore/bugfixes/mcol_4465.test @@ -1,4 +1,5 @@ --source ../include/have_columnstore.inc +--source ../include/functions.inc --disable_warnings DROP DATABASE IF EXISTS mcol_4465; --enable_warnings @@ -9,3 +10,4 @@ INSERT INTO cs1 VALUES('i',0),('i',0),('ii',0); SELECT c,regr_count(d,length(c)) f FROM cs1 GROUP BY 1 ORDER BY 1; SELECT * FROM (SELECT c,regr_count(d,length(c)) f FROM cs1 GROUP BY 1 ORDER BY 1)a; DROP DATABASE mcol_4465; +--source ../include/drop_functions.inc diff --git a/mysql-test/columnstore/bugfixes/mcol_4622.test b/mysql-test/columnstore/bugfixes/mcol_4622.test index 862f43239..b4b164fad 100644 --- a/mysql-test/columnstore/bugfixes/mcol_4622.test +++ b/mysql-test/columnstore/bugfixes/mcol_4622.test @@ -1,4 +1,5 @@ -- source ../include/have_columnstore.inc +--source include/have_innodb.inc --disable_warnings DROP DATABASE IF EXISTS mcol_4622; --enable_warnings diff --git a/mysql-test/columnstore/devregression/r/mcs7225_regression_MCOL-3721_maxscale.result b/mysql-test/columnstore/devregression/r/mcs7225_regression_MCOL-3721_maxscale.result new file mode 100644 index 000000000..ff5650ed4 --- /dev/null +++ b/mysql-test/columnstore/devregression/r/mcs7225_regression_MCOL-3721_maxscale.result @@ -0,0 +1,36 @@ +USE tpch1; +DROP TABLE IF EXISTS test_collate; +CREATE TABLE test_collate (a INT, b INT) ENGINE=columnstore; +INSERT INTO test_collate VALUES (1,2), (2,4); +SELECT a, b FROM test_collate ORDER BY a COLLATE latin1_german2_ci; +a b +1 2 +2 4 +SELECT a, b FROM test_collate ORDER BY a COLLATE latin1_german2_ci DESC; +a b +1 2 +2 4 +DROP TABLE IF EXISTS test_collate; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (col1 CHAR(10)) CHARSET latin1 COLLATE latin1_bin ENGINE=columnstore; +INSERT INTO t1 VALUES ('a'), ('1'), ('-1'); +SELECT col1 FROM t1; +col1 +a +1 +-1 +DESCRIBE t1; +Field Type Null Key Default Extra +col1 char(10) YES NULL +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci) ENGINE=columnstore; +INSERT INTO t1 VALUES ('a'), ('1'), ('-1'); +SELECT col1 FROM t1; +col1 +a +1 +-1 +DESCRIBE t1; +Field Type Null Key Default Extra +col1 char(10) YES NULL +DROP TABLE IF EXISTS t1; diff --git a/mysql-test/columnstore/devregression/t/mcs7058_regression_bug3262.test b/mysql-test/columnstore/devregression/t/mcs7058_regression_bug3262.test index d8f216990..7916dff54 100644 --- a/mysql-test/columnstore/devregression/t/mcs7058_regression_bug3262.test +++ b/mysql-test/columnstore/devregression/t/mcs7058_regression_bug3262.test @@ -5,6 +5,8 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7062_regression_bug3274.test b/mysql-test/columnstore/devregression/t/mcs7062_regression_bug3274.test index ed3088efa..e64cabda8 100644 --- a/mysql-test/columnstore/devregression/t/mcs7062_regression_bug3274.test +++ b/mysql-test/columnstore/devregression/t/mcs7062_regression_bug3274.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7072_regression_bug3406.test b/mysql-test/columnstore/devregression/t/mcs7072_regression_bug3406.test index 990f68501..39aa61e80 100644 --- a/mysql-test/columnstore/devregression/t/mcs7072_regression_bug3406.test +++ b/mysql-test/columnstore/devregression/t/mcs7072_regression_bug3406.test @@ -5,6 +5,8 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7094_regression_bug3520.test b/mysql-test/columnstore/devregression/t/mcs7094_regression_bug3520.test index b65aa5f54..f347bf345 100644 --- a/mysql-test/columnstore/devregression/t/mcs7094_regression_bug3520.test +++ b/mysql-test/columnstore/devregression/t/mcs7094_regression_bug3520.test @@ -5,6 +5,8 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + # USE ssb1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7130_regression_bug3935.test b/mysql-test/columnstore/devregression/t/mcs7130_regression_bug3935.test index a111e77ee..7979eaad0 100644 --- a/mysql-test/columnstore/devregression/t/mcs7130_regression_bug3935.test +++ b/mysql-test/columnstore/devregression/t/mcs7130_regression_bug3935.test @@ -5,6 +5,8 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7132_regression_bug3952.test b/mysql-test/columnstore/devregression/t/mcs7132_regression_bug3952.test index ff93cabc9..8010fffa5 100644 --- a/mysql-test/columnstore/devregression/t/mcs7132_regression_bug3952.test +++ b/mysql-test/columnstore/devregression/t/mcs7132_regression_bug3952.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7139_regression_bug4074.test b/mysql-test/columnstore/devregression/t/mcs7139_regression_bug4074.test index 60bdc4486..817d6637a 100644 --- a/mysql-test/columnstore/devregression/t/mcs7139_regression_bug4074.test +++ b/mysql-test/columnstore/devregression/t/mcs7139_regression_bug4074.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7147_regression_bug4388.test b/mysql-test/columnstore/devregression/t/mcs7147_regression_bug4388.test index e2f549960..17250b722 100644 --- a/mysql-test/columnstore/devregression/t/mcs7147_regression_bug4388.test +++ b/mysql-test/columnstore/devregression/t/mcs7147_regression_bug4388.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7167_regression_bug5133.test b/mysql-test/columnstore/devregression/t/mcs7167_regression_bug5133.test index 2241f7939..863c31205 100644 --- a/mysql-test/columnstore/devregression/t/mcs7167_regression_bug5133.test +++ b/mysql-test/columnstore/devregression/t/mcs7167_regression_bug5133.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7168_regression_bug5173.test b/mysql-test/columnstore/devregression/t/mcs7168_regression_bug5173.test index 4f3ba58d6..1267679c7 100644 --- a/mysql-test/columnstore/devregression/t/mcs7168_regression_bug5173.test +++ b/mysql-test/columnstore/devregression/t/mcs7168_regression_bug5173.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7199_regression_MCOL-128.test b/mysql-test/columnstore/devregression/t/mcs7199_regression_MCOL-128.test index 1991ca0b1..f2f02c163 100644 --- a/mysql-test/columnstore/devregression/t/mcs7199_regression_MCOL-128.test +++ b/mysql-test/columnstore/devregression/t/mcs7199_regression_MCOL-128.test @@ -5,6 +5,8 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7208_regression_MCOL-1989.test b/mysql-test/columnstore/devregression/t/mcs7208_regression_MCOL-1989.test index 9a7c378e0..e6fc02913 100644 --- a/mysql-test/columnstore/devregression/t/mcs7208_regression_MCOL-1989.test +++ b/mysql-test/columnstore/devregression/t/mcs7208_regression_MCOL-1989.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7213_regression_MCOL-2225.test b/mysql-test/columnstore/devregression/t/mcs7213_regression_MCOL-2225.test index 88f9f30b5..b08809f75 100644 --- a/mysql-test/columnstore/devregression/t/mcs7213_regression_MCOL-2225.test +++ b/mysql-test/columnstore/devregression/t/mcs7213_regression_MCOL-2225.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7225_regression_MCOL-3721.test b/mysql-test/columnstore/devregression/t/mcs7225_regression_MCOL-3721.test index 6b9895fde..0ff3addab 100644 --- a/mysql-test/columnstore/devregression/t/mcs7225_regression_MCOL-3721.test +++ b/mysql-test/columnstore/devregression/t/mcs7225_regression_MCOL-3721.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7225_regression_MCOL-3721_maxscale.test b/mysql-test/columnstore/devregression/t/mcs7225_regression_MCOL-3721_maxscale.test new file mode 100644 index 000000000..64443034d --- /dev/null +++ b/mysql-test/columnstore/devregression/t/mcs7225_regression_MCOL-3721_maxscale.test @@ -0,0 +1,42 @@ +# -------------------------------------------------------------- # +# Test case migrated from regression test suite: MCOL-3721.sql +# +# Author: Daniel Lee, daniel.lee@mariadb.com +# -------------------------------------------------------------- # +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc +--disable_warnings +# +USE tpch1; +# +#--Test COLLATE in ORDER BY +--disable_warnings +DROP TABLE IF EXISTS test_collate; + +CREATE TABLE test_collate (a INT, b INT) ENGINE=columnstore; +INSERT INTO test_collate VALUES (1,2), (2,4); +SELECT a, b FROM test_collate ORDER BY a COLLATE latin1_german2_ci; +SELECT a, b FROM test_collate ORDER BY a COLLATE latin1_german2_ci DESC; + +DROP TABLE IF EXISTS test_collate; + +#--Test COLLATE in table definition and column definition +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 (col1 CHAR(10)) CHARSET latin1 COLLATE latin1_bin ENGINE=columnstore; +INSERT INTO t1 VALUES ('a'), ('1'), ('-1'); +SELECT col1 FROM t1; +DESCRIBE t1; + +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 (col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci) ENGINE=columnstore; +INSERT INTO t1 VALUES ('a'), ('1'), ('-1'); +SELECT col1 FROM t1; +DESCRIBE t1; + +DROP TABLE IF EXISTS t1; +--enable_warnings +# + diff --git a/mysql-test/columnstore/devregression/t/mcs7230_regression_MCOL-4000.test b/mysql-test/columnstore/devregression/t/mcs7230_regression_MCOL-4000.test index c8455c619..dce283beb 100644 --- a/mysql-test/columnstore/devregression/t/mcs7230_regression_MCOL-4000.test +++ b/mysql-test/columnstore/devregression/t/mcs7230_regression_MCOL-4000.test @@ -5,6 +5,8 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7231_regression_MCOL-4002.test b/mysql-test/columnstore/devregression/t/mcs7231_regression_MCOL-4002.test index dd9736d25..50aa87676 100644 --- a/mysql-test/columnstore/devregression/t/mcs7231_regression_MCOL-4002.test +++ b/mysql-test/columnstore/devregression/t/mcs7231_regression_MCOL-4002.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7236_regression_MCOL-736.test b/mysql-test/columnstore/devregression/t/mcs7236_regression_MCOL-736.test index 4aa7a1d53..dd534dfe8 100644 --- a/mysql-test/columnstore/devregression/t/mcs7236_regression_MCOL-736.test +++ b/mysql-test/columnstore/devregression/t/mcs7236_regression_MCOL-736.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # USE tpch1; # diff --git a/mysql-test/columnstore/devregression/t/mcs7522_storedProcedures_sp_autoswitch.test b/mysql-test/columnstore/devregression/t/mcs7522_storedProcedures_sp_autoswitch.test index 79499751f..d5750d20d 100644 --- a/mysql-test/columnstore/devregression/t/mcs7522_storedProcedures_sp_autoswitch.test +++ b/mysql-test/columnstore/devregression/t/mcs7522_storedProcedures_sp_autoswitch.test @@ -6,6 +6,7 @@ # -- source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc USE tpch1; diff --git a/mysql-test/columnstore/extended/t/mcs7001_update_100mil_rows.test b/mysql-test/columnstore/extended/t/mcs7001_update_100mil_rows.test index f14947289..0763bdf04 100644 --- a/mysql-test/columnstore/extended/t/mcs7001_update_100mil_rows.test +++ b/mysql-test/columnstore/extended/t/mcs7001_update_100mil_rows.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs7001_db; diff --git a/mysql-test/columnstore/extended/t/mcs7002_ldi_rollback.test b/mysql-test/columnstore/extended/t/mcs7002_ldi_rollback.test index f66730221..aa7dd7ff4 100644 --- a/mysql-test/columnstore/extended/t/mcs7002_ldi_rollback.test +++ b/mysql-test/columnstore/extended/t/mcs7002_ldi_rollback.test @@ -5,6 +5,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS mcs7002_db; diff --git a/mysql-test/columnstore/include/charset.inc b/mysql-test/columnstore/include/charset.inc new file mode 100644 index 000000000..15c273e8e --- /dev/null +++ b/mysql-test/columnstore/include/charset.inc @@ -0,0 +1,5 @@ +--disable_query_log +SET character_set_server = 'utf8mb3'; +SET collation_server = 'utf8mb3_general_ci'; +--enable_query_log + diff --git a/mysql-test/columnstore/include/check_maxscale.inc b/mysql-test/columnstore/include/check_maxscale.inc new file mode 100644 index 000000000..10039348e --- /dev/null +++ b/mysql-test/columnstore/include/check_maxscale.inc @@ -0,0 +1,9 @@ +--disable_abort_on_error +let $maxscale = 0; +let $maxscalerepl = `SELECT @is_maxscale`; +if ($maxscalerepl == "YES") +{ + let $maxscale = 1; +} + +--enable_abort_on_error diff --git a/mysql-test/columnstore/include/detect_maxscale.inc b/mysql-test/columnstore/include/detect_maxscale.inc new file mode 100644 index 000000000..33165732a --- /dev/null +++ b/mysql-test/columnstore/include/detect_maxscale.inc @@ -0,0 +1,10 @@ +--disable_abort_on_error + +let $maxscale = `SELECT @is_maxscale`; + +if ($maxscale == "YES") +{ + --skip Test can not be used with Maxscale. +} + +--enable_abort_on_error diff --git a/mysql-test/columnstore/include/detect_no_maxscale.inc b/mysql-test/columnstore/include/detect_no_maxscale.inc new file mode 100644 index 000000000..4701df844 --- /dev/null +++ b/mysql-test/columnstore/include/detect_no_maxscale.inc @@ -0,0 +1,10 @@ +--disable_abort_on_error + +let $maxscale = `SELECT @is_maxscale`; + +if ($maxscale != "YES") +{ + --skip Test requires connection via Maxscale. +} + +--enable_abort_on_error diff --git a/mysql-test/columnstore/include/disable_11.4.inc b/mysql-test/columnstore/include/disable_11.4.inc new file mode 100644 index 000000000..3e225b452 --- /dev/null +++ b/mysql-test/columnstore/include/disable_11.4.inc @@ -0,0 +1,4 @@ +if (`SELECT (sys.version_major(), sys.version_minor()) != (10, 6)`) +{ + skip Temporary disabled due to incompatibility with 11.4, MCOL-5948; +} diff --git a/mysql-test/columnstore/include/drop_functions.inc b/mysql-test/columnstore/include/drop_functions.inc new file mode 100644 index 000000000..a55af261c --- /dev/null +++ b/mysql-test/columnstore/include/drop_functions.inc @@ -0,0 +1,63 @@ +--disable_query_log +DROP FUNCTION mcsgetstats; +DROP FUNCTION calgetstats; +DROP FUNCTION mcssettrace; +DROP FUNCTION calsettrace; +DROP FUNCTION mcssetparms; +DROP FUNCTION calsetparms; +DROP FUNCTION mcsflushcache; +DROP FUNCTION calflushcache; +DROP FUNCTION mcsgettrace; +DROP FUNCTION calgettrace; +DROP FUNCTION mcsgetversion; +DROP FUNCTION calgetversion; +DROP FUNCTION calonlinealter; +DROP FUNCTION mcsviewtablelock; +DROP FUNCTION calviewtablelock; +DROP FUNCTION mcscleartablelock; +DROP FUNCTION calcleartablelock; +DROP FUNCTION mcslastinsertid; +DROP FUNCTION callastinsertid; +DROP FUNCTION mcsgetsqlcount; +DROP FUNCTION calgetsqlcount; +DROP FUNCTION idbpm; +DROP FUNCTION idbdbroot; +DROP FUNCTION idbsegment; +DROP FUNCTION idbsegmentdir; +DROP FUNCTION idbextentrelativerid; +DROP FUNCTION idbblockid; +DROP FUNCTION idbextentid; +DROP FUNCTION idbextentmin; +DROP FUNCTION idbextentmax; +DROP FUNCTION idbpartition; +DROP FUNCTION idblocalpm; +DROP FUNCTION mcssystemready; +DROP FUNCTION mcssystemreadonly; +DROP FUNCTION mcssystemprimary; +DROP FUNCTION mcs_emindex_size; +DROP FUNCTION mcs_emindex_free; +DROP FUNCTION columnstore_dataload; +DROP FUNCTION regr_avgx; +DROP FUNCTION regr_avgy; +DROP FUNCTION regr_count; +DROP FUNCTION regr_slope; +DROP FUNCTION regr_intercept; +DROP FUNCTION regr_r2; +DROP FUNCTION corr; +DROP FUNCTION regr_sxx; +DROP FUNCTION regr_syy; +DROP FUNCTION regr_sxy; +DROP FUNCTION covar_pop; +DROP FUNCTION covar_samp; +DROP FUNCTION distinct_count; +DROP FUNCTION caldisablepartitions; +DROP FUNCTION calenablepartitions; +DROP FUNCTION caldroppartitions; +DROP FUNCTION calshowpartitions; +DROP FUNCTION caldroppartitionsbyvalue; +DROP FUNCTION caldisablepartitionsbyvalue; +DROP FUNCTION calenablepartitionsbyvalue; +DROP FUNCTION calshowpartitionsbyvalue; +DROP FUNCTION moda; +DROP FUNCTION mcs_set_ddldebug_level; +--enable_query_log diff --git a/mysql-test/columnstore/include/functions.inc b/mysql-test/columnstore/include/functions.inc new file mode 100644 index 000000000..9d9602aa3 --- /dev/null +++ b/mysql-test/columnstore/include/functions.inc @@ -0,0 +1,63 @@ +--disable_query_log +CREATE OR REPLACE FUNCTION mcsgetstats RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calgetstats RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcssettrace RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calsettrace RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcssetparms RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calsetparms RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcsflushcache RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calflushcache RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcsgettrace RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calgettrace RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcsgetversion RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calgetversion RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calonlinealter RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcsviewtablelock RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calviewtablelock RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcscleartablelock RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calcleartablelock RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcslastinsertid RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION callastinsertid RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcsgetsqlcount RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calgetsqlcount RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbpm RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbdbroot RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbsegment RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbsegmentdir RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbextentrelativerid RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbblockid RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbextentid RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbextentmin RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbextentmax RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idbpartition RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION idblocalpm RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcssystemready RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcssystemreadonly RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcssystemprimary RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcs_emindex_size RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION mcs_emindex_free RETURNS INTEGER SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION columnstore_dataload RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_avgx RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_avgy RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_count RETURNS INTEGER SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_slope RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_intercept RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_r2 RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION corr RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_sxx RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_syy RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION regr_sxy RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION covar_pop RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION covar_samp RETURNS REAL SONAME 'libregr_mysql.so'; +CREATE OR REPLACE AGGREGATE FUNCTION distinct_count RETURNS INTEGER SONAME 'libudf_mysql.so'; +CREATE OR REPLACE FUNCTION caldisablepartitions RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calenablepartitions RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION caldroppartitions RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calshowpartitions RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION caldroppartitionsbyvalue RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION caldisablepartitionsbyvalue RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calenablepartitionsbyvalue RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE FUNCTION calshowpartitionsbyvalue RETURNS STRING SONAME 'ha_columnstore.so'; +CREATE OR REPLACE AGGREGATE FUNCTION moda RETURNS STRING SONAME 'libregr_mysql.so'; +CREATE OR REPLACE FUNCTION mcs_set_ddldebug_level RETURNS STRING SONAME 'ha_columnstore.so'; +--enable_query_log diff --git a/mysql-test/columnstore/include/only_10.6.inc b/mysql-test/columnstore/include/only_10.6.inc new file mode 100644 index 000000000..931e97f8c --- /dev/null +++ b/mysql-test/columnstore/include/only_10.6.inc @@ -0,0 +1,4 @@ +if (`SELECT (sys.version_major(), sys.version_minor()) != (10, 6)`) +{ + skip This test works only with 10.6; +} diff --git a/mysql-test/columnstore/include/syscatalog_mysql.sql b/mysql-test/columnstore/include/syscatalog_mysql.sql new file mode 100644 index 000000000..aea3fdaad --- /dev/null +++ b/mysql-test/columnstore/include/syscatalog_mysql.sql @@ -0,0 +1,49 @@ +--disable_query_log +--disable_warnings + +create database if not exists calpontsys; + +use calpontsys; + +drop table if exists systable restrict; +drop table if exists syscolumn restrict; + +create table if not exists systable (tablename varchar(128), + `schema` varchar(128), + objectid int, + createdate date, + lastupdate date, + init int, + next int, + numofrows int, + avgrowlen int, + numofblocks int, + autoincrement int, + auxcolumnoid int not null default 0) engine=columnstore comment='SCHEMA SYNC ONLY'; + +create table if not exists syscolumn (`schema` varchar(128), + tablename varchar(128), + columnname varchar(128), + objectid integer, + dictobjectid integer, + listobjectid integer, + treeobjectid integer, + datatype integer, + columnlength integer, + columnposition integer, + lastupdate date, + defaultvalue varchar(64), + nullable integer, + scale integer, + prec integer, + autoincrement char(1), + distcount integer, + nullcount integer, + minvalue varchar(64), + `maxvalue` varchar(64), + compressiontype integer, + nextvalue bigint, + charsetnum int not null default 0) engine=columnstore comment='SCHEMA SYNC ONLY'; + +--enable_warnings +--enable_query_log diff --git a/mysql-test/columnstore/oracle/func_concat_oracle.test b/mysql-test/columnstore/oracle/func_concat_oracle.test index be8399eb0..fb4ad720f 100644 --- a/mysql-test/columnstore/oracle/func_concat_oracle.test +++ b/mysql-test/columnstore/oracle/func_concat_oracle.test @@ -1,6 +1,9 @@ # # Testing CONCAT with null values # +--source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + SET sql_mode=ORACLE; SET default_storage_engine=ColumnStore; diff --git a/mysql-test/columnstore/oracle/func_concat_oracle_maxscale.result b/mysql-test/columnstore/oracle/func_concat_oracle_maxscale.result new file mode 100644 index 000000000..cbc2e0c0e --- /dev/null +++ b/mysql-test/columnstore/oracle/func_concat_oracle_maxscale.result @@ -0,0 +1,357 @@ +SET sql_mode=ORACLE; +SET default_storage_engine=ColumnStore; +EXPLAIN EXTENDED SELECT 'a'||'b'||'c'; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT CONCAT('a'||'b'||'c'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +SELECT '' || ''; +'' || '' + +SELECT '' || 'b'; +'' || 'b' +b +SELECT '' || NULL; +'' || NULL + +SELECT 'a' || ''; +'a' || '' +a +SELECT 'a' || 'b'; +'a' || 'b' +ab +SELECT 'a' || NULL; +'a' || NULL +a +SELECT NULL || ''; +NULL || '' + +SELECT NULL || 'b'; +NULL || 'b' +b +SELECT NULL || NULL; +NULL || NULL +NULL +SELECT '' || '' || ''; +'' || '' || '' + +SELECT '' || '' || 'c'; +'' || '' || 'c' +c +SELECT '' || '' || NULL; +'' || '' || NULL + +SELECT '' || 'b' || ''; +'' || 'b' || '' +b +SELECT '' || 'b' || 'c'; +'' || 'b' || 'c' +bc +SELECT '' || 'b' || NULL; +'' || 'b' || NULL +b +SELECT '' || NULL || ''; +'' || NULL || '' + +SELECT '' || NULL || 'c'; +'' || NULL || 'c' +c +SELECT '' || NULL || NULL; +'' || NULL || NULL + +SELECT 'a' || '' || ''; +'a' || '' || '' +a +SELECT 'a' || '' || 'c'; +'a' || '' || 'c' +ac +SELECT 'a' || '' || NULL; +'a' || '' || NULL +a +SELECT 'a' || 'b' || ''; +'a' || 'b' || '' +ab +SELECT 'a' || 'b' || 'c'; +'a' || 'b' || 'c' +abc +SELECT 'a' || 'b' || NULL; +'a' || 'b' || NULL +ab +SELECT 'a' || NULL || ''; +'a' || NULL || '' +a +SELECT 'a' || NULL || 'c'; +'a' || NULL || 'c' +ac +SELECT 'a' || NULL || NULL; +'a' || NULL || NULL +a +SELECT NULL || '' || ''; +NULL || '' || '' + +SELECT NULL || '' || 'c'; +NULL || '' || 'c' +c +SELECT NULL || '' || NULL; +NULL || '' || NULL + +SELECT NULL || 'b' || ''; +NULL || 'b' || '' +b +SELECT NULL || 'b' || 'c'; +NULL || 'b' || 'c' +bc +SELECT NULL || 'b' || NULL; +NULL || 'b' || NULL +b +SELECT NULL || NULL || ''; +NULL || NULL || '' + +SELECT NULL || NULL || 'c'; +NULL || NULL || 'c' +c +SELECT NULL || NULL || NULL; +NULL || NULL || NULL +NULL +CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10), c VARCHAR(10)); +INSERT INTO t1 VALUES ('', '', ''); +INSERT INTO t1 VALUES ('', '', 'c'); +INSERT INTO t1 VALUES ('', '', NULL); +INSERT INTO t1 VALUES ('', 'b', ''); +INSERT INTO t1 VALUES ('', 'b', 'c'); +INSERT INTO t1 VALUES ('', 'b', NULL); +INSERT INTO t1 VALUES ('', NULL, ''); +INSERT INTO t1 VALUES ('', NULL, 'c'); +INSERT INTO t1 VALUES ('', NULL, NULL); +INSERT INTO t1 VALUES ('a', '', ''); +INSERT INTO t1 VALUES ('a', '', 'c'); +INSERT INTO t1 VALUES ('a', '', NULL); +INSERT INTO t1 VALUES ('a', 'b', ''); +INSERT INTO t1 VALUES ('a', 'b', 'c'); +INSERT INTO t1 VALUES ('a', 'b', NULL); +INSERT INTO t1 VALUES ('a', NULL, ''); +INSERT INTO t1 VALUES ('a', NULL, 'c'); +INSERT INTO t1 VALUES ('a', NULL, NULL); +INSERT INTO t1 VALUES (NULL, '', ''); +INSERT INTO t1 VALUES (NULL, '', 'c'); +INSERT INTO t1 VALUES (NULL, '', NULL); +INSERT INTO t1 VALUES (NULL, 'b', ''); +INSERT INTO t1 VALUES (NULL, 'b', 'c'); +INSERT INTO t1 VALUES (NULL, 'b', NULL); +INSERT INTO t1 VALUES (NULL, NULL, ''); +INSERT INTO t1 VALUES (NULL, NULL, 'c'); +INSERT INTO t1 VALUES (NULL, NULL, NULL); +SELECT LENGTH(a||b||c), a||b||c FROM t1 ORDER BY a,b,c; +LENGTH(a||b||c) a||b||c +NULL NULL +0 +1 c +0 +0 +1 c +1 b +1 b +2 bc +0 +0 +1 c +0 +0 +1 c +1 b +1 b +2 bc +1 a +1 a +2 ac +1 a +1 a +2 ac +2 ab +2 ab +3 abc +SELECT LENGTH(CONCAT(a||b||c)), CONCAT(a||b||c) FROM t1 ORDER BY a,b,c; +LENGTH(CONCAT(a||b||c)) CONCAT(a||b||c) +NULL NULL +0 +1 c +0 +0 +1 c +1 b +1 b +2 bc +0 +0 +1 c +0 +0 +1 c +1 b +1 b +2 bc +1 a +1 a +2 ac +1 a +1 a +2 ac +2 ab +2 ab +3 abc +DROP TABLE t1; +# +# MDEV-12478 CONCAT function inside view casts values incorrectly with Oracle sql_mode +# +SET sql_mode=ORACLE; +CREATE VIEW v1 AS SELECT 'foo'||NULL||'bar' AS test; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE VIEW "v1" AS select concat(concat('foo',NULL),'bar') AS "test" latin1 latin1_swedish_ci +SELECT * FROM v1; +test +foobar +SET sql_mode=DEFAULT; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`testUser`@`%` SQL SECURITY DEFINER VIEW `v1` AS select oracle_schema.concat(oracle_schema.concat('foo',NULL),'bar') AS `test` latin1 latin1_swedish_ci +SELECT * FROM v1; +test +foobar +DROP VIEW v1; +SET sql_mode=DEFAULT; +CREATE VIEW v1 AS SELECT CONCAT('foo',NULL,'bar') AS test; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`testUser`@`%` SQL SECURITY DEFINER VIEW `v1` AS select concat('foo',NULL,'bar') AS `test` latin1 latin1_swedish_ci +SELECT * FROM v1; +test +NULL +SET sql_mode=ORACLE; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE VIEW "v1" AS select mariadb_schema.concat('foo',NULL,'bar') AS "test" latin1 latin1_swedish_ci +SELECT * FROM v1; +test +NULL +DROP VIEW v1; +SET sql_mode=DEFAULT; +CREATE VIEW v1 AS SELECT '0'||'1' AS test; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`testUser`@`%` SQL SECURITY DEFINER VIEW `v1` AS select '0' or '1' AS `test` latin1 latin1_swedish_ci +SELECT * FROM v1; +test +1 +SET sql_mode=ORACLE; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE VIEW "v1" AS select '0' or '1' AS "test" latin1 latin1_swedish_ci +SELECT * FROM v1; +test +1 +DROP VIEW v1; +# +# MDEV-16186 Concatenation operator || returns wrong results in sql_mode=ORACLE +# +SELECT -1<<1||1 AS a FROM DUAL; +a +18446744073709549568 +SELECT -1||0<<1 AS a FROM DUAL; +a +18446744073709551596 +EXPLAIN EXTENDED SELECT -1<<1||1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT -1||0<<1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +SELECT -1+1||1 AS a FROM DUAL; +a +01 +SELECT -1||0+1 AS a FROM DUAL; +a +-9 +EXPLAIN EXTENDED SELECT -1+1||1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT -1||0+1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +SELECT 1*1||-1 AS a FROM DUAL; +a +1-1 +SELECT 1||1*-1 AS a FROM DUAL; +a +1-1 +EXPLAIN EXTENDED SELECT 1*1||-1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT 1||1*-1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +SELECT -1^1||1 AS a FROM DUAL; +a +184467440737095516141 +SELECT -1||0^1 AS a FROM DUAL; +a +-11 +EXPLAIN EXTENDED SELECT -1^1||1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT -1||0^1 AS a FROM DUAL; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +# +# MDEV-17359 Concatenation operator || in like expression failed in sql_mode=ORACLE +# +SELECT 'abc' LIKE 'a'||'%'; +'abc' LIKE 'a'||'%' +1 +EXPLAIN EXTENDED SELECT 'abc' LIKE 'a'||'%'; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +SELECT 'x' FROM DUAL WHERE 11 LIKE 1||1; +x +x +SELECT 'x' FROM DUAL WHERE 1||1 LIKE 11; +x +x +SELECT 'x' FROM DUAL WHERE 1||1 LIKE 1||1; +x +x +CREATE TABLE t1 (c1 VARCHAR(10),c2 VARCHAR(10), ord INTEGER); +INSERT INTO t1 VALUES ('a', 'ab' ,1); +INSERT INTO t1 VALUES ('ab', 'ab', 2); +INSERT INTO t1 VALUES ('abc', 'ab', 3); +SELECT c1 FROM t1 WHERE c1 LIKE '%'||'b' ORDER BY ord; +c1 +ab +EXPLAIN EXTENDED SELECT c1 FROM t1 WHERE c1 LIKE '%'||'b' ORDER BY ord; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PUSHED SELECT NULL NULL NULL NULL NULL NULL NULL NULL NULL +SELECT c1 FROM t1 WHERE c1 LIKE c2||'%'||'c' ORDER BY ord; +c1 +abc +EXPLAIN EXTENDED SELECT c1 FROM t1 WHERE c1 LIKE c2||'%'||'c' ORDER BY ord; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PUSHED SELECT NULL NULL NULL NULL NULL NULL NULL NULL NULL +SELECT 'x' FROM t1 WHERE c1||c2 LIKE 'aa%'; +x +x +EXPLAIN EXTENDED SELECT 'x' FROM t1 WHERE c1||c2 LIKE 'aa%'; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PUSHED SELECT NULL NULL NULL NULL NULL NULL NULL NULL NULL +SELECT 'x' FROM t1 WHERE c1||c2 LIKE c2||c1; +x +x +EXPLAIN EXTENDED SELECT 'x' FROM t1 WHERE c1||c2 LIKE c2||c1; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PUSHED SELECT NULL NULL NULL NULL NULL NULL NULL NULL NULL +CREATE VIEW v1 AS SELECT c1, c2, c1 LIKE c2||'_' FROM t1 ORDER BY ord; +EXPLAIN EXTENDED SELECT * FROM v1; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PUSHED SELECT NULL NULL NULL NULL NULL NULL NULL NULL NULL +DROP VIEW v1; +DROP TABLE t1; diff --git a/mysql-test/columnstore/oracle/func_concat_oracle_maxscale.test b/mysql-test/columnstore/oracle/func_concat_oracle_maxscale.test new file mode 100644 index 000000000..75c56dc30 --- /dev/null +++ b/mysql-test/columnstore/oracle/func_concat_oracle_maxscale.test @@ -0,0 +1,199 @@ +# +# Testing CONCAT with null values +# +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc + + +SET sql_mode=ORACLE; +SET default_storage_engine=ColumnStore; + +--disable_query_log +--disable_warnings +DROP VIEW IF EXISTS v1; +--enable_query_log + + +EXPLAIN EXTENDED SELECT 'a'||'b'||'c'; +EXPLAIN EXTENDED SELECT CONCAT('a'||'b'||'c'); + +SELECT '' || ''; +SELECT '' || 'b'; +SELECT '' || NULL; +SELECT 'a' || ''; +SELECT 'a' || 'b'; +SELECT 'a' || NULL; +SELECT NULL || ''; +SELECT NULL || 'b'; +SELECT NULL || NULL; + +SELECT '' || '' || ''; +SELECT '' || '' || 'c'; +SELECT '' || '' || NULL; +SELECT '' || 'b' || ''; +SELECT '' || 'b' || 'c'; +SELECT '' || 'b' || NULL; +SELECT '' || NULL || ''; +SELECT '' || NULL || 'c'; +SELECT '' || NULL || NULL; + +SELECT 'a' || '' || ''; +SELECT 'a' || '' || 'c'; +SELECT 'a' || '' || NULL; +SELECT 'a' || 'b' || ''; +SELECT 'a' || 'b' || 'c'; +SELECT 'a' || 'b' || NULL; +SELECT 'a' || NULL || ''; +SELECT 'a' || NULL || 'c'; +SELECT 'a' || NULL || NULL; + +SELECT NULL || '' || ''; +SELECT NULL || '' || 'c'; +SELECT NULL || '' || NULL; +SELECT NULL || 'b' || ''; +SELECT NULL || 'b' || 'c'; +SELECT NULL || 'b' || NULL; +SELECT NULL || NULL || ''; +SELECT NULL || NULL || 'c'; +SELECT NULL || NULL || NULL; + + +CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10), c VARCHAR(10)); + +INSERT INTO t1 VALUES ('', '', ''); +INSERT INTO t1 VALUES ('', '', 'c'); +INSERT INTO t1 VALUES ('', '', NULL); +INSERT INTO t1 VALUES ('', 'b', ''); +INSERT INTO t1 VALUES ('', 'b', 'c'); +INSERT INTO t1 VALUES ('', 'b', NULL); +INSERT INTO t1 VALUES ('', NULL, ''); +INSERT INTO t1 VALUES ('', NULL, 'c'); +INSERT INTO t1 VALUES ('', NULL, NULL); + +INSERT INTO t1 VALUES ('a', '', ''); +INSERT INTO t1 VALUES ('a', '', 'c'); +INSERT INTO t1 VALUES ('a', '', NULL); +INSERT INTO t1 VALUES ('a', 'b', ''); +INSERT INTO t1 VALUES ('a', 'b', 'c'); +INSERT INTO t1 VALUES ('a', 'b', NULL); +INSERT INTO t1 VALUES ('a', NULL, ''); +INSERT INTO t1 VALUES ('a', NULL, 'c'); +INSERT INTO t1 VALUES ('a', NULL, NULL); + +INSERT INTO t1 VALUES (NULL, '', ''); +INSERT INTO t1 VALUES (NULL, '', 'c'); +INSERT INTO t1 VALUES (NULL, '', NULL); +INSERT INTO t1 VALUES (NULL, 'b', ''); +INSERT INTO t1 VALUES (NULL, 'b', 'c'); +INSERT INTO t1 VALUES (NULL, 'b', NULL); +INSERT INTO t1 VALUES (NULL, NULL, ''); +INSERT INTO t1 VALUES (NULL, NULL, 'c'); +INSERT INTO t1 VALUES (NULL, NULL, NULL); + +SELECT LENGTH(a||b||c), a||b||c FROM t1 ORDER BY a,b,c; +SELECT LENGTH(CONCAT(a||b||c)), CONCAT(a||b||c) FROM t1 ORDER BY a,b,c; + +DROP TABLE t1; + + + + + +--echo # +--echo # MDEV-12478 CONCAT function inside view casts values incorrectly with Oracle sql_mode +--echo # + +SET sql_mode=ORACLE; +CREATE VIEW v1 AS SELECT 'foo'||NULL||'bar' AS test; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +SET sql_mode=DEFAULT; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +DROP VIEW v1; + +SET sql_mode=DEFAULT; +CREATE VIEW v1 AS SELECT CONCAT('foo',NULL,'bar') AS test; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +SET sql_mode=ORACLE; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +DROP VIEW v1; + +SET sql_mode=DEFAULT; +CREATE VIEW v1 AS SELECT '0'||'1' AS test; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +SET sql_mode=ORACLE; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +DROP VIEW v1; + + +--echo # +--echo # MDEV-16186 Concatenation operator || returns wrong results in sql_mode=ORACLE +--echo # + +# Concatenation operator || has the same precedence with + +# (stronger than << and weaker than * ^) + +SELECT -1<<1||1 AS a FROM DUAL; +SELECT -1||0<<1 AS a FROM DUAL; + +EXPLAIN EXTENDED SELECT -1<<1||1 AS a FROM DUAL; +EXPLAIN EXTENDED SELECT -1||0<<1 AS a FROM DUAL; + +SELECT -1+1||1 AS a FROM DUAL; +SELECT -1||0+1 AS a FROM DUAL; + +EXPLAIN EXTENDED SELECT -1+1||1 AS a FROM DUAL; +EXPLAIN EXTENDED SELECT -1||0+1 AS a FROM DUAL; + +SELECT 1*1||-1 AS a FROM DUAL; +SELECT 1||1*-1 AS a FROM DUAL; + +EXPLAIN EXTENDED SELECT 1*1||-1 AS a FROM DUAL; +EXPLAIN EXTENDED SELECT 1||1*-1 AS a FROM DUAL; + +SELECT -1^1||1 AS a FROM DUAL; +SELECT -1||0^1 AS a FROM DUAL; + +EXPLAIN EXTENDED SELECT -1^1||1 AS a FROM DUAL; +EXPLAIN EXTENDED SELECT -1||0^1 AS a FROM DUAL; + + +--echo # +--echo # MDEV-17359 Concatenation operator || in like expression failed in sql_mode=ORACLE +--echo # + +SELECT 'abc' LIKE 'a'||'%'; +EXPLAIN EXTENDED SELECT 'abc' LIKE 'a'||'%'; + +SELECT 'x' FROM DUAL WHERE 11 LIKE 1||1; +SELECT 'x' FROM DUAL WHERE 1||1 LIKE 11; +SELECT 'x' FROM DUAL WHERE 1||1 LIKE 1||1; + +CREATE TABLE t1 (c1 VARCHAR(10),c2 VARCHAR(10), ord INTEGER); +INSERT INTO t1 VALUES ('a', 'ab' ,1); +INSERT INTO t1 VALUES ('ab', 'ab', 2); +INSERT INTO t1 VALUES ('abc', 'ab', 3); + +SELECT c1 FROM t1 WHERE c1 LIKE '%'||'b' ORDER BY ord; +EXPLAIN EXTENDED SELECT c1 FROM t1 WHERE c1 LIKE '%'||'b' ORDER BY ord; + +SELECT c1 FROM t1 WHERE c1 LIKE c2||'%'||'c' ORDER BY ord; +EXPLAIN EXTENDED SELECT c1 FROM t1 WHERE c1 LIKE c2||'%'||'c' ORDER BY ord; + +SELECT 'x' FROM t1 WHERE c1||c2 LIKE 'aa%'; +EXPLAIN EXTENDED SELECT 'x' FROM t1 WHERE c1||c2 LIKE 'aa%'; + +SELECT 'x' FROM t1 WHERE c1||c2 LIKE c2||c1; +EXPLAIN EXTENDED SELECT 'x' FROM t1 WHERE c1||c2 LIKE c2||c1; + +CREATE VIEW v1 AS SELECT c1, c2, c1 LIKE c2||'_' FROM t1 ORDER BY ord; +EXPLAIN EXTENDED SELECT * FROM v1; + +DROP VIEW v1; +DROP TABLE t1; +--enable_warnings diff --git a/mysql-test/columnstore/oracle/func_decode_oracle.test b/mysql-test/columnstore/oracle/func_decode_oracle.test index 6eaf98ac8..9d044a6f0 100644 --- a/mysql-test/columnstore/oracle/func_decode_oracle.test +++ b/mysql-test/columnstore/oracle/func_decode_oracle.test @@ -1,5 +1,15 @@ +--source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + SET sql_mode=ORACLE; SET default_storage_engine=ColumnStore; + +--disable_query_log +--disable_warnings +DROP VIEW IF EXISTS v1; +--enable_warnings +--enable_query_log + --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT DECODE(10); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT diff --git a/mysql-test/columnstore/oracle/func_decode_oracle_maxscale.result b/mysql-test/columnstore/oracle/func_decode_oracle_maxscale.result new file mode 100644 index 000000000..0937dddf6 --- /dev/null +++ b/mysql-test/columnstore/oracle/func_decode_oracle_maxscale.result @@ -0,0 +1,158 @@ +SET sql_mode=ORACLE; +SET default_storage_engine=ColumnStore; +SELECT DECODE(10); +ERROR 42000: Incorrect parameter count in the call to native function 'DECODE' +SELECT DECODE(10,10); +ERROR 42000: Incorrect parameter count in the call to native function 'DECODE' +SELECT DECODE(10,10,'x10'); +DECODE(10,10,'x10') +x10 +SELECT DECODE(11,10,'x10'); +DECODE(11,10,'x10') +NULL +SELECT DECODE(10,10,'x10','def'); +DECODE(10,10,'x10','def') +x10 +SELECT DECODE(11,10,'x10','def'); +DECODE(11,10,'x10','def') +def +SELECT DECODE(10,10,'x10',11,'x11','def'); +DECODE(10,10,'x10',11,'x11','def') +x10 +SELECT DECODE(11,10,'x10',11,'x11','def'); +DECODE(11,10,'x10',11,'x11','def') +x11 +SELECT DECODE(12,10,'x10',11,'x11','def'); +DECODE(12,10,'x10',11,'x11','def') +def +EXPLAIN EXTENDED SELECT DECODE(12,10,'x10',11,'x11','def'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +CREATE TABLE decode (decode int); +DROP TABLE decode; +# +# MDEV-13863 sql_mode=ORACLE: DECODE does not treat two NULLs as equivalent +# +SELECT DECODE(10); +ERROR 42000: Incorrect parameter count in the call to native function 'DECODE' +SELECT DECODE(10,10); +ERROR 42000: Incorrect parameter count in the call to native function 'DECODE' +SELECT DECODE_ORACLE(10); +ERROR 42000: Incorrect parameter count in the call to native function 'DECODE_ORACLE' +SELECT DECODE_ORACLE(10,10); +ERROR 42000: Incorrect parameter count in the call to native function 'DECODE_ORACLE' +EXPLAIN EXTENDED SELECT DECODE(12,10,'x10',11,'x11'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT DECODE(12,10,'x10',11,'x11','def'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT DECODE_ORACLE(12,10,'x10',11,'x11'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +EXPLAIN EXTENDED SELECT DECODE_ORACLE(12,10,'x10',11,'x11','def'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +CREATE TABLE t1 (a INT); +CREATE VIEW v1 AS +SELECT +DECODE(a,1,'x1',NULL,'xNULL') AS d1, +DECODE(a,1,'x1',NULL,'xNULL','xELSE') AS d2, +DECODE_ORACLE(a,1,'x1',NULL,'xNULL') AS d3, +DECODE_ORACLE(a,1,'x1',NULL,'xNULL','xELSE') AS d4 +FROM t1; +DROP VIEW v1; +DROP TABLE t1; +SELECT DECODE(TIME'10:20:31','10:20:31','then1','10:20:32','then2','def'); +DECODE(TIME'10:20:31','10:20:31','then1','10:20:32','then2','def') +then1 +SELECT DECODE(TIME'10:20:32','10:20:31','then1','10:20:32','then2','def'); +DECODE(TIME'10:20:32','10:20:31','then1','10:20:32','then2','def') +then2 +SELECT DECODE(TIME'10:20:33','10:20:31','then1',NULL,'then2NULL','10:20:33','then3','def'); +DECODE(TIME'10:20:33','10:20:31','then1',NULL,'then2NULL','10:20:33','then3','def') +then3 +SELECT DECODE(NULL,TIME'10:20:31','then1',NULL,'then2NULL','10:20:33','then3','def'); +DECODE(NULL,TIME'10:20:31','then1',NULL,'then2NULL','10:20:33','then3','def') +then2NULL +SELECT DECODE(TIMESTAMP'2001-01-01 10:20:31','2001-01-01 10:20:31','then1','2001-01-01 10:20:32','then2','def'); +DECODE(TIMESTAMP'2001-01-01 10:20:31','2001-01-01 10:20:31','then1','2001-01-01 10:20:32','then2','def') +then1 +SELECT DECODE(TIMESTAMP'2001-01-01 10:20:32','2001-01-01 10:20:31','then1','2001-01-01 10:20:32','then2','def'); +DECODE(TIMESTAMP'2001-01-01 10:20:32','2001-01-01 10:20:31','then1','2001-01-01 10:20:32','then2','def') +then2 +SELECT DECODE(TIMESTAMP'2001-01-01 10:20:33','2001-01-01 10:20:31','then1',NULL,'then2NULL','2001-01-01 10:20:33','then3','def'); +DECODE(TIMESTAMP'2001-01-01 10:20:33','2001-01-01 10:20:31','then1',NULL,'then2NULL','2001-01-01 10:20:33','then3','def') +then3 +SELECT DECODE(NULL,TIMESTAMP'2001-01-01 10:20:31','then1',NULL,'then2NULL','2001-01-01 10:20:33','then3','def'); +DECODE(NULL,TIMESTAMP'2001-01-01 10:20:31','then1',NULL,'then2NULL','2001-01-01 10:20:33','then3','def') +then2NULL +SELECT DECODE('w1','w1','then1','w2','then2','def'); +DECODE('w1','w1','then1','w2','then2','def') +then1 +SELECT DECODE('w2','w1','then1','w2','then2','def'); +DECODE('w2','w1','then1','w2','then2','def') +then2 +SELECT DECODE('w3','w1','then1',NULL,'then2NULL','w3','then3','def'); +DECODE('w3','w1','then1',NULL,'then2NULL','w3','then3','def') +then3 +SELECT DECODE(NULL,'w1','then1',NULL,'then2NULL','w3','then3','def'); +DECODE(NULL,'w1','then1',NULL,'then2NULL','w3','then3','def') +then2NULL +SELECT DECODE(1,1,'then1',2,'then2','def'); +DECODE(1,1,'then1',2,'then2','def') +then1 +SELECT DECODE(2,1,'then1',2,'then2','def'); +DECODE(2,1,'then1',2,'then2','def') +then2 +SELECT DECODE(3,1,'then1',NULL,'then2NULL',3,'then3','def'); +DECODE(3,1,'then1',NULL,'then2NULL',3,'then3','def') +then3 +SELECT DECODE(NULL,1,'then1',NULL,'then2NULL',3,'then3','def'); +DECODE(NULL,1,'then1',NULL,'then2NULL',3,'then3','def') +then2NULL +SELECT DECODE(CAST(NULL AS SIGNED),1,'then1',NULL,'then2NULL',3,'then3','def'); +DECODE(CAST(NULL AS SIGNED),1,'then1',NULL,'then2NULL',3,'then3','def') +then2NULL +SELECT DECODE(1.0,1.0,'then1',2.0,'then2','def'); +DECODE(1.0,1.0,'then1',2.0,'then2','def') +then1 +SELECT DECODE(2.0,1.0,'then1',2.0,'then2','def'); +DECODE(2.0,1.0,'then1',2.0,'then2','def') +then2 +SELECT DECODE(3.0,1.0,'then1',NULL,'then2NULL',3.0,'then3','def'); +DECODE(3.0,1.0,'then1',NULL,'then2NULL',3.0,'then3','def') +then3 +SELECT DECODE(NULL,1.0,'then1',NULL,'then2NULL',3.0,'then3','def'); +DECODE(NULL,1.0,'then1',NULL,'then2NULL',3.0,'then3','def') +then2NULL +SELECT DECODE(CAST(NULL AS DECIMAL),1.0,'then1',NULL,'then2NULL',3.0,'then3','def'); +DECODE(CAST(NULL AS DECIMAL),1.0,'then1',NULL,'then2NULL',3.0,'then3','def') +then2NULL +SELECT DECODE(1e0,1e0,'then1',2e0,'then2','def'); +DECODE(1e0,1e0,'then1',2e0,'then2','def') +then1 +SELECT DECODE(2e0,1e0,'then1',2e0,'then2','def'); +DECODE(2e0,1e0,'then1',2e0,'then2','def') +then2 +SELECT DECODE(3e0,1e0,'then1',NULL,'then2NULL',3e0,'then3','def'); +DECODE(3e0,1e0,'then1',NULL,'then2NULL',3e0,'then3','def') +then3 +SELECT DECODE(NULL,1e0,'then1',NULL,'then2NULL',3e0,'then3','def'); +DECODE(NULL,1e0,'then1',NULL,'then2NULL',3e0,'then3','def') +then2NULL +SELECT DECODE(CAST(NULL AS DOUBLE),1e0,'then1',NULL,'then2NULL',3e0,'then3','def'); +DECODE(CAST(NULL AS DOUBLE),1e0,'then1',NULL,'then2NULL',3e0,'then3','def') +then2NULL +SELECT DECODE(NULL,NULL,1,2) FROM DUAL; +DECODE(NULL,NULL,1,2) +1 +SELECT DECODE(NULL,10,10,NULL,1,2) FROM DUAL; +DECODE(NULL,10,10,NULL,1,2) +1 +SELECT DECODE_ORACLE(NULL,NULL,1,2) FROM DUAL; +DECODE_ORACLE(NULL,NULL,1,2) +1 +SELECT DECODE_ORACLE(NULL,10,10,NULL,1,2) FROM DUAL; +DECODE_ORACLE(NULL,10,10,NULL,1,2) +1 diff --git a/mysql-test/columnstore/oracle/func_decode_oracle_maxscale.test b/mysql-test/columnstore/oracle/func_decode_oracle_maxscale.test new file mode 100644 index 000000000..c55328620 --- /dev/null +++ b/mysql-test/columnstore/oracle/func_decode_oracle_maxscale.test @@ -0,0 +1,103 @@ +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc + +SET sql_mode=ORACLE; +SET default_storage_engine=ColumnStore; + +--disable_query_log +--disable_warnings +DROP VIEW IF EXISTS v1; +--enable_query_log + +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT DECODE(10); +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT DECODE(10,10); + +SELECT DECODE(10,10,'x10'); +SELECT DECODE(11,10,'x10'); + +SELECT DECODE(10,10,'x10','def'); +SELECT DECODE(11,10,'x10','def'); + +SELECT DECODE(10,10,'x10',11,'x11','def'); +SELECT DECODE(11,10,'x10',11,'x11','def'); +SELECT DECODE(12,10,'x10',11,'x11','def'); + +EXPLAIN EXTENDED SELECT DECODE(12,10,'x10',11,'x11','def'); + +CREATE TABLE decode (decode int); +DROP TABLE decode; + + +--echo # +--echo # MDEV-13863 sql_mode=ORACLE: DECODE does not treat two NULLs as equivalent +--echo # + +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT DECODE(10); +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT DECODE(10,10); + +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT DECODE_ORACLE(10); +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT DECODE_ORACLE(10,10); + + +EXPLAIN EXTENDED SELECT DECODE(12,10,'x10',11,'x11'); +EXPLAIN EXTENDED SELECT DECODE(12,10,'x10',11,'x11','def'); +EXPLAIN EXTENDED SELECT DECODE_ORACLE(12,10,'x10',11,'x11'); +EXPLAIN EXTENDED SELECT DECODE_ORACLE(12,10,'x10',11,'x11','def'); + +CREATE TABLE t1 (a INT); +CREATE VIEW v1 AS + SELECT + DECODE(a,1,'x1',NULL,'xNULL') AS d1, + DECODE(a,1,'x1',NULL,'xNULL','xELSE') AS d2, + DECODE_ORACLE(a,1,'x1',NULL,'xNULL') AS d3, + DECODE_ORACLE(a,1,'x1',NULL,'xNULL','xELSE') AS d4 + FROM t1; +DROP VIEW v1; +DROP TABLE t1; + +SELECT DECODE(TIME'10:20:31','10:20:31','then1','10:20:32','then2','def'); +SELECT DECODE(TIME'10:20:32','10:20:31','then1','10:20:32','then2','def'); +SELECT DECODE(TIME'10:20:33','10:20:31','then1',NULL,'then2NULL','10:20:33','then3','def'); +SELECT DECODE(NULL,TIME'10:20:31','then1',NULL,'then2NULL','10:20:33','then3','def'); + +SELECT DECODE(TIMESTAMP'2001-01-01 10:20:31','2001-01-01 10:20:31','then1','2001-01-01 10:20:32','then2','def'); +SELECT DECODE(TIMESTAMP'2001-01-01 10:20:32','2001-01-01 10:20:31','then1','2001-01-01 10:20:32','then2','def'); +SELECT DECODE(TIMESTAMP'2001-01-01 10:20:33','2001-01-01 10:20:31','then1',NULL,'then2NULL','2001-01-01 10:20:33','then3','def'); +SELECT DECODE(NULL,TIMESTAMP'2001-01-01 10:20:31','then1',NULL,'then2NULL','2001-01-01 10:20:33','then3','def'); + +SELECT DECODE('w1','w1','then1','w2','then2','def'); +SELECT DECODE('w2','w1','then1','w2','then2','def'); +SELECT DECODE('w3','w1','then1',NULL,'then2NULL','w3','then3','def'); +SELECT DECODE(NULL,'w1','then1',NULL,'then2NULL','w3','then3','def'); + +SELECT DECODE(1,1,'then1',2,'then2','def'); +SELECT DECODE(2,1,'then1',2,'then2','def'); +SELECT DECODE(3,1,'then1',NULL,'then2NULL',3,'then3','def'); +SELECT DECODE(NULL,1,'then1',NULL,'then2NULL',3,'then3','def'); +SELECT DECODE(CAST(NULL AS SIGNED),1,'then1',NULL,'then2NULL',3,'then3','def'); + +SELECT DECODE(1.0,1.0,'then1',2.0,'then2','def'); +SELECT DECODE(2.0,1.0,'then1',2.0,'then2','def'); +SELECT DECODE(3.0,1.0,'then1',NULL,'then2NULL',3.0,'then3','def'); +SELECT DECODE(NULL,1.0,'then1',NULL,'then2NULL',3.0,'then3','def'); +SELECT DECODE(CAST(NULL AS DECIMAL),1.0,'then1',NULL,'then2NULL',3.0,'then3','def'); + +SELECT DECODE(1e0,1e0,'then1',2e0,'then2','def'); +SELECT DECODE(2e0,1e0,'then1',2e0,'then2','def'); +SELECT DECODE(3e0,1e0,'then1',NULL,'then2NULL',3e0,'then3','def'); +SELECT DECODE(NULL,1e0,'then1',NULL,'then2NULL',3e0,'then3','def'); +SELECT DECODE(CAST(NULL AS DOUBLE),1e0,'then1',NULL,'then2NULL',3e0,'then3','def'); + +SELECT DECODE(NULL,NULL,1,2) FROM DUAL; +SELECT DECODE(NULL,10,10,NULL,1,2) FROM DUAL; + +SELECT DECODE_ORACLE(NULL,NULL,1,2) FROM DUAL; +SELECT DECODE_ORACLE(NULL,10,10,NULL,1,2) FROM DUAL; +--enable_warnings + diff --git a/mysql-test/columnstore/oracle/func_replace_oracle.test b/mysql-test/columnstore/oracle/func_replace_oracle.test index 87dc1d87a..d66f5437e 100644 --- a/mysql-test/columnstore/oracle/func_replace_oracle.test +++ b/mysql-test/columnstore/oracle/func_replace_oracle.test @@ -2,12 +2,23 @@ # Testing replace with null args # +--source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + + SET sql_mode=ORACLE; SET default_storage_engine=ColumnStore; --echo # --echo # MDEV-13003 - Oracle compatibility : Replace function --echo # +--disable_query_log +--disable_warnings +DROP VIEW IF EXISTS v1; +--enable_warnings +--enable_query_log + + SELECT REPLACE(null,'a','b') ; SELECT REPLACE('ab',null,'b') ; SELECT REPLACE('ab','a',null) ; diff --git a/mysql-test/columnstore/oracle/func_replace_oracle_maxscale.result b/mysql-test/columnstore/oracle/func_replace_oracle_maxscale.result new file mode 100644 index 000000000..0f5bd66e8 --- /dev/null +++ b/mysql-test/columnstore/oracle/func_replace_oracle_maxscale.result @@ -0,0 +1,31 @@ +SET sql_mode=ORACLE; +SET default_storage_engine=ColumnStore; +# +# MDEV-13003 - Oracle compatibility : Replace function +# +SELECT REPLACE(null,'a','b') ; +REPLACE(null,'a','b') +NULL +SELECT REPLACE('ab',null,'b') ; +REPLACE('ab',null,'b') +ab +SELECT REPLACE('ab','a',null) ; +REPLACE('ab','a',null) +b +SELECT REPLACE('ab',null,null) ; +REPLACE('ab',null,null) +ab +SELECT REPLACE('aaa','a',null) ; +REPLACE('aaa','a',null) +NULL +EXPLAIN EXTENDED SELECT REPLACE('ab','a',null) ; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +CREATE VIEW v1 AS SELECT REPLACE('ab','a',null) ; +SHOW CREATE VIEW v1; +View Create View character_set_client collation_connection +v1 CREATE VIEW "v1" AS select replace('ab','a',NULL) AS "REPLACE('ab','a',null)" latin1 latin1_swedish_ci +SELECT * FROM v1; +REPLACE('ab','a',null) +b +DROP VIEW v1; diff --git a/mysql-test/columnstore/oracle/func_replace_oracle_maxscale.test b/mysql-test/columnstore/oracle/func_replace_oracle_maxscale.test new file mode 100644 index 000000000..ac523805f --- /dev/null +++ b/mysql-test/columnstore/oracle/func_replace_oracle_maxscale.test @@ -0,0 +1,33 @@ +# +# Testing replace with null args +# + +--source ../include/have_columnstore.inc +--source ../include/detect_no_maxscale.inc + + +SET sql_mode=ORACLE; +SET default_storage_engine=ColumnStore; +--echo # +--echo # MDEV-13003 - Oracle compatibility : Replace function +--echo # + +--disable_query_log +--disable_warnings +DROP VIEW IF EXISTS v1; +--enable_query_log + + +SELECT REPLACE(null,'a','b') ; +SELECT REPLACE('ab',null,'b') ; +SELECT REPLACE('ab','a',null) ; +SELECT REPLACE('ab',null,null) ; +SELECT REPLACE('aaa','a',null) ; + +EXPLAIN EXTENDED SELECT REPLACE('ab','a',null) ; + +CREATE VIEW v1 AS SELECT REPLACE('ab','a',null) ; +SHOW CREATE VIEW v1; +SELECT * FROM v1; +DROP VIEW v1; +--enable_warnings diff --git a/mysql-test/columnstore/oracle/func_trim_oracle.test b/mysql-test/columnstore/oracle/func_trim_oracle.test index a09617118..b30ecba80 100644 --- a/mysql-test/columnstore/oracle/func_trim_oracle.test +++ b/mysql-test/columnstore/oracle/func_trim_oracle.test @@ -1,6 +1,15 @@ +--source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc + SET sql_mode=ORACLE; SET default_storage_engine=ColumnStore; +--disable_query_log +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +--enable_query_log + --echo # --echo # MDEV-15664 sql_mode=ORACLE: Make TRIM return NULL instead of empty string --echo # diff --git a/mysql-test/columnstore/setup/regression_env_setup.test b/mysql-test/columnstore/setup/regression_env_setup.test index f184584e7..49c37618e 100644 --- a/mysql-test/columnstore/setup/regression_env_setup.test +++ b/mysql-test/columnstore/setup/regression_env_setup.test @@ -7,6 +7,7 @@ # -------------------------------------------------------------- # # --source ../include/have_columnstore.inc +--source ../include/detect_maxscale.inc # --disable_warnings DROP DATABASE IF EXISTS tpch1m; diff --git a/primitives/blockcache/filebuffermgr.cpp b/primitives/blockcache/filebuffermgr.cpp index 8ddc3d3f3..fbdc2cb68 100644 --- a/primitives/blockcache/filebuffermgr.cpp +++ b/primitives/blockcache/filebuffermgr.cpp @@ -293,9 +293,12 @@ void FileBufferMgr::flushOIDs(const uint32_t* oids, uint32_t count) { fbList.erase(fFBPool[tmpIt->second->poolIdx].listLoc()); fEmptyPoolSlots.push_back(tmpIt->second->poolIdx); - fbSet.erase(tmpIt->second); fCacheSize--; } + for (byLBID_t::iterator tmpIt = itList.first; tmpIt != itList.second; tmpIt++) + { + fbSet.erase(tmpIt->second); + } } } } diff --git a/storage-manager/CMakeLists.txt b/storage-manager/CMakeLists.txt index fa459e2f8..b89012804 100755 --- a/storage-manager/CMakeLists.txt +++ b/storage-manager/CMakeLists.txt @@ -93,7 +93,7 @@ columnstore_link(unit_tests storagemanager) columnstore_executable(testS3Connection src/testS3Connection.cpp) target_compile_definitions(testS3Connection PUBLIC BOOST_NO_CXX11_SCOPED_ENUMS) -columnstore_link(testS3Connection storagemanager) +columnstore_link(testS3Connection storagemanager boost_program_options) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TMPDIR}) diff --git a/storage-manager/src/Downloader.cpp b/storage-manager/src/Downloader.cpp index 4e914ce61..ea0ff26d2 100644 --- a/storage-manager/src/Downloader.cpp +++ b/storage-manager/src/Downloader.cpp @@ -30,11 +30,11 @@ namespace storagemanager { Downloader::Downloader() : maxDownloads(0) { + logger = SMLogging::get(); storage = CloudStorage::get(); configListener(); Config::get()->addConfigListener(this); workers.setName("Downloader"); - logger = SMLogging::get(); tmpPath = "downloading"; bytesDownloaded = 0; } diff --git a/storage-manager/src/S3Storage.cpp b/storage-manager/src/S3Storage.cpp index 7e0b1957e..8c45336b3 100644 --- a/storage-manager/src/S3Storage.cpp +++ b/storage-manager/src/S3Storage.cpp @@ -112,7 +112,7 @@ S3Storage::ScopedConnection::~ScopedConnection() s3->returnConnection(conn); } -S3Storage::S3Storage(bool skipRetry) : skipRetryableErrors(skipRetry) +S3Storage::S3Storage(bool skipRetry, bool verbose) : skipRetryableErrors(skipRetry), verbose_enabled(verbose) { /* Check creds from envvars Get necessary vars from config @@ -225,7 +225,7 @@ S3Storage::S3Storage(bool skipRetry) : skipRetryableErrors(skipRetry) } ms3_library_init(); - if (libs3_debug == "enabled") + if (verbose_enabled || libs3_debug == "enabled") { ms3_debug(1); } diff --git a/storage-manager/src/S3Storage.h b/storage-manager/src/S3Storage.h index cda369a18..df63afc5b 100644 --- a/storage-manager/src/S3Storage.h +++ b/storage-manager/src/S3Storage.h @@ -32,7 +32,7 @@ namespace storagemanager class S3Storage : public CloudStorage { public: - explicit S3Storage(bool skipRetry = false); + explicit S3Storage(bool skipRetry = false, bool verbose = false); ~S3Storage() override; @@ -57,6 +57,7 @@ class S3Storage : public CloudStorage void returnConnection(std::shared_ptr conn); bool skipRetryableErrors; + bool verbose_enabled; std::string bucket; // might store this as a char *, since it's only used that way std::string prefix; diff --git a/storage-manager/src/SMLogging.cpp b/storage-manager/src/SMLogging.cpp index d69811821..02d5a6d17 100644 --- a/storage-manager/src/SMLogging.cpp +++ b/storage-manager/src/SMLogging.cpp @@ -21,12 +21,6 @@ using namespace std; -namespace -{ -storagemanager::SMLogging* smLog = NULL; -boost::mutex m; -}; // namespace - namespace storagemanager { SMLogging::SMLogging() @@ -44,13 +38,8 @@ SMLogging::~SMLogging() SMLogging* SMLogging::get() { - if (smLog) - return smLog; - boost::mutex::scoped_lock s(m); - if (smLog) - return smLog; - smLog = new SMLogging(); - return smLog; + static SMLogging smLog; + return &smLog; } void SMLogging::log(int priority, const char* format, ...) diff --git a/storage-manager/src/testS3Connection.cpp b/storage-manager/src/testS3Connection.cpp index 99e344cd6..425f2a4e5 100644 --- a/storage-manager/src/testS3Connection.cpp +++ b/storage-manager/src/testS3Connection.cpp @@ -20,23 +20,26 @@ #include #include #include +#include using namespace storagemanager; using namespace std; +namespace po = boost::program_options; -void printUsage() +void printUsage(const po::options_description& desc) { cout << "MariaDB Columnstore Storage Manager Test Configuration Connectivity.\n" << endl; cout << "Usage: testS3Connection \n" << endl; + cout<< desc <()->default_value(false), "Enable verbose output"); + + // Parse command line + po::variables_map vm; + po::store(po::parse_command_line(argc, argv, desc), vm); + po::notify(vm); + + if(vm.count("help")) { - case 'h': - default: - printUsage(); - return 0; - break; + printUsage (desc); + return 0; } + // Run the test with verbose flag + return s3TestConnection(vm["verbose"].as()); } - return s3TestConnection(); + catch(const std::exception& e) + { + std::cerr << e.what() << '\n'; + } + } diff --git a/tests/scripts/fullmtr.sh b/tests/scripts/fullmtr.sh index 3f8d86adf..7ca3a4558 100644 --- a/tests/scripts/fullmtr.sh +++ b/tests/scripts/fullmtr.sh @@ -4,7 +4,7 @@ SCRIPT_LOCATION=$(dirname "$0") MARIADB_SOURCE_PATH=$(realpath $SCRIPT_LOCATION/../../../../../) COLUMNSTORE_MTR_SOURCE=$(realpath $SCRIPT_LOCATION/../../mysql-test/columnstore) INSTALLED_MTR_PATH='/usr/share/mysql/mysql-test' -COLUMSNTORE_MTR_INSTALLED=${INSTALLED_MTR_PATH}/suite/columnstore +COLUMSNTORE_MTR_INSTALLED=${INSTALLED_MTR_PATH}/plugin/columnstore/columnstore/ PATCHNAME=$(realpath $SCRIPT_LOCATION)/mtr_warn.patch CURRENT_DIR=`pwd` mysql -e "create database if not exists test;" diff --git a/utils/common/CMakeLists.txt b/utils/common/CMakeLists.txt index 2f7aa2bc9..dc19cd77d 100644 --- a/utils/common/CMakeLists.txt +++ b/utils/common/CMakeLists.txt @@ -15,4 +15,4 @@ set(common_LIB_SRCS ) columnstore_library(common ${common_LIB_SRCS}) -columnstore_link(common boost_filesystem configcpp loggingcpp messageqcpp ${MARIADB_STRING_LIBS}) +columnstore_link(common boost_filesystem configcpp loggingcpp messageqcpp) diff --git a/utils/libmarias3/libmarias3 b/utils/libmarias3/libmarias3 index f74150b05..d9cb536a5 160000 --- a/utils/libmarias3/libmarias3 +++ b/utils/libmarias3/libmarias3 @@ -1 +1 @@ -Subproject commit f74150b05693440d35f93c43e2d2411cc66fee19 +Subproject commit d9cb536a532ef6e71df66d99e95562e1169ec93f